1

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

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

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

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

谢谢!

威廉·L。

4

1 回答 1

0

如文档 中所述,窗口通过其 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() 中设置一个断点,它将被命中。

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

于 2010-11-20T16:56:46.530 回答