【问题标题】:no WM_SIZE message when minimize or restore最小化或还原时没有 WM_SIZE 消息
【发布时间】:2011-04-15 13:09:52
【问题描述】:

根据 MSDN,当窗口最小化或恢复时,应将 WM_SIZE 发送到窗口。 但是我的应用程序窗口,即 WTL CDialogImpl 在最小化或恢复时永远不会得到 WM_SIZE。

我使用spy++查看,我可以得到WM_SYSCOMMAND、WM_WINDOWPOSCHANING、WM_ACTIVE、WM_ACTIVEAPP等,但是没有WM_SIZE。

我检查了一些其他 WTL 示例应用程序,我能够在最小化或恢复时获得 WM_SIZE 消息。

我的问题是为什么我的 WTL CDialogImpl 窗口没有收到 WM_SIZE? 除此之外,是否有任何其他消息指示还原或最小化完成? 我的意思是,在系统中,大多数时候,都有动画来显示最小化/恢复过程。我需要一条消息或事件让应用知道恢复时动画已完成。

谢谢!

威廉·L.

【问题讨论】:

  • WM_MOVE,而不是 WM_SIZE。记录窗口的样式标志。

标签: winapi mfc wtl


【解决方案1】:

doc 中所述窗口通过其 WindowProc 函数接收此消息,因此您不会通过 Spy++ 获得它。

在创建、最小化和恢复时,ATL::CDialogImpl 派生对话框中无论如何都会收到 WM_SIZE 消息。

要使用 WTL AppWizard 检查它,请创建一个最小的 WTL 模态对话框应用程序并为 WM_SIZE 添加一个消息映射条目和一个匹配的 OnSize() 成员:

    BEGIN_MSG_MAP(CMainDlg)
        MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
        MESSAGE_HANDLER(WM_SIZE, OnSize)
        //...
    END_MSG_MAP()
    LRESULT OnSize(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
    {
        return 0;
    }

在 OnSize() 中设置断点,它将被命中。

您的问题(如果有)在其他地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-23
    • 2013-07-08
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 2016-07-26
    相关资源
    最近更新 更多