我在Win32 API上遇到问题。我有一个程序,当它处理WM_PAINT
条消息时,会调用BeginPaint
来剪切区域并验证更新区域,但BeginPaint
函数始终生成WM_NCPAINT
具有相同更新区域的消息,即使需要重新绘制的触摸部分仅在客户区域内。
有没有人知道为什么会这样?它位于具有WS_CHILD
样式的子窗口上。
答案 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
消息被发送。