亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

莲花县| 张北县| 福海县| 岳阳市| 吴川市| 三明市| 迁安市| 蒙自县| 苏尼特右旗| 山东| 遂溪县| 黎城县| 合水县| 南昌县| 体育| 天长市| 华阴市| 肥东县| 甘肃省| 安陆市| 千阳县| 时尚| 隆林| 望都县| 榆社县| 龙江县| 扬州市| 遂宁市| 老河口市| 禹城市| 芜湖市| 青冈县| 新晃| 叙永县| 平原县| 包头市| 离岛区| 隆回县| 马边| 邵东县| 都兰县|