91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MFC OnPaint被不斷調用的問題

發布時間:2020-07-23 16:16:12 來源:網絡 閱讀:3727 作者:llf_17 欄目:編程語言

本人最近在開發一個繪圖程序,需用到OnPaint。雖說MFC也用了比較久了,但對OnPaint還是理解不深。在OnPaint中我把 CPaintDC dc(this); 注釋掉了。然后自己手動獲取 CDC 進行操作。導致OnPaint被不斷的調用。導致這個問題的原因就是不應該把 CPaintDC dc(this); 注釋掉。要使用它。

因為CPaintDC dc(this); 的構造,析構里調用了CWnd::BeginPaint、CWnd::EndPaint 。具體如下:

CPaintDC的獨到之處就在于,它在構造函數中調用了 CWnd::BeginPaint在析構時調用了CWnd::EndPaint,而且它只能響應WM_ONPAINT消息。而這個BeginPaint會 發送WM_ONERASEBKGND消息,因此,它只擦除指定的背景并重畫,不影響對話框內的其他控件。值得注意的是,在這操作之后不要再調用 CDialog::Onpaint函數。


而之前的方法之所以不成功是因為:

BeginPaint() 和EndPaint() 可以刪除消息隊列中的WM_PAINT消息,并使無效區域有效。
GetDC()和ReleaseDC()并不刪除也不能使無效區域有效,因此當程序跳出 WM_PAINT 時 ,無效區域仍然存在。系統就回不斷發送WM_PAINT消息,于是程序不斷處理WM_PAINT消息。其中無效區域是指需要重畫的區域,無效的意思是:當前內容是舊的,過時的。

只 有當一個窗口消息空閑時,系統才會抽空檢查一下這個窗口的無效區域是否為非空(WM_PAINT的優先級是最低的。這也就是為什么系統很忙時窗口和桌面往 往會出現變白、刷新不了、留拖拽痕跡等現象的原因),如果非空,系統就發送WM_PAINT。所以一定要用BeginPaint、EndPaint把無效 區域設為空,否則WM_PAINT將一直被發送。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

赞皇县| 阿克陶县| 安福县| 萨嘎县| 柳河县| 闽清县| 苏尼特左旗| 新疆| 保德县| 江城| 青神县| 万载县| 尼勒克县| 岳池县| 七台河市| 马边| 桐城市| 津南区| 松溪县| 资讯| 丰顺县| 榆社县| 宁乡县| 镇远县| 汽车| 大埔区| 西吉县| 东乌珠穆沁旗| 桃江县| 哈密市| 唐山市| 调兵山市| 锡林郭勒盟| 芜湖县| 宝山区| 新巴尔虎右旗| 余江县| 无极县| 文昌市| 永修县| 崇文区|