日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CDialogEx::OnPaint()的问题,或者为什么在对话框程序的OnPaint中绘图无效的问题

發布時間:2024/4/17 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CDialogEx::OnPaint()的问题,或者为什么在对话框程序的OnPaint中绘图无效的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這是一個基于對話框的程序,對話框上有按鈕,還有幾個CStatic用來繪圖,之前都是好好的,今天改成Unicode版本后,編譯正常,運行時CStatic中的圖像怎么也不顯示,有時候會閃現一次就消失,問題非常詭異。同樣的代碼,如果工程屬性中選回“使用多字節字符集”,則沒有問題;若再改成“使用Unicode字符集”,則問題重現。

研究了半天,發現網上相關的解釋一般都是說把OnPaint中的對基類的調用CDialogEx::OnPaint();這句注釋掉,或者放在自己的繪圖代碼后面,試了下并沒有效果。

基于MFC原理,OnPaint中是對無效區域進行繪圖處理的,基類的CDialogEx::OnPaint()調用之后,所有的無效區域都不存在了,因此之后的任何繪圖代碼都不會反映在界面上。正因為如此,把自己的繪圖代碼放在CDialogEx::OnPaint()之前是有必要的,但前提是你應該在CPaintDC dc(this)中繪制圖像,因為此時的無效區域就是它。

如果你繪圖的區域不在CPaintDC中,比如是在CStatic中,那么在繪圖之前,你必須先強制CStatic更新,即像下面代碼那樣處理

CStatic* pHeadPhoto = (CStatic*)GetDlgItem(IDC_STATIC_HEADPHOTO); pHeadPhoto->UpdateWindow();CDC* pDC = pHeadPhoto->GetDC(); // 以下是具體的繪圖代碼(略)

  

通過以上這些處理,你完全沒必要注釋掉CDialogEx::OnPaint()的調用,卻讓程序跑得更好。

(實際上一旦注釋掉CDialogEx::OnPaint(),界面的默認處理就失效了,比如按鈕就不會及時刷新。)

轉載于:https://www.cnblogs.com/cner/p/6928690.html

總結

以上是生活随笔為你收集整理的CDialogEx::OnPaint()的问题,或者为什么在对话框程序的OnPaint中绘图无效的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。