Windows значок панели задач отображается для скрытого окна при загрузке до того, как панель задач становится видимой - PullRequest
0 голосов
/ 04 февраля 2020

Моя программа состоит из одного окна, созданного следующим образом:

/* handle for window */
MSG messages;            /* Here messages to the application are saved */
WNDCLASSEX wincl;        /* Data structure for the windowclass */
WM_TASKBAR = RegisterWindowMessageA("TaskbarCreated");
/* The Window structure */
wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
wincl.cbSize = sizeof(WNDCLASSEX);
/* Use default icon and mouse-pointer */
wincl.hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MyProg));
wincl.hIconSm = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MyProg));
wincl.hCursor = LoadCursor(NULL, IDC_ARROW);
wincl.lpszMenuName = NULL;                 /* No menu */
wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
wincl.cbWndExtra = 0;                      /* structure or the window instance */
wincl.hbrBackground = (HBRUSH)(CreateSolidBrush(RGB(200, 200, 200)));
MainWindowHandle = CreateWindowEx(
    0,                   /* Extended possibilites for variation */
    szClassName,         /* Classname */
    szClassName,         /* Title Text */
    (WS_OVERLAPPED),     /* default window */
    CW_USEDEFAULT,       /* Windows decides the position */
    CW_USEDEFAULT,       /* where the window ends up on the screen */
    500,                 /* The programs width */
    400,                 /* and height in pixels */
    HWND_DESKTOP,        /* The window is a child-window to desktop */
    NULL,                /* No menu */
    hThisInstance,       /* Program Instance handler */
    NULL                 /* No Window Creation data */
);

В начале (WM_CREATE) и при возникновении

WM_SYSCOMMAND SC_MINIMIZE OR SC_CLOSE

я вызываю

ShowWindow(MainWindowHandle, SW_HIDE);

И, используя обратный вызов с иконки systray, я показываю окно, используя следующую строку, или скрываю его снова, используя приведенное выше:

ShowWindow(MainWindowHandle, SW_SHOW);

Все это отлично работает, окно скрыто и панель задач значок исчезнет и наоборот. Если программа не запущена до того, как панель задач windows станет видимой. Это происходит, когда windows 10 'выключен' и запущен снова, вместо того, чтобы пройти правильный перезапуск l oop. Даже если при запуске окно правильно скрыто, значок на панели задач остается видимым. Единственный способ избавиться от этого - показать и скрыть окно, в результате чего окно на короткое время вспыхивает на экране sh, чего я не хочу, или, по крайней мере, когда это не нужно. Есть ли способ проверить, виден ли значок панели задач, когда окно скрыто, или, возможно, узнать, когда программа запускается до того, как панель задач станет видимой, а затем подождать, пока панель задач и сделать быстрое всплывающее окно sh, чтобы скрыть значок?

Я использую обратный вызов

s_uTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated"));

следующим образом:

LRESULT CALLBACK WindowProcedure(HWND MainWindowHandle, UINT message, WPARAM wParam, LPARAM lParam)
{
if (message == s_uTaskbarRestart && !IsWindowVisible(MainWindowHandle))
{
    restore();
    minimize();
    visible = false;
    return 0;
}

}

Но это не работает. Это было бы, если бы я не проверял, чтобы окно было видимым, но это заставило бы окно fla sh каждый раз при перезапуске панели задач.

Этот вид демонстрирует проблему .. Окно невидимо, но он отображается на панели задач, как будто он виден.

...