第十篇:模式對話框和通用控件(下)
大家好,雷神由於出差在外,所以筆記今天才寫出抱歉。不知道大家有沒有做上篇提到的計算器,計算器對雷神來說可是經典的程序,學VB先搞了計算器,學VC也搞了個計算器,前不久在學擴展CBUTTON類時也是用計算器程序,為什麼?按鈕多呗,雷神最終做出了一個圓形按鈕,液晶顯示的計算器,感覺真的不錯。學編程就是要編寫代碼,代碼寫的多少和編程水平是成正比的。
由對話框編輯器和Class Wizard生成的對話框可以很輕松的不需編寫很多的代碼而獲得很多的功能,但如果我們想對對話框進一步的改進則需要手工編程了。
我們以上一篇的電腦體育彩票選號小程序為例進行一系列的改進工作。
改進一:截獲退出控制權
當我們的光標不在選號按鈕上時(例如在文本框內),當按下回車(Enter)鍵則回退出程序的運行,還有當你按下ESC鍵時也會退出。為什麼?因為當用戶按下回車鍵時Windows就會自動查找“輸入焦點”在哪個按鈕上,如果所有的按鈕都沒有獲得輸入焦點,Windows會自動的尋找程序資源指定的默認按鈕,如果對話框沒有默認按鈕,系統會調用OnOK函數。ESC鍵也會觸發對OnCancel函數的調用,從而導致控制從對話框中退出。如果我們想截獲退出控制權該如何做呢?用啞函數,就是將按下Enter和ESC後的處理函數寫成空函數。
步驟1、由於我們的對話框沒有OK和CANCEL按鈕,我們只能手工添加代碼。在guessDlg.h文件的類聲名重載:virtual void OnOK()和virtual void OnCancel();兩個虛函數。
class CGuessDlg : public CDialog
{
.......
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CGuessDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
virtual void OnOK();
virtual void OnCancel();
/