在最小化或最大化窗口的过程中处理什么消息?

时间:2008-12-24 06:49:52

标签: mfc onncpaint

我想用MFC自绘一个窗口的标题栏。所以我重写了CMainFrame的OnNcPaint()方法。一切似乎都没问题,直到我点击控制菜单中的项目使其最小化或最大化。在缩小或最大化过程中,我可以看到原始标题栏出现。我不知道为什么会这样。也许有一些我在这个过程中没有处理过的消息?需要你的帮助。非常感谢!

4 个答案:

答案 0 :(得分:2)

最小化/最大化过程中?听起来像是最小/最大动画。您可以通过“我的电脑”禁用动画来验证这一点>属性>高级> (性能)设置。

至于标题问题,您将获得WM_SIZE。请查看CWnd::OnSize的文档。

CMyDialog::OnSize(UINT nType, int cx, int cy)
{
    switch (nType)
    {
        case SIZE_MAXIMIZED:
            // window was maximized
            break;

        case SIZE_MINIMIZED:
            // window was minimized
            break;

        case SIZE_RESTORED:
            // misleading - this occurs when restored from minimized/maximized AND
            // for normal size operations when already restored
            break;

        default:
            // you could also deal with SIZE_MAXHIDE and SIZE_MAXSHOW
            // but rarely need to
            break;
    }
}

答案 1 :(得分:0)

您可以使用Spy ++查看窗口收到的消息。我对OnSize的模糊记忆比我预期的一些消息要早。

答案 2 :(得分:0)

之前调用OnShow。 OnSize是在...之后调用的 我认为值为SW_MAXIMIZESW_MINIMIZE ..

还有一种方法可以让你的应用程序不关心Windows中的动画设置。
有一种关于在最小化时将应用程序添加到系统托盘的技巧,这将令人惊讶地覆盖了绘图。我用它已经好几年了,但是如果你能找到它,你就会变得金黄。

答案 3 :(得分:0)

你在谈论窗口动画,对吧?窗口显示从其当前大小和位置“增长”或“缩小”到最大化大小或任务栏。

该动画的执行与窗口的外观无关。您可以调用DrawAnimatedRects API function自行触发动画。它只是根据当前显示设置绘制一个正常的标题栏。

请注意,具有自定义标题栏的其他窗口的行为方式相同。例如,查看各种版本的Office。在最小化或最大化时,会绘制Windows标题栏,而不是客户标题栏。在调整不占用全屏的窗口时,您还可以看到异常。例如,当最大化Hearts游戏时,动画会显示窗口扩展到屏幕的整个宽度,但是当动画结束时,窗口会变窄(但仍会最大化)。

因此,要回答您的问题,不会发送任何消息。调整大小动画由窗口管理器执行,无需任何协助或来自调整大小的窗口的参与。就您的程序而言,窗口直接从原始大小变为新大小。