我在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