C++ 为什么对BeginPaint()的调用总是生成WM\u NCPAINT消息?

C++ 为什么对BeginPaint()的调用总是生成WM\u NCPAINT消息?,c++,windows,winapi,C++,Windows,Winapi,我在Win32 API上遇到了一个问题。我有一个程序,当它处理WM_-PAINT消息时,它调用BeginPaint来剪裁区域并验证更新区域,但是BeginPaint函数总是生成一条具有相同更新区域的WM_-NCPAINT消息,即使需要重新喷漆的接触零件仅在客户区域内 有人知道为什么会这样吗?它位于子窗口上,具有WS\u child样式。我猜WM\u NCPAINT消息发送时总是假设边框也需要重新绘制 WM_油漆的MSDN条目上写着: 如果必须绘制窗框,则功能还可以向窗口程序发送WM_NCPAIN

我在Win32 API上遇到了一个问题。我有一个程序,当它处理
WM_-PAINT
消息时,它调用
BeginPaint
来剪裁区域并验证更新区域,但是
BeginPaint
函数总是生成一条具有相同更新区域的
WM_-NCPAINT
消息,即使需要重新喷漆的接触零件仅在客户区域内


有人知道为什么会这样吗?它位于子窗口上,具有
WS\u child
样式。

我猜
WM\u NCPAINT
消息发送时总是假设边框也需要重新绘制

WM_油漆的MSDN条目上写着:

如果必须绘制窗框,则功能还可以向窗口程序发送
WM_NCPAINT
消息;如果必须擦除窗口背景,则功能
WM_ERASEBKGND
消息


我试图弄明白为什么它总是发送,即使没有触及边界。我测试在控件内打开一个小记事本并最小化。它不触及控件的边界,只在控件内部,
BeginPaint()
生成一个
WM\u NCPAINT
如果调用
SetWindowPos
并将
SWP\u delerase
作为
uFlags
参数的参数传递,会发生什么


这将防止生成会间接导致发送
WM\u SYNCPAINT
消息的
WM\u SYNCPAINT
消息。

您能否详细解释这会导致问题的原因?主要是性能问题,因为即使帧不脏,它也会生成帧重绘。我有一个CSS框模型的小部件集,我使用框架来做边距、边框和填充。窗口消息间谍显示WM_SYNCPAINT没有生成。当窗口变脏(有东西在上面,当它消失时需要重新绘制)而不是调整大小时,问题就会发生。我在考虑忘记BeginPaint()并自己获取DC,然后用“手”验证该区域。