MFCOnPaint被不斷調(diào)用的問(wèn)題

本人最近在開(kāi)發(fā)一個(gè)繪圖程序,需用到OnPaint。雖說(shuō)MFC也用了比較久了,但對(duì)OnPaint還是理解不深。在OnPaint中我把 CPaintDC dc(this); 注釋掉了。然后自己手動(dòng)獲取 CDC 進(jìn)行操作。導(dǎo)致OnPaint被不斷的調(diào)用。導(dǎo)致這個(gè)問(wèn)題的原因就是不應(yīng)該把 CPaintDC dc(this); 注釋掉。要使用它。

創(chuàng)新互聯(lián)"三網(wǎng)合一"的企業(yè)建站思路。企業(yè)可建設(shè)擁有電腦版、微信版、手機(jī)版的企業(yè)網(wǎng)站。實(shí)現(xiàn)跨屏營(yíng)銷(xiāo),產(chǎn)品發(fā)布一步更新,電腦網(wǎng)絡(luò)+移動(dòng)網(wǎng)絡(luò)一網(wǎng)打盡,滿足企業(yè)的營(yíng)銷(xiāo)需求!創(chuàng)新互聯(lián)具備承接各種類(lèi)型的做網(wǎng)站、網(wǎng)站建設(shè)項(xiàng)目的能力。經(jīng)過(guò)10年的努力的開(kāi)拓,為不同行業(yè)的企事業(yè)單位提供了優(yōu)質(zhì)的服務(wù),并獲得了客戶的一致好評(píng)。

因?yàn)镃PaintDC dc(this); 的構(gòu)造,析構(gòu)里調(diào)用了CWnd::BeginPaint、CWnd::EndPaint 。具體如下:

CPaintDC的獨(dú)到之處就在于,它在構(gòu)造函數(shù)中調(diào)用了 CWnd::BeginPaint在析構(gòu)時(shí)調(diào)用了CWnd::EndPaint,而且它只能響應(yīng)WM_ONPAINT消息。而這個(gè)BeginPaint會(huì) 發(fā)送WM_ONERASEBKGND消息,因此,它只擦除指定的背景并重畫(huà),不影響對(duì)話框內(nèi)的其他控件。值得注意的是,在這操作之后不要再調(diào)用 CDialog::Onpaint函數(shù)。

而之前的方法之所以不成功是因?yàn)椋?/p>

BeginPaint() 和EndPaint() 可以刪除消息隊(duì)列中的WM_PAINT消息,并使無(wú)效區(qū)域有效。
GetDC()和ReleaseDC()并不刪除也不能使無(wú)效區(qū)域有效,因此當(dāng)程序跳出 WM_PAINT 時(shí) ,無(wú)效區(qū)域仍然存在。系統(tǒng)就回不斷發(fā)送WM_PAINT消息,于是程序不斷處理WM_PAINT消息。其中無(wú)效區(qū)域是指需要重畫(huà)的區(qū)域,無(wú)效的意思是:當(dāng)前內(nèi)容是舊的,過(guò)時(shí)的。

只 有當(dāng)一個(gè)窗口消息空閑時(shí),系統(tǒng)才會(huì)抽空檢查一下這個(gè)窗口的無(wú)效區(qū)域是否為非空(WM_PAINT的優(yōu)先級(jí)是最低的。這也就是為什么系統(tǒng)很忙時(shí)窗口和桌面往 往會(huì)出現(xiàn)變白、刷新不了、留拖拽痕跡等現(xiàn)象的原因),如果非空,系統(tǒng)就發(fā)送WM_PAINT。所以一定要用BeginPaint、EndPaint把無(wú)效 區(qū)域設(shè)為空,否則WM_PAINT將一直被發(fā)送。

新聞名稱:MFCOnPaint被不斷調(diào)用的問(wèn)題
文章起源:http://muchs.cn/article44/ijdihe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開(kāi)發(fā)、虛擬主機(jī)、軟件開(kāi)發(fā)、網(wǎng)頁(yè)設(shè)計(jì)公司、ChatGPT網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開(kāi)發(fā)