powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Окно мерцает чернотой, как избавиться? НУЖНА ПОМОЩЬ!!!
3 сообщений из 3, страница 1 из 1
Окно мерцает чернотой, как избавиться? НУЖНА ПОМОЩЬ!!!
    #34073050
Фотография aLexx Subb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При создании окна с использованием прозрачности происходит нехорошая вещь. Окно сначала отрисовывается черным, затем нормальным фоном, в итоге происходит неприятное смаргивание. Вот примерчик
Работает не ниже Win2k

#include <windows.h>

LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow )
{
static char szAppName[] = "HelloWin" ;
HWND hwnd ;
MSG msg ;

WNDCLASSEX wndclass ;

wndclass.cbSize = sizeof( wndclass );
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon( NULL, IDI_APPLICATION );
wndclass.hCursor = LoadCursor( NULL, IDC_ARROW );
wndclass.hbrBackground = (HBRUSH) GetSysColorBrush( COLOR_BTNFACE );

wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;

wndclass.hIconSm = LoadIcon( NULL, IDI_APPLICATION );

RegisterClassEx( &wndclass );

hwnd = CreateWindow( szAppName, "The Hello Program", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL );

const int WS_EX_LAYERED = 0x00080000;
typedef BOOL (WINAPI *PFN)( HWND hWnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags );
static HMODULE hm = GetModuleHandle( "USER32.DLL" );
static PFN pfn = (PFN)GetProcAddress( hm, "SetLayeredWindowAttributes" );
if( pfn )
{
const int LWA_COLORKEY = 0x00000001;
SetWindowLong( hwnd,GWL_EXSTYLE, GetWindowLong( hwnd,GWL_EXSTYLE)|WS_EX_LAYERED );
pfn( hwnd, GetSysColor( COLOR_BTNFACE ), 0, LWA_COLORKEY );
//UpdateWindow( hwnd );
}

ShowWindow( hwnd, iCmdShow );
UpdateWindow( hwnd );

while( GetMessage (&msg, NULL, 0, 0) )
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}

return (int)msg.wParam ;
}

LRESULT CALLBACK WndProc( HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam )
{
switch (iMsg)
{
case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
}
return DefWindowProc( hwnd, iMsg, wParam, lParam );
}
...
Рейтинг: 0 / 0
Окно мерцает чернотой, как избавиться? НУЖНА ПОМОЩЬ!!!
    #34073390
pandrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну видимо, надо плотно поработать с расширенными стилями.
Да и вообще, зачем сегодня кодировать на голом WinAPI? Вопросы будут возникать по каждой мелочи (ответ всегда можно найти в MSDN, правда не быстро).
Посмотри в исходниках (VCL или MFC) как у них реализовано, лучше прямо воспользуйся их классами.
...
Рейтинг: 0 / 0
Окно мерцает чернотой, как избавиться? НУЖНА ПОМОЩЬ!!!
    #34074259
Фотография aLexx Subb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VCL не из той оперы, MFC неохото таскать за приложением.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Окно мерцает чернотой, как избавиться? НУЖНА ПОМОЩЬ!!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]