最小化或恢复时没有WM_SIZE消息

时间:2010-09-22 04:47:04

标签: winapi mfc wtl

根据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? 除此之外,是否还有其他消息表明还原或最小化完成? 我的意思是,在系统中,大部分时间都有动画来显示最小化/恢复过程。我需要一条消息或事件让app知道动画在恢复时完成。

谢谢!

William L。

1 个答案:

答案 0 :(得分:0)

doc 中所述,窗口通过其WindowProc函数接收此消息,因此您无法通过Spy ++获取此消息。

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

要使用WTL应用程序向导进行检查,请创建一个最小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()中设置断点,它将被命中。

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