Winapi 窗口:鼠标悬停在窗口装饰上

Winapi 窗口:鼠标悬停在窗口装饰上,winapi,mouse,rendering,nonclient,Winapi,Mouse,Rendering,Nonclient,在几乎所有Windows应用程序中,我注意到在非客户端区域按住鼠标按钮会导致绘制停止。为什么需要这样做 例如,我有一个托管的Direct 3D应用程序,它显示一个旋转的立方体。如果我将指针放在标题栏上并按住鼠标按钮,立方体将停止旋转,即使我没有将任何此类条件编码到循环中 为什么绘画停止了?有什么好处?最重要的是,如何解决这个问题?当您单击标题栏时,窗口管理器会尝试确定您是否正在单击或开始拖动(移动窗口)。如果您仍然按住按钮,则这是一个拖动:窗口管理器设置自己的消息循环并泵送消息,直到您释放鼠标。

在几乎所有Windows应用程序中,我注意到在非客户端区域按住鼠标按钮会导致绘制停止。为什么需要这样做

例如,我有一个托管的Direct 3D应用程序,它显示一个旋转的立方体。如果我将指针放在标题栏上并按住鼠标按钮,立方体将停止旋转,即使我没有将任何此类条件编码到循环中


为什么绘画停止了?有什么好处?最重要的是,如何解决这个问题?

当您单击标题栏时,窗口管理器会尝试确定您是否正在单击或开始拖动(移动窗口)。如果您仍然按住按钮,则这是一个拖动:窗口管理器设置自己的消息循环并泵送消息,直到您释放鼠标。您的窗口应该仍然能够处理消息,因为它们仍然会被调度,但是如果您的动画依赖于自定义消息循环,那么您将被“卡住”,直到模式拖动循环结束


通过触发动画响应消息来解决此问题:计时器对我来说似乎是一个不错的选择。

不过,我发现此“功能”对调试很有用。暂停旋转立方体以便进行更仔细的检查等等。只想澄清一下,我的应用程序不依赖于自定义消息循环。此外,我相信这一条件适用于Windows XP上的所有应用程序(和2000…还没有在其他应用程序上测试过)。