1. 程式人生 > >重新開始vc6/mfc學習——3.定時器、對話方塊以及選單的初步使用

重新開始vc6/mfc學習——3.定時器、對話方塊以及選單的初步使用

     清華出版的davis chapman著,駱長樂譯的《學用visual c++ 6.0》,買了大概有7,8年了,從來沒有看完過,這是一本循序漸進,注重實用的書籍,我個人認為不錯,只是不知道在vs2010都已經發布的今天,再學習vc6是不是太落後?總之,從遙遠的中國帶著它來到斯里蘭卡,不好好看看真是對不起這長途奔波,通過簡單的例子倒是也能編出簡單合用的程式,也許對我來說這已經足夠了?

     閒話不說,繼續做筆記。第三課的定時器程式稍微簡單些,別忘了在resource view檢視最上面的resources上右擊,選擇resource symblos,為計時器建立自己的ID,然後在程式中通過SetTimer(ID,timeinterval,NULL)

建立定時器,第一個引數即為剛才建立的定時器ID,第二個是時間間隔,ms為單位,第三個是回撥函式,設為NULL,然後在OnTimer函式裡檢測ID再來做相應操作即可,用完之後記得用KillTimer(ID)來關掉這個定時器以節約資源。

     第四課為對話方塊的應用。首先提到了MessageBox函式的多種風格:MessageBox("提示文字","提示標題",MB_YESNO|MB_ICONQUESTION)即可得到一個詢問yes or no的問題框,切帶一個問號的小圖示,返回值是int型的IDYES或IDNO。

     建立新對話方塊的步驟如下:還是在resource view檢視下,右擊頂部第二層的dialog

資料夾圖示,選擇insert dialog,即可建立一個新的對話方塊,當然你得為它指定一個明確的ID,在其上的程式設計也罷,定製也罷,與其他對話方塊無異,完成之後在該對話方塊上選擇classwizard,會提示你需要為之建立一個類(class),需要新建一個(new),但是這個類的基類為本dialog類,然後在上一級對話方塊的成員變數裡為這個類建立一個例項以便使用這個新對話方塊的返回值。別忘了,需要在dialog.cpp的#include部分包含上新建立的對話方塊類的標頭檔案:#include newdlg.h,而且還不能放在最後,得放在倒數第二的位置。 

     CFileDlg建立一個檔案對話方塊,引數為true時是“開啟”檔案對話方塊,為false是為“另存為”對話方塊。

     CAboutDlg建立一個about對話方塊,其實直接呼叫本視窗的About對話方塊。

     對話方塊例項的domal成員l函式返回值為IDOK時,代表著這個子對話方塊的ok按鈕被按下,你就可以訪問其變數進行操作了。

      第五課:選單的使用。

     首先要建立選單:還是在resource view裡,右擊resource,選擇insert,然後選擇menu即可。在對各menu項定製(主要是起id和文字)之後,選擇對話方塊屬性的general標籤頁裡,找到menu下拉列表,選擇剛才建立的選單主ID(選單主ID在resource view的menu分資料夾裡可以看到),就會為這個對話方塊指定一個系統選單。再在該選單上選擇classwizard,會提示為選單加入已存在的類還是建立新類,選擇前者,加入到dlg類即可。最後針對選單項的COMMAND訊息新增函式並程式設計即可使這些選單項可用。

彈出選單/上下文選單需要用wm_contextmenu訊息來驅動,對該訊息的command動作程式設計即可。

有兩種方法是用上下文選單,一種是直接呼叫上文提到已經設為本對話方塊系統選單,另一種是用剛才提到的方法建立一個新選單備用。

1.呼叫系統選單的方法

CMenu *menu;//建立一個cmenu類的指標變數

menu=GetMenu();//使用getmenu函式取得系統選單的指標

menu->GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTALIGN|TPM_LEFTBUTTON,point.x,point.y,this);

//GetSubMenu(0)取得第一級子選單的指標,而用這個指標的成員函式TrackPopupMenu來呈現。

//函式的第一個引數前半部分決定選單從當前游標的哪面出現,後半部分則決定右鍵或左鍵來觸發這個彈出選單。

point則是選單出現的座標位置,用下面方法獲取:

CPoint point;

GetCursorPos(&point);

2.呼叫建立好的備用選單

CMenu menu,*smenu;

menu.LoadMenu(IDR_MENU2);//這裡的idr_menu2即為剛才建立好備用的選單主ID

smenu = menu.GetSubMenu(0);//取得第一級子選單的指標

smenu->TrackPopupMenu(....);//如法呈現選單即可,當然在前面需要獲取滑鼠當前游標的座標位置不提。

×最後,這篇部落格對選單的更多操作做了列舉: