C++ 为什么我不能用WM\U NCPAINT刷新对话框,但可以用WM\U大小正常工作?
我正在MFC中使用对话框应用程序。要刷新对话框上的视图,我们正在使用C++ 为什么我不能用WM\U NCPAINT刷新对话框,但可以用WM\U大小正常工作?,c++,windows,winapi,visual-c++,mfc,C++,Windows,Winapi,Visual C++,Mfc,我正在MFC中使用对话框应用程序。要刷新对话框上的视图,我们正在使用WM\u NCPAINT,它确实会调用OnNCPaint,但有时视图不会得到刷新。行为并不总是可以复制的。同样的行为也发生在WM_PAINT上 当我们使用SendMessage(WM_SIZE)时,行为是不可复制的,并按预期工作 在签入代码之前,我想确定我是否应该使用WM_SIZE而不是WM_NCPAINT或WM_PAINT,因为它可以正常工作。如果我正确理解这个问题,您正在发送WM消息以触发对话框的重新绘制?正确的方法是使客户
WM\u NCPAINT
,它确实会调用OnNCPaint
,但有时视图不会得到刷新。行为并不总是可以复制的。同样的行为也发生在WM_PAINT
上
当我们使用SendMessage(WM_SIZE)
时,行为是不可复制的,并按预期工作
在签入代码之前,我想确定我是否应该使用
WM_SIZE
而不是WM_NCPAINT
或WM_PAINT
,因为它可以正常工作。如果我正确理解这个问题,您正在发送WM消息以触发对话框的重新绘制?正确的方法是使客户端区域无效
您可以直接使用Windows API函数
Invalidate()
,也可以在MFC中使用CWnd::Invalidate()
方法。不,您不应该使用这两种方法
要指示窗口需要重新绘制,请调用函数。这可能就是你应该使用的
要强制现在重新绘制窗口,请调用函数
无论哪种方式,都不要开始发送随机消息,祈祷其中一条消息的副作用是重新粉刷窗户。为什么要投否决票?我做错了什么?“行为不可复制,并按预期工作。”、“
发送消息(WM\u大小)
”等。问题中有很多令人反感的东西。没有一条WM\u大小消息。Windows也会发送大量其他消息,以便调整大小。你只要交叉手指让它工作就行了。但交叉手指并不是一种好的编程方法。WM_油漆也是如此。有一个合适的方法。看看答案。