【问题标题】:C++ WinAPI Need Help Stuck At Making Window Minimize With Left Click Taskbar ProgrammaticallyC++ WinAPI 需要帮助以编程方式使用左键单击任务栏使窗口最小化
【发布时间】:2013-09-21 06:03:44
【问题描述】:

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

这是主窗口的 WM_ACTIVATEAPP 代码:

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

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

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

【问题讨论】:

    标签: c++ winapi taskbar minimize


    【解决方案1】:

    您可能也没有处理 WM_NCACTIVATE。尝试处理它,类似于这样:

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

    编辑:

    我一定错过了你的问题的一部分,你说你通过将样式设置为 0 来删除默认栏。这绝对不是正确的方法,你应该按照这个思路做一些事情,如发现here:

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

    【讨论】:

    • 我刚刚试了一下,完全让窗口无法模拟任务栏的最小化。对于具有相同设置的简单窗口也是如此,它也无法模拟任务栏的最小化。编辑:对不起,迟到的评论,现在测试它。 Edit2:非常感谢你救了我。从昨天开始一直在寻找解决方案,我不知道我首先在样式设置中犯了错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 2017-04-17
    • 2011-02-14
    • 2019-11-26
    • 1970-01-01
    • 2010-09-09
    相关资源
    最近更新 更多