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

Mfc 在最小化或最大化窗口的过程中处理什么消息?,mfc,onncpaint,Mfc,Onncpaint,我想用MFC自动绘制窗口的标题栏。所以我重写了CMainFrame的OnNcPaint()方法。一切似乎都正常,直到我点击控制菜单中的项目,使其最小化或最大化。在缩小或最大化过程中,我可以看到原来的标题栏出现。我不知道为什么会这样。也许在这个过程中我没有处理一些信息?我需要你的帮助。非常感谢 您可以使用Spy++查看窗口接收到的消息。我模糊地记得OnSize比我预期的一些消息来得早。在最小化/最大化过程中?听起来像是最小/最大动画。您可以通过“我的电脑”>“属性”>“高级”>“性能”设置禁用动画

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

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

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

至于标题问题,您将得到WM_大小。请看一下您的文档


OnShow在前面被调用。OnSize在..之后调用
我认为这些值是
SW\u MAXIMIZE
SW\u MINIMIZE

还有一种方法可以使你的应用程序不关心windows中的动画设置

有一篇文章是关于在最小化时将应用程序添加到系统托盘中的,这篇文章涵盖了令人惊讶的绘图。我已经好几年没用过它了,但如果你能找到它,你将是金色的

你说的是窗口动画,对吗?窗口从当前大小和位置显示为“增大”或“缩小”到最大大小或任务栏

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

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

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

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;
    }
}