Я пишу приложение (c ++, win32), в котором я хочу создать главное окно как а) стандартное или б) без строки заголовка, но изменяемого размера / подвижного, и я хочу переключаться между двумя стилями при запуске время.
Я использую следующий код для создания окна:
bool bare = false ;
DWORD style_bare = WS_POPUP | WS_SIZEBOX | WS_THICKFRAME ;
DWORD style_std = WS_OVERLAPPEDWINDOW ;
DWORD win_style = bare ? style_bare : style_std ;
DWORD win_exstyle = WS_EX_ACCEPTFILES | WS_EX_CLIENTEDGE | WS_EX_APPWINDOW;
...
HWND main = CreateWindowEx( win_exstyle , className , applName , win_style, x, y, cx, cy, NULL, NULL, hInstance, NULL);
и позже, в MainWndProc (), чтобы изменить стиль
bare = ! bare ;
if ( bare )
SetWindowLongPtr( hwnd , GWL_STYLE, style_bare ) ;
else
SetWindowLongPtr( hwnd , GWL_STYLE, style_std ) ;
InvalidateRect( hwnd, NULL , TRUE ) ;
и, находясь в «голом» режиме, я обрабатываю сообщение WM_NCHITEST, которое делает подвижное пустое окно следующим образом:
if ( bare && WM_NCHITTEST == message )
{
LRESULT rc = DefWindowProc( hwnd, message, wParam, lParam ) ;
if ( HTCLIENT == rc ) return HTCAPTION ;
return rc ;
}
Код работает нормально, когда я создаю окно в любом режиме, но когда я переключаю режим, окно рисуется, как и ожидалось, но не «выбирается» ...
Когда я нажимаю на него, он перемещается за все окна, которые могут быть там, и когда я закрываю все окна, чтобы найти свое приложение и нажимаю на него, выбираются значки с рабочего стола.
Чего мне не хватает ...