1

我正在通过使用 SetWindowLong(hWndParent, GWL_STYLE, 0) 删除窗口默认栏来制作带有自定义绘制按钮的自定义标题栏。现在一切都很好,除了我坚持通过以编程方式单击任务栏来最小化我的窗口。我现在正在尝试 WM_ACTIVATEAPP,但窗口无法正确最小化。

这是主窗口的 WM_ACTIVATEAPP 的代码:

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

当您左键单击任务栏时,它会最小化但是一旦您释放单击.. 窗口将恢复.. 有什么遗漏吗?我想在您释放点击后使其最小化。

注意:我使用了激活窗口代码,因为窗口似乎能够在使用自定义绘制按钮最小化后通过单击任务栏来恢复自身。

4

1 回答 1

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 来正确最小化/最大化窗口。

于 2013-09-21T06:41:11.087 回答