Ответ 1
Прежде чем использовать SetWindowLong
, вызовите ShowWindow(hWnd, SW_HIDE)
, затем вызовите SetWindowLong
, затем вызовите ShowWindow
снова, как ShowWindow(hWnd, SW_SHOW)
. Таким образом, ваш код будет выглядеть так:
long style= GetWindowLong(hWnd, GWL_STYLE);
style &= ~(WS_VISIBLE); // this works - window become invisible
style |= WS_EX_TOOLWINDOW; // flags don't work - windows remains in taskbar
style &= ~(WS_EX_APPWINDOW);
ShowWindow(hWnd, SW_HIDE); // hide the window
SetWindowLong(hWnd, GWL_STYLE, style); // set the style
ShowWindow(hWnd, SW_SHOW); // show the window for the new style to come into effect
ShowWindow(hWnd, SW_HIDE); // hide the window so we can't see it
Вот соответствующая цитата из Веб-сайт Microsoft:
Чтобы предотвратить включение кнопки окна на панели задач, создайте незанятое окно с расширенным стилем WS_EX_TOOLWINDOW. Как альтернативу, вы можете создать скрытое окно и сделать это скрытым окно владельца видимого окна.
Shell удалит кнопку окна с панели задач, только если стиль окна поддерживает видимые кнопки панели задач. Если ты хочешь динамически изменить стиль окна на тот, который не поддерживает видимые кнопки панели задач, вы должны сначала скрыть окно (путем вызова ShowWindow с SW_HIDE), измените стиль окна, а затем покажите окно.