Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我不能用WM\U NCPAINT刷新对话框,但可以用WM\U大小正常工作?_C++_Windows_Winapi_Visual C++_Mfc - Fatal编程技术网

C++ 为什么我不能用WM\U NCPAINT刷新对话框,但可以用WM\U大小正常工作?

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消息以触发对话框的重新绘制?正确的方法是使客户

我正在MFC中使用对话框应用程序。要刷新对话框上的视图,我们正在使用
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_油漆也是如此。有一个合适的方法。看看答案。