我在Win32 API上遇到问题。我有一个程序,当它处理WM_PAINT
消息时,它会调用BeginPaint
来裁剪区域并验证更新区域,但BeginPaint
函数始终会生成具有相同更新区域的WM_NCPAINT
消息,即使需要重新绘制的被触摸零件是只在客户区域内。为什么对BeginPaint()的调用总是生成WM_NCPAINT消息?
有没有人有任何线索为什么会发生这种情况?它在WS_CHILD
风格的儿童窗户上。
我在Win32 API上遇到问题。我有一个程序,当它处理WM_PAINT
消息时,它会调用BeginPaint
来裁剪区域并验证更新区域,但BeginPaint
函数始终会生成具有相同更新区域的WM_NCPAINT
消息,即使需要重新绘制的被触摸零件是只在客户区域内。为什么对BeginPaint()的调用总是生成WM_NCPAINT消息?
有没有人有任何线索为什么会发生这种情况?它在WS_CHILD
风格的儿童窗户上。
我猜WM_NCPAINT
消息总是发送,并假定边界也需要重新绘制!
为WM_PAINT的MSDN词条中说:
功能可以也发送
WM_NCPAINT
消息到窗口过程,如果窗口框架必须涂并发送WM_ERASEBKGND
消息,如果窗口背景,必须先擦除。
我想弄清楚为什么总是发送即使边界没有被触及。我测试在控件内部打开一个小记事本并尽量减少。它不会触及控件的边界,只是在里面,并且BeginPaint()
会生成WM_NCPAINT
。
如果您拨打SetWindowPos
并通过作为参数uFlags
参数,会发生什么情况?
这应防止生成WM_SYNCPAINT
消息,这将间接导致发送WM_NCPAINT
消息。
你能详细解释为什么这会导致你的问题? – 2008-09-19 14:38:53
大部分性能,因为即使帧不脏也会产生帧重绘。我有一个用CSS盒子模型设置的小部件,我使用框架来做边距,边框和填充。 – 2008-09-19 17:08:32