Недостаточно просто добавить стиль WS_EX_TOOLWINDOW
, если вы также оставите стиль по умолчанию WS_EX_APPWINDOW
на месте.Попробуйте использовать это вместо:
LONG_PTR ExStyle = GetWindowLongPtr(hWnd, GWL_EXSTYLE);
SetWindowLongPtr(hWnd, GWL_EXSTYLE, (Style & ~WS_EX_APPWINDOW) | WS_EX_TOOLWINDOW);
Хотя, более простой способ заставить TForm
вести себя как окно инструмента - это просто установить его свойство BorderStyle
в bsToolWindow
или bsSizeToolWin
.
Однако обратите внимание, что в XE7 + вы должны использовать ApplicationHWND()
, чтобы получить HWND
, который фактически находится на панели задач, поскольку может отличаться от TForm
окно.Это было даже указано в ответе на вопрос, который вы отклонили только потому, что он был написан на Delphi вместо C ++.Соответствующие вызовы функций не меняются, только синтаксис кода.
Попробуйте это:
#include <FMX.Platform.Win.hpp>
#include <Winapi.Windows.hpp>
void HideAppOnTaskbar()
{
HWND hAppWnd = Fmx::Platform::Win::ApplicationHWND();
ShowWindow(hAppWnd, SW_HIDE);
LONG_PTR ExStyle = GetWindowLongPtr(hAppWnd, GWL_EXSTYLE);
SetWindowLongPtr(hAppWnd, GWL_EXSTYLE, (ExStyle & ~WS_EX_APPWINDOW) | WS_EX_TOOLWINDOW);
//ShowWindow(hAppWnd, SW_SHOW);
}
void ShowAppOnTaskbar()
{
HWND hAppWnd = Fmx::Platform::Win::ApplicationHWND();
ShowWindow(hAppWnd, SW_HIDE);
LONG_PTR ExStyle = GetWindowLongPtr(hAppWnd, GWL_EXSTYLE);
SetWindowLongPtr(hAppWnd, GWL_EXSTYLE, (ExStyle & ~WS_EX_TOOLWINDOW) | WS_EX_APPWINDOW);
ShowWindow(hAppWnd, SW_SHOW);
}
void __fastcall TForm1::CreateHandle()
{
//...
HideAppOnTaskbar(); // or ShowAppOnTaskbar(), as needed
}