照著書(shū)上做的一個(gè)小的Demo,就是點(diǎn)擊的時(shí)候改變按鈕的內(nèi)容,howerver,它的程序,點(diǎn)擊叉叉關(guān)閉可以正確的關(guān)閉程序,可是我的呢,點(diǎn)擊關(guān)閉的時(shí)候,沒(méi)有任何反應(yīng),相反,和點(diǎn)擊按鈕的一樣的動(dòng)作,改變按鈕的內(nèi)容,查了網(wǎng)上的資料,發(fā)現(xiàn)時(shí)那個(gè)發(fā)送消息調(diào)用的就是默認(rèn)的兩個(gè)按鈕,也就是IDOK和IDCANCEL。我重寫(xiě)的話,就用到了這兩個(gè),二把它們的CDialog::OnOK();和CDialog::OnCANCEL();都注釋掉了,這樣調(diào)用的當(dāng)然就是那個(gè)響應(yīng)的函數(shù)了。
解決辦法:
1.我做的就是,添加消息VM_CLOSE對(duì)應(yīng)的消息函數(shù),OnClose重寫(xiě),里面加入 EndDialog(IDOK);然后,就OK了。
代碼:
void CTest5Dlg::OnClose()


{
// TODO: Add your message handler code here and/or call default
EndDialog(IDOK);
CDialog::OnClose();
}
2,我想啊,這個(gè)不是跟默認(rèn)的IDOK和IDCANCEL有關(guān)嗎,那我不用嘛,因?yàn)檫@兩個(gè)按鈕ID很特殊,不要隨便改寫(xiě),于是我就換個(gè)ID
看看嘛,好像例子那個(gè)Demo就是這樣,沒(méi)有用那個(gè)兩個(gè)照樣可以正常運(yùn)行哦。
于是重新做一個(gè)試試。
經(jīng)過(guò)驗(yàn)證,OK,不過(guò)比較曲折,原因當(dāng)然是:ID太麻煩了,更改的時(shí)候如果不徹底,搞不好資源編輯器就出問(wèn)題了。于是,
我做了幾次失敗后,就直接開(kāi)始刪除所有的button,就是那些OK,CANCEL,然后直接新建,照樣就比較好,而且相關(guān)的函數(shù)都是直接編寫(xiě),
不用什么默認(rèn)的IDOK,IDCANCEL的麻煩,而且成功了。
經(jīng)過(guò)上面的這些思考,終于完成了。
了解到,關(guān)于關(guān)閉的消息,VM_CLOSE,還有,相應(yīng)的調(diào)用的函數(shù)Onclose函數(shù),如果需要重寫(xiě)的話就直接重載,載消息中相應(yīng)的添加。這樣就沒(méi)有什么問(wèn)題了。。。。。
posted on 2010-02-04 18:01
deercoder 閱讀(576)
評(píng)論(0) 編輯 收藏 引用