C/C++/C#:如何在Windows7上强制重新绘制windows chrome?

C/C++/C#:如何在Windows7上强制重新绘制windows chrome?,c#,.net,c++,windows-7,window-chrome,C#,.net,C++,Windows 7,Window Chrome,我的应用程序有一个标准的顶级窗口。我需要强制重新绘制窗口chrome(也称为窗口的非客户端区域)。我不在乎客户区是否也重新喷漆,但chrome本身需要强制重新喷漆 尤其是我需要这个在Windows7上工作。在我的特殊情况下,它是否适用于其他操作系统版本并不重要。该解决方案可以是C、C++、C等任何语言。 < P>也许您可以将WMYNCFrice消息发送到窗口 根据,似乎 RedrawWindow( hWnd, NULL, NULL, RDW_INVALIDATE | RDW_FRAME );

我的应用程序有一个标准的顶级窗口。我需要强制重新绘制窗口chrome(也称为窗口的非客户端区域)。我不在乎客户区是否也重新喷漆,但chrome本身需要强制重新喷漆


尤其是我需要这个在Windows7上工作。在我的特殊情况下,它是否适用于其他操作系统版本并不重要。该解决方案可以是C、C++、C等任何语言。

< P>也许您可以将WMYNCFrice消息发送到窗口

根据,似乎

RedrawWindow( hWnd, NULL, NULL, RDW_INVALIDATE | RDW_FRAME );
这就是你要找的

RDW_帧使窗口的非客户端区域中与更新区域相交的任何部分接收WM_NCPAINT消息。还必须指定RDW_INVALIDATE标志;否则,RDW_帧没有效果。除非指定了RDW_UPDATENOW或RDW_ERASENOW,否则在重画窗口执行期间通常不会发送WM_NCPAINT消息。
我认为windows会自行绘制chrome。windows出现错误的场景是什么?这个.Invalidate()是否不更新chrome?我想不出一个快速/简单的测试来亲自尝试……过缺:Invalidate()会导致客户端区域的重新绘制,但不会导致窗口的重新绘制。奥贝利克斯:这个问题很复杂。在Windows7(但不是其他)下,一个使用WM_NCPAINT定制chrome绘图的新模式窗口偶尔不会绘制任何内容。大多数情况下,它工作正常,然后50分之一没有,就好像根本没有窗户一样。如果我能检测到什么时候发生这种情况,我想强制重画整个窗口,希望它会出现。我已尝试重新绘制客户端,但没有帮助。很抱歉,此消息是由操作系统在决定需要绘制窗口时发送的。将此消息发送到窗口不会导致屏幕上的chrome更新,而只是将代码提取到我必须自己提供的DC中。