VS2015-MFC 之 也談 Button重繪

接手同事售後軟件的工具開發項目,因爲UI設計問題,稍接觸了一下Button重繪。

項目第一個問題是debug模式會報斷言錯誤,release模式是正常的。詢同事得知,知道debug模式有問題,所以一隻都在release模式下下斷點……

一步步加斷點,debug發現是在WM_DRAWITEM消息的實現部分OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct )出現斷言錯誤。

看代碼沒發現特別的異常,但把所有按鈕的【Owner Draw】屬性改爲false後就不會再出現斷言錯誤。

同事按鈕重繪部分是按如下鏈接方式實現: http://blog.csdn.net/fevershen/article/details/42103471

以上,發現Assertion原因如下:
因爲要繪製的Button控件在以前進行過消息綁定,需要將所有需要重繪的button的所有在映射函數DoDataExchange()的消息綁定的語句註釋掉(爲避免遺漏,建議右鍵->查找所有引用的方式,對查找到的所有消息綁定進行註釋): /
/DDX_Control(pDX, IDC_BUTTON_mini, button_mini); //DDX_Control(pDX, IDC_BUTTON_close, button_close);

按照以上方法修改後,成功解決!!

方法二(未驗證): 自定義Button類的方案,參見: http://blog.sina.com.cn/s/blog_65cab32d01013uad.html

發佈了57 篇原創文章 · 獲贊 29 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章