接手同事售後軟件的工具開發項目,因爲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