C ++ WinAPI Нужна помощь, чтобы сделать окно свернутым с помощью левой кнопки мыши на панели задач

Я делаю настраиваемую строку заголовка с настраиваемыми кнопками рисования, удаляя панель окна по умолчанию с помощью SetWindowLong (hWndParent, GWL_STYLE, 0). Сейчас все идет хорошо, за исключением того, что я застрял в том, чтобы свести окно к минимуму, программно щелкая панель задач. Я пытаюсь WM_ACTIVATEAPP прямо сейчас, но окно не может правильно свернуть.

Это код для WM_ACTIVATEAPP для главного окна:

case WM_ACTIVATEAPP:
if(LOWORD(wParam) == FALSE)
SendMessage(hWndParent,WM_SYSCOMMAND,SC_MINIMIZE,NULL);
break;

Когда вы щелкаете левой кнопкой мыши на панели задач, она минимизируется, НО после того, как вы отпустили щелчок .. окно будет восстановлено .. Чего-то не хватает? Я хочу, чтобы он был минимальным после отпускания клика.

Примечания: Я не вставляю код окна активации, потому что окно, кажется, может восстановиться, щелкнув панель задач после сворачивания с помощью пользовательской кнопки рисования.

1

Решение

Вы, вероятно, также не обрабатываете WM_NCACTIVATE. Попробуйте обработать это, как это:

case WM_NCACTIVATE:
break;
case WM_ACTIVATEAPP:
if (LOWORD(wParam) == FALSE)
SendMessage(hWnd, WM_SYSCOMMAND, SC_MINIMIZE, NULL);
break;

Редактировать:

Я, должно быть, пропустил ту часть вашего вопроса, где вы сказали, что удалили панель по умолчанию, установив стиль на 0. Это определенно не правильный способ сделать это, вы должны сделать что-то вроде этого, как было найдено Вот:

LONG lStyle = GetWindowLong(hWnd, GWL_STYLE);
lStyle &= ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZE | WS_MAXIMIZE | WS_SYSMENU);
SetWindowLong(hWnd, GWL_STYLE, lStyle);

После этого вам больше не нужно обрабатывать WM_ACTIVATEAPP или WM_NCACTIVATE, чтобы правильно свернуть / развернуть окно.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]