[英](Win API) I cannot change title bar (non-client area) color with WM_NCPAINT
[英]Why does a call to BeginPaint() always generate a WM_NCPAINT message?
我在 Win32 API 上遇到問題。我有一個程序,當它處理WM_PAINT
消息時,它調用BeginPaint
來剪輯區域並驗證更新區域,但是BeginPaint
function 總是生成具有相同更新的WM_NCPAINT
消息區域,即使需要重新繪制的觸摸部分僅在客戶區域內。
有誰知道為什么會這樣? 它位於具有WS_CHILD
樣式的子 windows 上。
WM_PAINT 的 MSDN 條目說:
如果必須繪制 882340040658988 幀,則 function也可以向 window 過程發送
WM_NCPAINT
消息,如果必須擦除 window 背景,則發送WM_ERASEBKGND
消息。
我試圖弄清楚為什么即使沒有觸及邊界它也總是發送。 我測試在控件內打開一個小記事本並最小化。 它不觸及控件的邊界,只是在內部並且BeginPaint()
生成一個WM_NCPAINT
。
我想WM_NCPAINT
消息總是在假設邊框也需要重新繪制的情況下發送的!
如果您調用SetWindowPos
並將SWP_DEFERERASE
作為參數傳遞給uFlags
參數,會發生什么情況?
這應該可以防止生成WM_SYNCPAINT
消息,這會間接導致發送WM_NCPAINT
消息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.