为什么我无法使用WM_NCPAINT刷新对话框,但与WM_SIZE一起正常工作?

时间:2015-01-13 12:04:02

标签: c++ windows winapi visual-c++ mfc

我在MFC中有对话框应用程序。要刷新对话框上的视图,我们使用WM_NCPAINT,它会调用OnNCPaint,但有时视图不会刷新。行为并不总是可重复的。 WM_PAINT也发生了同样的行为。

当我们使用SendMessage(WM_SIZE)时,行为不可重复,并按预期工作。

在检查代码之前,我想确保,我应该使用WM_SIZE代替WM_NCPAINT还是WM_PAINT,因为它可以正常运行。

2 个答案:

答案 0 :(得分:6)

不,你不应该使用其中任何一种。

要指示需要重新绘制窗口,请调用InvalidateRect功能。这就是你应该使用的。

要强制重新绘制窗口现在,请调用UpdateWindow函数。

无论哪种方式,都不要开始发送随机消息,并祈祷其中一条消息的副作用是重新绘制窗口。

答案 1 :(得分:5)

如果我正确理解了这个问题,您是否正在发送WM消息以触发重新绘制对话框?正确的方法是使客户区无效。

您可以直接使用Windows API函数InvalidateRect(),也可以使用MFC中的CWnd::Invalidate()方法。