为什么调用BeginPaint()总是生成WM_NCPAINT消息?

时间:2008-09-19 07:42:18

标签: c++ windows winapi

我在Win32 API上遇到问题。我有一个程序,当它处理WM_PAINT条消息时,会调用BeginPaint来剪切区域并验证更新区域,但BeginPaint函数始终生成WM_NCPAINT具有相同更新区域的消息,即使需要重新绘制的触摸部分仅在客户区域内。

有没有人知道为什么会这样?它位于具有WS_CHILD样式的子窗口上。

3 个答案:

答案 0 :(得分:1)

WM_PAINT的MSDN条目说:

  

如果必须绘制窗口框架,可能也会将WM_NCPAINT消息发送到窗口过程,如果必须擦除窗口背景,则发送WM_ERASEBKGND消息。

我试图找出即使没有触及边框也一直发送的原因。我测试在控件内打开一个小记事本并尽量减少。它不触及控件的边框,仅在内部,BeginPaint()生成WM_NCPAINT

答案 1 :(得分:0)

我想总是发送WM_NCPAINT消息,并假设边框也需要重新绘制!

答案 2 :(得分:0)

如果您致电SetWindowPos并将SWP_DEFERERASE作为uFlags参数的参数传递会怎样?

这应该会阻止生成WM_SYNCPAINT消息,这会间接导致WM_NCPAINT消息被发送。