




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第六章菜單、工具欄和狀態(tài)欄
本章導讀掌握菜單的創(chuàng)建步驟和方法,如何進行命令消息的映射和編寫相應(yīng)的程序代碼。掌握CMenu類及其常用成員函數(shù)的功能和使用方法,掌握利用這些成員函數(shù)創(chuàng)建快捷菜單和實現(xiàn)動態(tài)增加或減少菜單項。掌握工具欄的創(chuàng)建方法和步驟,如何將工具欄的功能與菜單的功能相對應(yīng)。掌握創(chuàng)建狀態(tài)欄的方法和步驟。學習和掌握CMenu類、CStatusBar類、CToolBar類、CCmdUI類及常用成員函數(shù)的功能和使用。
菜單、工具欄和狀態(tài)欄是Windows應(yīng)用程序中最重要的三個用戶界面元素,是應(yīng)用程序設(shè)計中不可缺少的步驟。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.1第六章菜單、工具欄和狀態(tài)欄本章導讀Evaluation6.1創(chuàng)建菜單菜單是一系列命令的列表,是最常用的命令輸入方式。在Windows中,幾乎所有的命令操作都與菜單有關(guān)。Windows應(yīng)用程序中的菜單是按照一定層次來進行組織的,包括菜單項和彈出菜單,其中彈出菜單又可以包括菜單項和其他的彈出菜單。1.創(chuàng)建菜單資源菜單中的每一個菜單項都由菜單項名和命令I(lǐng)D號兩個基本要素組成。在菜單資源中,每個菜單項都必須有一個唯一的命令I(lǐng)D號來對它進行標識,這個ID號是系統(tǒng)在對菜單項進行識別時使用的。對于用戶而言,菜單項的標識是利用它所屬的彈出菜單和菜單項的句子來標識的,比如ID_FILE_OPEN,其所屬的彈出菜單是【文件】,菜單項名稱為【打開】。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.26.1創(chuàng)建菜單菜單是一系列命令的列表,是最常用的創(chuàng)建菜單可以有幾種方法,最簡單的方法是用菜單資源編輯器進行設(shè)計。在這里,我們把第五章關(guān)于模式對話框的例子進行改造,使對話框的彈出方式由在窗口中雙擊鼠標改為由單擊某個菜單命令實現(xiàn)。具體步驟如下:步驟一:在VisualC++6.0中,選【File】菜單中的【OpenWorkspace】菜單項,打開已創(chuàng)建的“Dialog.dsw”文件。步驟二:在工作區(qū)窗口中選擇【ResourceView】選項卡,展開【DialogResources】目錄,再展開【Menu】文件,將會看到菜單IDR_MAINFRAME。步驟三:雙擊IDR_MAINFRAME,將在菜單資源編輯器中打開菜單資源。步驟四:在主菜單中增加一個【顯示】菜單。用鼠標雙擊主菜單最右邊的空菜單項,或者用鼠標右擊,在彈出的快捷菜單中選擇【Properties】菜單項。系統(tǒng)將彈出屬性對話框。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.3創(chuàng)建菜單可以有幾種方法,最簡單的方法是用菜單資源編在【Caption】欄中輸入“顯示(&P)”,括號中的&P表示緊跟在它后面的字母“P”是助記符,這樣,在程序運行過程中,就可以用Alt+P鍵來激活【顯示】菜單。按【Enter】鍵繼續(xù)。這時,在主菜單中將增加一個“顯示”菜單,在助記符P下面有下劃線。同時,在生成的菜單的右面和下面各出現(xiàn)一個新的菜單或菜單項,可以繼續(xù)添加新的菜單或菜單項。步驟五:在【顯示】菜單中增加一個【個人資料】菜單項。用鼠標右鍵單擊【顯示】菜單中的空菜單項,在彈出菜單中選擇【Properties】選項。單擊屬性對話框左上角的“圖釘”按鈕,把對話框“釘”在屏幕上。在屬性對話框的【Caption】欄中輸入“個人資料(&D)”。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.4在【Caption】欄中輸入“顯示(&P)”,括號中的&P表對于【個人資料】菜單項,VisualC++6.0將為該菜單項自動分配一個ID號。單擊其他菜單項或者屏幕的其他部分,再選中【個人資料】菜單項,系統(tǒng)在【ID】欄中顯示出為該菜單項分配的ID號,其一般格式為MENUITEMxxxxx(xxxxx代表一個整數(shù))。【Prompt】框中的文本是光標處于菜單項時,狀態(tài)欄顯示的幫助信息在菜單項屬性對話框的【General】選項卡中,各選項的含義如下圖所示。步驟六:用鼠標左鍵按住【顯示】菜單,將其拖到【編輯】與【幫助】菜單中間。這樣,利用菜單資源編輯器,我們就很輕松地創(chuàng)建了一個標準的Windows菜單。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.5Evaluationonly.5項目含義IDCaptionSeparatorCheckedPop_upGrayedInactiveHelpBreakPrompt
菜單的資源ID號菜單項的標題文本,當其中某一字母的前面含有&符號時,則該字母與Alt鍵構(gòu)成組合鍵選中時,則相應(yīng)的菜單項是一個分隔符或一條水平線選中時,則相應(yīng)的菜單項前顯示一個選中標記“√”選中時,表示該菜單項含有彈出式子菜單選中時,表示該菜單項呈灰色顯示,該菜單項被禁用選中時,表示該菜單項沒有被激活,用戶不能選用選中時,表示該菜單項在程序運行時被放于頂層菜單的最右端其默認值為None,表示菜單項按常規(guī)形式顯示。該項的取值還可為Column或Bar,指明當光標移到該菜單項時在狀態(tài)欄上顯示的提示表6.1菜單General屬性對話框的各項含義
Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.6項目含義ID菜單的資源ID號表6.1菜單General屬2.建立快捷鍵在Windows應(yīng)用程序中的某些菜單項后面有一個組合鍵,表示一個快捷鍵(shortcutkey),在程序運行過程中,如果用戶按下了該組合鍵,則相應(yīng)的菜單命令就會被執(zhí)行。當然,若要使用快捷鍵選擇某個菜單項,就必須事先對其作出定義?,F(xiàn)在我們來為剛才創(chuàng)建的菜單添加快捷鍵,具體步驟如下:步驟一:在工作區(qū)窗口的【ResourceView】選項卡中,雙擊【Accelerator】文件夾,雙擊IDR_MAINFRAME,則系統(tǒng)會彈出一個加速器表。步驟二:在加速器表中瀏覽一下,發(fā)現(xiàn)Ctrl+D還沒有被使用,我們就把Ctrl+D設(shè)置為菜單項【個人資料】的快捷鍵。方法是雙擊加速器表末尾的空行,將彈出快捷鍵的屬性對話框(AccelProperties)。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.72.建立快捷鍵Evaluationonly.7在屬性對話框(AccelProperties)中,各項的含義如表6.2所示。表6.2AccelProperties對話框中各選項的含義選項含義IDModifiersTypeKeyNextKeyTyped
為了能使設(shè)定的快捷鍵與某個菜單項的功能相對應(yīng),從中選擇所需的菜單資源ID號用來選擇Ctrl、Alt、Shift鍵是否為快捷鍵的組成鍵用來確定快捷鍵的值是虛擬鍵(VirKey)還是ASCII是指啟動快捷鍵的鍵盤按鍵單擊此按鈕時,用戶所按的任何按鍵將成為快捷鍵的鍵值Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.8在屬性對話框(AccelProperties)中,各步驟三:在對話框中的【ID】下拉列表中選擇【ID_DISPLAY_DATA】選項,當選中ID號時,【ID】框中同時顯示出此ID號對應(yīng)的整數(shù),如ID_DISPLAY_DATA=32771。步驟四:在【Key】列表框中輸入“D”,確認【Modifiers】欄中的【Ctrl】復選框被選中,而且【Alt】和【Shift】都未被選中;或者,直接單擊【NextKeyTyped】按鈕,按下Ctrl+D組合鍵放開,此時系統(tǒng)會自動記錄所按下的Ctrl+D鍵為所要設(shè)定的組合鍵。按【Enter】鍵繼續(xù)。步驟五:為了在【顯示】菜單中提示【個人資料】菜單項的快捷鍵,可以返回6.1.1節(jié)中的步驟五,將【Caption】框中的內(nèi)容修改為“個人資料(D)\tCtrl+D”。這樣,我們就建立了一個完整的菜單資源。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.9步驟三:在對話框中的【ID】下拉列表中選擇【ID_DISPL3菜單功能的實現(xiàn)
在MFC框架中,菜單命令消息是按照一定的順序進行傳遞的。對于一個單文檔應(yīng)用程序,消息傳遞的順序為:視圖類→文檔類→框架類→應(yīng)用程序類。因此,如果我們在視圖類和文檔類中同時定義了某個菜單項的消息映射接口時,由于消息首先傳遞給視圖類,在視圖類中對此消息做出了響應(yīng),所以,文檔類中定義的此菜單項的消息映射函數(shù)就無法執(zhí)行。在菜單資源中,我們定義了MFC如何來構(gòu)造菜單的結(jié)構(gòu),同時還指定了菜單的資源ID號,MFC通過ClassWizard會自動把菜單和相應(yīng)的框架窗口聯(lián)系在一起。但除了由系統(tǒng)產(chǎn)生的少量代碼外,MFC不能自動地對程序的菜單項進行響應(yīng),必須用手工實現(xiàn)。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.103菜單功能的實現(xiàn)Evaluationonly.10對于每個菜單項,系統(tǒng)提供了COMMAND和UPDATE_COMMAND_UI兩種消息可供選擇:(1)COMMAND消息需要用戶的干預,如單擊、雙擊等操作;(2)UPDATE_COMMAND_UI消息系統(tǒng)會自動進行響應(yīng),通過它可以實現(xiàn)對菜單項外觀的動態(tài)管理。例如,設(shè)計人員可以使菜單有效、無效或給菜單項動態(tài)添加檢查標記等??梢岳肅lassWizard同時設(shè)置這兩種消息,但是在實際編程中,必須為每個菜單項提供有關(guān)WM_COMMAND類型消息映射接口。下面,我們在視圖類中對前面已建立的“個人資料(&D)”菜單項的消息做出響應(yīng)。具體步驟如下:Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.11對于每個菜單項,系統(tǒng)提供了COMMAND和U步驟一:選擇【View】菜單中的【ClassWizard】菜單項,彈出【MFCClassWizard】對話框。步驟二:在【MFCClassWizard】對話框中,選擇【MessageMaps】選項卡。在【Classname】下拉列表框中,選擇類CDialogView;在【ObjectIds】中單擊選擇ID_DISPLAY_DATA選項;在【Messages】欄中將出現(xiàn)COMMAND和UPDATE_COMMAND_UI兩個選項,選中其中的COMMAND。步驟三:單擊對話框右側(cè)的【AddFunction】按鈕,系統(tǒng)將會彈出【AddMemberfunction】對話框。系統(tǒng)將自動生成一個缺省名稱為OnDisplayData的映射函數(shù)亦可另取別的名稱,在此取缺省名稱,單擊【OK】按鈕繼續(xù)。步驟四:單擊【EditCode】按鈕退出【MFCClassWizard】對話框,并編輯新增加的函數(shù)OnDisplayData。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.12步驟一:選擇【View】菜單中的【ClassWizard】菜經(jīng)過以上操作完成后,VisualC++會對程序中的一些程序文件的代碼進行必要的修改,其中粗體部分的代碼是由ClassWizard自動添加的代碼。1.在CDialogView類的定義文件DialogView.h中的消息映射部分將會改變?yōu)椋?/Generatedmessagemapfunctionsprotected://{{AFX_MSG(CDialogView) afx_msgvoidOnLButtonDblClk(UINTnFlags,CPointpoint);afx_msgvoidOnDisplayData();//ClassWizard自動添加的//}}AFX_MSG DECLARE_MESSAGE_MAP()};Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.13經(jīng)過以上操作完成后,VisualC++會對程序中其中://{{AFX_MSG(CDialogView) ……//}}AFX_MSG 是ClassWizard分別用來識別命令消息處理函數(shù)定義的起始標記和結(jié)束標記,在AFX_MSG(CDialogView)后面括號內(nèi)的CDialogView表示是處理該消息的類。2.在CDialogView類的實現(xiàn)文件DialogView.cpp中的消息映射部分也進行了一些修改:BEGIN_MESSAGE_MAP(CDialogView,CView)//{{AFX_MSG_MAP(CDialogView)Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.14其中:Evaluationonly.14ON_WM_LBUTTONDBLCLK()ON_COMMAND(ID_DISPLAY_DATA,OnDisplayData) //ClassWizard自動添加的//}}AFX_MSG_MAP END_MESSAGE_MAP()其中://{{AFX_MSG_MAP(CDialogView)……//}}AFX_MSG_MAP 是ClassWizard標識命令消息處理映射機制的起始標記和結(jié)束標記。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.15ON_WM_LBUTTONDBLCLK()Evaluatio3.在DialogView.cpp文件中編寫OnDisplayData函數(shù)的代碼。把DialogView.cpp文件中響應(yīng)雙擊窗口的函數(shù)OnLButtonDBLCLK()的代碼復制到OnDisplayData()函數(shù)中,具體代碼如下:voidCDialogView::OnDisplayData(){//TODO:AddyourcommandhandlercodehereCMydataDialogdlg;dlg.m_radio_m=0;dlg.m_edit_name="";CStringmsg;if(dlg.DoModal()==IDOK){msg="<確定>按鈕被按下!"; }Else{msg="<取消>按鈕被按下!";}Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.163.在DialogView.cpp文件中編寫OnDisplmsg+="\r\n";msg+="姓名:";msg+=dlg.m_edit_name;msg+="\r\n";msg+="性別:";switch(dlg.m_radio_m){case0:msg+="男";break;case1:msg+="女";break;}msg+="\r\n";msg+="最高學歷:";msg+=dlg.m_combo_school;msg+="\r\n";msg+="愛好:";Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.17msg+="\r\n";Evaluationonly.17if(dlg.m_check_art==TRUE) msg+="藝術(shù)";if(dlg.m_check_music==TRUE) msg+="音樂";if(dlg.m_check_sport==TRUE) msg+="體育";AfxMessageBox(msg);}步驟五:編譯運行并測試此應(yīng)用程序。當選擇【顯示】菜單中的【個人資料】菜單項,或單擊Ctrl+D鍵時,將彈出【個人資料】對話框,在對話框內(nèi)可以進行各種設(shè)置,然后單擊【確認】或【取消】按鈕退出。可以看到其效果與雙擊應(yīng)用程序窗口是一樣的。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.18if(dlg.m_check_art==TRUE)Evalu4.CMenu類及其常用成員函數(shù)介紹VisualC++的MFC提供的菜單類Cmenu的對象可以用來表示各種Windows菜單,其中包括頂層菜單項及其相應(yīng)的彈出式菜單。并且該類可以在程序運行時處理有關(guān)菜單的操作,如創(chuàng)建菜單、裝入菜單、刪除菜單項、獲取或設(shè)置菜單項的狀態(tài)等。創(chuàng)建菜單CMenu類的成員函數(shù)CreateMenu和CreatePopupMenu分別用來創(chuàng)建一個菜單或子菜單框架,其函數(shù)原型如下:BOOLCreateMenu(); //產(chǎn)生一個空菜單BOOLCreatePopupMenu();//產(chǎn)生一個空彈出式子菜單Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.194.CMenu類及其常用成員函數(shù)介紹Evaluation裝入菜單CMenu類的成員函數(shù)LoadMenu可用來將菜單資源裝入應(yīng)用程序中,它的函數(shù)原型有兩種,如下所示:BOOLLoadMenu(LPCTSTRlpszResourceName);BOOLLoadMenu(UNITnIDResource);其中:形參lpszResourceName表示菜單資源的名稱,形參nIDResource為菜單資源的ID號。添加菜單項當菜單創(chuàng)建后,可以調(diào)用CMenu類提供的成員函數(shù)AppendMenu或InsertMenu來向菜單中添加一些菜單項,但每次添加時,函數(shù)AppendMenu是將菜單項添加在菜單的末尾處,而InsertMenu是在指定的位置處插入菜單項,并將后面的菜單項依次下移。它們的函數(shù)原型如下:Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.20裝入菜單Evaluationonly.20BOOLAppendMenu(UNITnFlags,UNITnIDNewItem,constCBitmap*pBmp);BOOLAppendMenu(UNITnFlags,UNITnIDNewItem=0,LPCTSTRlpszNewItem=NULL);BOOLInsertMenu(UNITnPosition,UNITnFlags,UNITnIDNewItem,constCBitmap*pBmp);BOOLInsertMenu(UNITnPosition,UNITnFlags,UNITnIDNewItem=0,LPCTSTRlpszNewItem=NULL);其中:形參nIDNewItem表示新增菜單項的資源ID號,形參lpszNewItem表示新增菜單項的標題內(nèi)容,形參pBmp是新增菜單項的位圖指針,形參nPosition表示新增菜單項要插入的菜單項的位置,nFlags表示要增加的菜單項的狀態(tài)信息,其取值的不同會影響其他參數(shù)的含義,見表6.3。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.21BOOLAppendMenu(UNITnFlags,UnFlags的取值含義nPosition值nIDNewItem值lpszNewItem值MF_BYCOMMAND
MF_BYPOSITION
MF_POPUPMF_SEPARATORMF_OWNERDRAWMF_STRINGMF_CHECKED
MF_UNCHECKED
MF_DISABLEDMF_ENABLEDMF_GRAYED菜單項以ID號來標識菜單項以位置來標識菜單項有彈出式子菜單分隔線自畫菜單項字符串標志設(shè)置菜單項的選中標記取消菜單項的選中標記禁用菜單項菜單項可用菜單項變灰菜單項資源ID菜單項的位置
彈出式菜單句柄忽略
忽略自畫所需的數(shù)據(jù)字符串指針Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.22nFlags的取值含義nPosition值nIDNewIte注意:(1)當形參nFlags為MF_BYPOSITION時,nPosition表示新菜單項要插入的位置,該位置為0時表示新菜單項插入到第一個菜單項,為1時表示新菜單項插入到第二個菜單項,……,當為-1時,表示新菜單項插入到菜單的末尾(2)在形參nFlags中,可以用按位或運算符“|”將某些取值組合起來,如:MF_CHECKED|MF_STRING等。但有些組合是不允許的,如:MF_DISABLED、MF_ENABLED和MF_GRAYED等。(3)當利用以上函數(shù)向菜單中新增菜單后,不管菜單所在的窗口是否改變,都應(yīng)調(diào)用CWnd類的成員函數(shù)CWnd::DrawMenuBar來更新菜單,函數(shù)DrawMenuBar的原型為:voidDrawMenuBar();Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.23注意:Evaluationonly.23刪除菜單項當要刪除指定的菜單項時,可利用CMenu類的成員函數(shù)DeleteMenu來完成,該函數(shù)的原型為:BOOLDeleteMenu(UNITnPosition,UNITnFlags);其中:形參nPosition的值表示要刪除的菜單項的位置,其值的選取要受到形參nFlags的取值的影響。當nFlags的取值為MF_BYCOMMAND時,nPosition表示要刪除的菜單項的ID號,而當nFlags的取值為MF_BYPOSITION時,nPosition表示要刪除的菜單項的位置(第一個菜單項的位置為0,第二個菜單項的位置為1,……)。注意:當調(diào)用DeleteMenu函數(shù)刪除某個菜單項后,不管菜單所依附的窗口是否改變,也必須調(diào)用CWnd類的成員函數(shù)CWnd::DrawMenuBar來更新菜單。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.24刪除菜單項Evaluationonly.24獲取菜單項可以利用CMenu類的以下三個成員函數(shù)分別獲得菜單的項數(shù)、菜單項的ID號以及彈出式子菜單的句柄。(1)GetMenuItemCount函數(shù)該函數(shù)的原型為:UNITGetMenuItemCount()const;該函數(shù)的功能是取得菜單中的菜單項數(shù),如果調(diào)用失敗則返回值為-1。(2)GetMenuItemID函數(shù)該函數(shù)的原型是:UNITGetMenuItemID(intnPos)const;該函數(shù)的功能是返回由參數(shù)nPos所指定的菜單項位置的菜單項的ID號,若nPos所指定的位置處為分隔線,則該函數(shù)的返回值為-1。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.25獲取菜單項Evaluationonly.25(3)GetSubMenu函數(shù)該函數(shù)的原型為:CMenu*GetSubMenu(intnPos)const;該函數(shù)的功能是獲得指定菜單的彈出式菜單的菜單句柄。該彈出式菜單位置由參數(shù)nPos給定,開始的位置為0,若菜單不存在,則創(chuàng)建一個臨時的菜單指針。此外,在主框架CMainFrame類中,可以利用該類的成員函數(shù)CMainFrame::GetMenu來獲得主菜單句柄。該函數(shù)的原型為:CMenu*GetMenu();Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.26(3)GetSubMenu函數(shù)Evaluationonly5.快捷菜單的實現(xiàn)利用MFC提供的CMenu類的TrackPopupMenu成員函數(shù)可以用來顯示一個彈出式菜單,該函數(shù)的原型為:BOOLTrackPopupMenu(UNITnFlags,intx,inty,CWnd*pWnd,LPCRECTlpRect=0);其中:(1)形參nFlags表示菜單在屏幕上顯示的位置以及鼠標的按鈕狀態(tài),具體見表6.4所示。其中前三個值可分別與后兩個值用“|”運算符進行組合。nFlags的值含義及作用TPM_CENTERALIGNTPM_LEFTALIGNTPM_RIGHTALIGNTPM_LEFTBUTTONTPM_RIGHTBUTTON決定菜單的屏幕位置,水平中心位置由x坐標確定決定菜單的屏幕位置,菜單的左邊位置由x坐標確定決定菜單的屏幕位置,菜單的右邊位置由x坐標確定鼠標按鈕標志,當用戶單擊左鍵時彈出快捷菜單鼠標按鈕標志,當用戶單擊右鍵時彈出快捷菜單Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.275.快捷菜單的實現(xiàn)nFlags的值含義及作用TPM_CE(2)形參x和y表示菜單的水平坐標和菜單的頂端的垂直坐標。(3)pWnd表示彈出菜單的窗口,此窗口將收到菜單全部的WM_COMMAND消息。(4)lpRect是一個RECT結(jié)構(gòu)或CRect類的對象指針,它表示一個矩形區(qū)域,用戶單擊這個區(qū)域時,彈出菜單不消失,而當lpRect為NULL時,則當用戶單擊菜單外面時,菜單會立刻消失。下面,我們在上例的基礎(chǔ)上,添加一個快捷菜單,并使其能夠完成與與雙擊應(yīng)用程序窗口或選擇【顯示】菜單中的【個人資料】菜單項一樣的功能。具體步驟如下:步驟一:在VisualC++6.0中,選擇【File】菜單中的【OpenWorkspace】菜單項,打開上例中的“Dialog.dsw”Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.28(2)形參x和y表示菜單的水平坐標和菜單的頂端的垂直坐標。E步驟二:添加一個新的菜單資源。選擇【Insert】菜單中的【Resource】菜單項,或直接按Ctrl+R鍵,在打開的【InsertResource】對話框窗口中選擇【Menu】,單擊【New】按鈕。步驟三:在工作區(qū)窗口中選擇【ResourceView】選項卡,展開【DialogResources】目錄,再展開【Menu】文件夾,將會看到菜單IDR_MENU1(這是系統(tǒng)給該菜單資源的缺省ID號)。雙擊IDR_MENU1,將在菜單資源編輯器中打開菜單資源。用鼠標雙擊主菜單最右邊的空菜單項,或者用鼠標右鍵單擊它,在彈出的快捷菜單中選擇【Properties】菜單項。在出現(xiàn)的“MenuItemProperties”對話框中的【Caption】欄中任意輸入一個標題,最后按回車鍵退出該對話框。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.29步驟二:添加一個新的菜單資源。選擇【Insert】菜單中的【步驟四:在快捷菜單中增加菜單項。在菜單資源編輯器中用鼠標右鍵單擊【顯示】菜單中的空菜單項,在出現(xiàn)的快捷菜單中選擇【Properties】選項。在出現(xiàn)的“MenuItemProperties”屬性對話框的【Caption】欄中輸入“個人資料(&D)”,ID號輸入“ID_MENU1_DATA”,按回車鍵關(guān)閉“MenuItemProperties”對話框。以同樣方法再增加一個【其他】菜單項,標題為“其他(&O)”,ID號為“__”。步驟五:選擇【View】菜單中的【ClassWizard】菜單項,將出現(xiàn)一對話框,詢問是“創(chuàng)建一個新類(Createanewclass)”,還是“選擇一個已存在的類(Selectanexistingclass)”,在此選擇“選擇一個已存在的類(Selectanexistingclass)”,則系統(tǒng)又彈出“SelectClass”對話框,在該對話框中,單擊選擇“CDialogView”,單擊【Select】按鈕,系統(tǒng)進入【MFCClassWizard】對話框。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.30步驟四:在快捷菜單中增加菜單項。在菜單資源編輯器中用鼠標右鍵步驟六:在【MFCClassWizard】對話框中,選擇【MessageMaps】選項卡。在【Classname】下拉列表框中,選擇類CDialogView;在【ObjectIds】中選擇ID_MENU1_DATA選項;在【Messages】欄中選擇COMMAND。步驟七:單擊對話框右側(cè)的【AddFunction】按鈕,系統(tǒng)將會彈出【AddMemberfunction】對話框。系統(tǒng)將自動生成一個缺省名稱為OnMenu1Data的映射函數(shù),在此保留此默認名稱,單擊【OK】按鈕繼續(xù)。步驟八:單擊【EditCode】按鈕退出【MFCClassWizard】對話框,并編輯新增加的函數(shù)OnMenu1Data。把OnDisplayData()函數(shù)中的代碼復制到OnMenu1Data()中,具體代碼如下,其中粗體字為新添加的代碼:Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.31步驟六:在【MFCClassWizard】對話框中,選擇【voidCDialogView::OnMenu1Data(){ //TODO:AddyourcommandhandlercodehereCMydataDialogdlg;dlg.m_radio_m=0;dlg.m_edit_name="";CStringmsg;if(dlg.DoModal()==IDOK){msg="<確定>按鈕被按下!";}else{msg="<取消>按鈕被按下!"; }Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.32voidCDialogView::OnMenu1Data( msg+="\r\n\n"; msg+="姓名:"; msg+=dlg.m_edit_name; msg+="\r\n"; msg+="性別:"; switch(dlg.m_radio_m) {case0:msg+="男"; break; case1:msg+="女"; break; } msg+="\r\n"; msg+="最高學歷:"; msg+=dlg.m_combo_school; msg+="\r\n"; msg+="愛好:";Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.33 msg+="\r\n\n";Evaluationonlyif(dlg.m_check_art==TRUE) msg+="藝術(shù)";if(dlg.m_check_music==TRUE) msg+="音樂";if(dlg.m_check_sport==TRUE) msg+="體育";AfxMessageBox(msg);}步驟九:選擇【View】菜單中的【ClassWizard】菜單項.在出現(xiàn)的【MFCClassWizard】對話框中,選擇【MessageMaps】選項卡。在【Classname】下拉列表框中,選擇類CMainFrame;在【ObjectIds】中選擇CMainFrame選項;在【Messages】欄中選擇WM_CONTEXTMENU。單擊對話框右側(cè)的【AddFunction】Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.34if(dlg.m_check_art==TRUE)Evalu按鈕,系統(tǒng)將會彈出【AddMemberfunction】對話框。系統(tǒng)將自動生成一個缺省名稱為OnContextMenu的映射函數(shù),單擊【OK】按鈕。單擊【EditCode】按鈕退出【MFCClassWizard】對話框,并對OnContextMenu函數(shù)進行如下編輯:voidCMainFrame::OnContextMenu(CWnd*pWnd,CPointpoint){//TODO:AddyourmessagehandlercodehereCMenumenu;menu.LoadMenu(IDR_MENU1);menu.GetSubMenu(0) ->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);}Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.35按鈕,系統(tǒng)將會彈出【AddMemberfunction】步驟十:編譯運行并測試此應(yīng)用程序。當在應(yīng)用程序窗口中,單擊鼠標右鍵時,會彈出快捷菜單,選擇其中的【個人資料】菜單項,則彈出【個人資料】對話框。在對話框內(nèi)可以進行各種設(shè)置,然后單擊【確認】或【取消】按鈕退出??梢钥吹狡湫Чc雙擊應(yīng)用程序窗口或選擇【顯示】菜單中的【個人資料】菜單項是一樣的。6.動態(tài)向菜單中添加新的菜單項下面,我們在上例的基礎(chǔ)上,向程序中動態(tài)增加一個新的菜單項,具體步驟如下:步驟一:在VisualC++6.0中,選擇【File】菜單中的【OpenWorkspace】菜單項,打開上例中的【Dialog.dsw】文件。步驟二:選擇【View】菜單中的【ResourceSymbols】菜單項,則會出現(xiàn)【ResourceView】對話框。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.36步驟十:編譯運行并測試此應(yīng)用程序。當在應(yīng)用程序窗口中,單擊鼠步驟三:單擊對話框中【New…】按鈕,則出現(xiàn)“NewSymbol”對話框。在該對話框中的Name文本框中,輸入一個用于菜單項的ID號,如:在本例中輸入“ID_NEW_MENUITEM”。在Value文本框中輸入對在該ID號的ID值,系統(tǒng)缺省為101,用戶也可以自行修改成新值,新值必須處在15~61440之間。在此取系統(tǒng)默認值,單擊【OK】按鈕。步驟四:利用VisualC++的工作區(qū)窗口,打開CMainFrame類的實現(xiàn)文件MainFrm.cpp文件,在CMainFrame::OnCreate函數(shù)體中添加如下代碼:intCMainFrame::OnCreate(LPCREATESTRUCTlpCreateStruct){//前一部分在此省略Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.37步驟三:單擊對話框中【New…】按鈕,則出現(xiàn)“NewSyCMenu*pMainMenu=GetMenu();CMenu*pSubMenu=pMainMenu->GetSubMenu(4);CStringStrOfNewMenuItem("新建菜單項");pSubMenu->AppendMenu(MF_SEPARATOR);pSubMenu->AppendMenu(MF_STRING,ID_NEW_MENUITEM,StrOfNewMenuItem);m_bAutoMenuEnable=FALSE;pMainMenu->EnableMenuItem(ID_NEW_MENUITEM,MF_BYCOMMAND|MF_ENABLED);DrawMenuBar();return0;}Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.38CMenu*pMainMenu=GetMenu();Eva步驟五:選擇【View】菜單中的【ClassWizard】菜單項,在出現(xiàn)的【MFCClassWizard】對話框中,選擇【MessageMaps】選項卡。在【Classname】下拉列表框中,選擇類CMainFrame;在【ObjectIds】中選擇CMainFrame選項;在【Messages】欄中選擇OnCommand。單擊對話框右側(cè)的【EditCode】按鈕,系統(tǒng)將會進入CMainFrame::OnCommand編輯窗口,輸入以下黑體部分代碼:BOOLCMainFrame::OnCommand(WPARAMwParam,LPARAMlParam){//TODO:Addyourspecializedcodehereand/orcallthebaseclassif(LOWORD(wParam)==ID_NEW_MENUITEM)MessageBox("您選中了新的菜單項");returnCFrameWnd::OnCommand(wParam,lParam);}此步中完成了對新增菜單項的消息映射功能。步驟六:編譯運行并測試此應(yīng)用程序。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.39步驟五:選擇【View】菜單中的【ClassWizard】菜6.2創(chuàng)建工具欄
工具欄是一系列工具按鈕的組合,也是一種常用的命令輸入方式??梢哉f,工具欄是菜單的一種快捷方式。1.創(chuàng)建工具欄的方法和步驟創(chuàng)建工具欄資源在這里,我們將對上一節(jié)的例子進行擴充,增加一個工具欄。當用鼠標選擇工具欄上的某個按鈕時,顯示出【個人資料】對話框。具體步驟如下:步驟一:打開上一節(jié)創(chuàng)建的Dialog例子。步驟二:在工作區(qū)窗口中選擇【ResourceView】選項卡,展開【DialogResources】文件夾,由于我們在用AppWizard生成應(yīng)用程序時,沒有選擇生成工具欄,因此在【DialogResources】文件夾中,找不到Toolbar文件夾。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.406.2創(chuàng)建工具欄工具欄是一系列工具按鈕的組合,也是步驟三:選擇【Insert】菜單中的【Resource】菜單項,在彈出菜單中選擇【Insert】菜單項。系統(tǒng)將彈出【InsertResource】對話框,在對話框中選擇【Toolbar】,單擊【New】按鈕。步驟四:系統(tǒng)將自動在【DialogResounrces】文件夾中添加一個【Toolbar】文件夾,同時在【Toolbar】文件夾中添加了一個名為IDR_TOOLBAR1的文件。屏幕上同時顯示工具欄設(shè)計窗口。步驟四:鼠標右鍵單擊【ResourceView】中【Toolbar】文件夾中的IDR_TOOLBAR1項目。在彈出菜單中選擇【Properties】菜單項,系統(tǒng)將彈出工具欄屬性對話框。在屬性對話框中的【ID】框中,我們把ID號修改為IDR_MYTOOLBAR。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.41步驟三:選擇【Insert】菜單中的【Resource】菜單步驟五:添加按鈕和制作按鈕圖標。我們可以利用【Graphic】和【Color】工具欄上提供的設(shè)計工具,根據(jù)自己需要制作按鈕圖標。我們用字母R作為按鈕的圖標。工具欄按鈕的繪制是一個個分開進行的,在畫完一個按鈕后,該按鈕的實際效果立刻顯示出來。在【ToolbarButtonProperties】工具欄按鈕屬性對話框中,各項的含義如表6.5所示。項目含義IDWidthHeightPrompt用于輸入或從下拉列表中選擇工具欄按鈕的ID號用于輸入工具欄按鈕的寬度,單位是像素用于輸入工具欄按鈕的高度,單位是像素工具欄按鈕文本Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.42步驟五:添加按鈕和制作按鈕圖標。我們可以利用【Graphic注:要使選擇工具欄按鈕的功能與選擇菜單的功能一致時,應(yīng)將工具欄按鈕屬性對象框中的ID號設(shè)置為與某一菜單項的ID號相同。值得一提的是,在創(chuàng)建工具欄按鈕的過程中,可以進行有關(guān)的操作及方法:(1)創(chuàng)建新的工具欄按鈕在新建一個工具欄的過程中,在工具欄的右端會有一個空按鈕,用鼠標單擊該按鈕,則該按鈕的周圍有虛的方框包圍,同時在編輯區(qū)內(nèi)顯示出該按鈕,用戶可以在其中繪制圖形。(2)移動工具欄中的按鈕在編輯工具欄的過程中,可以根據(jù)用戶的需要移動工具欄中的按鈕,將某個按鈕放置到所需要的位置上。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.43注:要使選擇工具欄按鈕的功能與選擇菜單的功能一致時,(3)復制工具欄中的按鈕在工具欄編輯窗口內(nèi),選擇待移動的工具欄按鈕,在按下Ctrl鍵的同時,將其拖動到所需要的位置。(4)刪除工具欄中的按鈕方法是用鼠標拖動該按鈕到工具欄以外的位置。(5)在工具欄中的按鈕間插入空格可以根據(jù)需要在某個按鈕的左邊、右邊或兩邊插入一個空格分隔符,方法是:①如果某按鈕左邊沒有任何空格,拖動該按鈕向右移動并當按鈕的右邊界接觸到右邊按鈕時,釋放鼠標鍵,則可以此按鈕的左邊插入一個空格,反之,亦然。②如果某按鈕的左邊已有空格而右邊沒有空格,拖動該按鈕向左移動并當按鈕的左邊界接觸到左邊按鈕時,釋放鼠標鍵,則可在此按鈕右邊插入一個空格。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.44(3)復制工具欄中的按鈕Evaluationonly.44③如果某按鈕的左右兩邊都有空格,拖動該按鈕向右移動并接觸到相鄰按鈕時,則此按鈕左邊的空格保留,按鈕右邊的空格消失。反之亦然。
實現(xiàn)工具欄
編碼實現(xiàn)工具欄。具體實現(xiàn)步驟如下:步驟一:在工作區(qū)中窗口中選中【ClassView】選項卡,用鼠標右鍵單擊【CmainFrame】,在彈出的菜單中選擇【AddMemberVariable】菜單項,系統(tǒng)將彈出【AddMemberVariable】對話框。步驟二:在【VariableType】欄中輸入類型名稱CToolBar,在【VariableName】欄中輸入變量名稱m_MyDataToolBar。單擊【OK】按鈕繼續(xù)。此時,VisualC++將自動在主框架中的類定義文件MainFrm.h中添加以下聲名:CToolBarm_MyDataToolBar;Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.45③如果某按鈕的左右兩邊都有空格,拖動該按鈕向右移動并接觸到相步驟三:選擇【View】菜單中的【ClassWizard】菜單項,或者直接按Ctrl+R鍵,彈出【MFCClassWizard】對話框。在【Classname】列表框選擇CmainFrame類;在【ObjectIds】列表框中選中CMainFrame;雙擊【Messages】列表欄中的WM_CREATE選項,或者選中WM_CREATE,再單擊【AddFunction】按鈕。在【MemberFunction】欄中將會出現(xiàn)OnCreate()函數(shù)。步驟四:單擊【EditCode】按鈕,ClassWizard將自動在框架類的實現(xiàn)文件MainFrm.cpp中添加成員函數(shù)OnCreate()。在函數(shù)中加入顯示工具欄的代碼。具體代碼如下,其中粗體部分為新添加的代碼。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.46步驟三:選擇【View】菜單中的【ClassWizard】菜IntCMainFrame::OnCreate(LPCREATESTRUCTlpCreateStruct){if(CFrameWnd::OnCreate(lpCreateStruct)==-1) return-1;//TODO:Addyourspecializedcreationcodehereif(!m_MyDataToolBar.Create(this)||!m_MyDataToolBar.LoadToolBar(IDR_MYTOOLBAR)){TRACE0("Failedtocreatedtoolbar\n");return-1;}return0;}Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.47IntCMainFrame::OnCreate(LPCRE步驟五:編譯并運行該程序。當單擊工具欄上的新建按鈕,窗口中將彈出【個人資料】對話框。此按鈕的作用和選擇【顯示】菜單中的【個人資料】菜單項的效果是一樣的。說明:(1)在上例創(chuàng)建工具欄的過程中,曾用到了CToolBar類的對象,CToolBar類是由CControlBar類派生而來的,它用于描述工具欄。其中,Create函數(shù)是其成員函數(shù),該函數(shù)的原型為:BOOLCreate(Cwnd*pParentWnd,DWORDwStyle=WS_CHILD|WS_VISIBLE|CBRS_TOP,UNITnID=AFX_IDW_TOOLBAR);其中:參數(shù)pParentWnd是指向父窗口的指針,dwStyle是工具欄的風格,nID是子窗口的ID號。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.48步驟五:編譯并運行該程序。Evaluationonly.4取值風格CBRS_TOPCBRS_BOTTOMCBRS_NOALIGNCBRS_TOOLTIPSCBRS_SIZE_DYNAMICCBRS_SIZE_FIXEDCBRS_FLOATINGCBRS_FLYBYCBRS_HIDE_INPLACE在框架窗口的頂部在框架窗口的底部不隨父窗口改變尺寸顯示按鈕提示尺寸可改變控件條固定浮動狀態(tài)狀態(tài)欄中顯示按鈕的信息不顯示工具欄表6.6工具欄的部分風格Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.49取值風格CBRS_TOP在框架窗口的頂部表6.6工具欄的部(2)TRACE宏TRACE宏提供了類似與printf函數(shù)的輸出格式,用于將某一信息(即字符串)輸出到Dump的設(shè)備環(huán)境DC中。該宏只在調(diào)試狀態(tài)下工作。TRACE宏的限制是一次最多輸出512個字符。如:inti=1;charsz[]="one";TRACE("Integer=%d,String=%s\n",i,sz);此外,還有TRACE0~TRACE3這樣4個獨立的宏,分別用于輸出純字符串~字符串+3個參數(shù)。它們的原型分別為:TRACE0(exp)TRACE1(exp,param1)TRACE2(exp,param1,param2)TRACE3(exp,param1,param2,param3)Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.50(2)TRACE宏Evaluationonly.50如:TRACE0("StartDumpofMyClassmembers:");inti=1;TRACE1("Integer=%d\n",i);//Output:'Integer=1'intj=1;charsz[]="one";TRACE2("Integer=%d,String=%s\n",j,sz);//Output:'Integer=1,String=one'2.如何實現(xiàn)工具欄的船塢化所謂船塢化工具欄就是可以將工具欄拖動到屏幕的任意位置上,還可以用鼠標改變工具欄的大小。下面我們就來實現(xiàn)工具欄的船塢化。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.51如:Evaluationonly.51首先要通過調(diào)用CControlBar的成員函數(shù)EnableDocking()使工具欄能夠船塢化;然后通過調(diào)用CFrameWnd類的成員函數(shù)EnableDocking()確保邊框窗口能夠船塢化;最后調(diào)用CFrameWnd的成員函數(shù)DockControlBar()使工具欄固定在邊框窗口上。所有這些工作都在邊框窗口類的成員函數(shù)OnCreate()中完成。這三個函數(shù)的原型為:voidCControlBar::EnableDocking(DWORDdwStyle);voidCFrameWnd::EnableDocking(DWORDdwDockStyle);voidCFrameWnd::DockControlBar(CControlBar*pBar,UINTnDockBarID=0,LPCRECTlpRect=NULL);其中:參數(shù)dwStyle和dwDockStyle表示工具欄的風格,其取值見表6.6,pBar是指向待船塢化的工具欄的指針。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.52首先要通過調(diào)用CControlBar的成員函數(shù)En具體代碼如下,其中粗體部分為新添加的代碼。intCMainFrame::OnCreate(LPCREATESTRUCTlpCreateStruct)
{if(CFrameWnd::OnCreate(lpCreateStruct)==-1) return-1;//TODO:Addyourspecializedcreationcodehereif(!m_MyDataToolBar.Create(this)||!m_MyDataToolBar.LoadToolBar(IDR_MYTOOLBAR)){TRACE0("Failedtocreatedtoolbar\n");return-1;}
Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.53具體代碼如下,其中粗體部分為新添加的代碼。Evaluatiom_MyDataToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_MyDataToolBar);return0;}編譯并運行該應(yīng)用程序,將看到工具欄已經(jīng)船塢化了??梢杂檬髽藢⑺蟿拥酱翱诘娜我馕恢?。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.54m_MyDataToolBar.EnableDocking(6.3創(chuàng)建狀態(tài)欄
狀態(tài)欄位于應(yīng)用程序框架窗口的底部,它可以分割成幾個窗格,一般用于顯示一些文本信息,比如:工具欄按鈕的提示信息、CapsLock鍵及NumLock鍵的狀態(tài)等等。1.創(chuàng)建狀態(tài)欄資源下面,我們在前例的基礎(chǔ)上,為應(yīng)用程序Dialog添加一個狀態(tài)欄,用來顯示一個消息區(qū)、一個字符串和NumLock鍵的狀態(tài)。其具體步驟如下:步驟一:為狀態(tài)欄的內(nèi)容建立一個ID號。步驟二:在對話框中單擊【New】按鈕,彈出【NewSymbol】對話框,在【Name】欄中填入ID_STATUSBAR_STR,在【Value】欄中的數(shù)字是系統(tǒng)為用戶提供的ID數(shù)值。單擊【OK】按鈕繼續(xù)。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.556.3創(chuàng)建狀態(tài)欄狀態(tài)欄位于應(yīng)用程序框架窗口的底部,它可步驟三:新添加的ID信息將會出現(xiàn)在【ResourceSymbols】對話框的列表中。單擊【Close】按鈕關(guān)閉【ResourceSymbols】對話框。此時完成創(chuàng)建ID的工作。步驟四:在工作區(qū)窗口中選擇【ResourceView】選項卡,雙擊【StringTable】文件夾中的【StringTable】選項,窗口中將顯示出串表編輯器。在編輯器中單擊鼠標右鍵,在彈出的菜單中選擇【NewString】菜單項。步驟五:系統(tǒng)彈出【StringProperties】對話框,在【ID】框中選擇ID_STATUSBAR_STR項,在【Caption】框中輸入字符串“測試狀態(tài)欄!”,按【Enter】鍵確認。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.56步驟三:新添加的ID信息將會出現(xiàn)在【ResourceSym2.實現(xiàn)狀態(tài)欄實現(xiàn)狀態(tài)欄的具體步驟如下:步驟一:在工作區(qū)窗口中選擇【ClassView】選項卡,用鼠標右鍵單擊【CMainFrame】選項,在彈出菜單中選擇【AddMemberVariable】菜單項。彈出【AddMemberVariable】對話框,在【VariableType】欄中輸入類型名稱CStatusBar,在【VariableName】欄中輸入類型名稱為m_MyStatusBar。單擊【OK】按鈕繼續(xù)。此時,VisualC++將自動在主框架的類定義文件MainFrm.h中添加以下聲明:CStatusBarm_MyStatusBar;步驟二:在MainFrm.cpp文件中加入數(shù)組indicators的定義,具體代碼如下,其中粗體部分為新增加的代碼。Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.572.實現(xiàn)狀態(tài)欄Evaluationonly.57//CMainFrameIMPLEMENT_DYNCREATE(CMainFrame,CFrameWnd)BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)//{{AFX_MSG_MAP(CMainFrame)ON_WM_CONTEXTMENU()ON_WM_CREATE()//}}AFX_MSG_MAPEND_MESSAGE_MAP()staticUINTindicators[]={ID_SEPARATOR, //狀態(tài)行指示
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025工程承包合同范本3
- 廣西壯族自治區(qū)2024~2025學年 高二下冊開學考試數(shù)學試卷附解析
- 廣東省佛山市2024~2025學年 高二下冊3月月考數(shù)學試卷附解析
- 福建省三明市2023?2024學年高二下冊期末質(zhì)量檢測數(shù)學試卷附解析
- 北京市2024-2025學年高三下冊3月月考數(shù)學試卷
- 冀教版4年級下冊數(shù)學全冊課件(2025年3月修訂)
- 社區(qū)社區(qū)服務(wù)設(shè)施更新改造管理基礎(chǔ)知識點歸納
- 公司員工上崗資格證模板
- 2025年中華文明理論試題
- 公共營養(yǎng)師培訓考試輔導:三級公共營養(yǎng)師模擬試題(基礎(chǔ)理論)及答案
- 潔凈室及相關(guān)受控環(huán)境 運維服務(wù) 征求意見稿
- 總監(jiān)述職報告
- 兒童意外傷害預防及家庭安全教育推廣研究報告
- 會計研究方法論 第4版 課件 第9章 非結(jié)構(gòu)化數(shù)據(jù)分析方法
- 中藥草本洗發(fā)水DIY體驗企業(yè)制定與實施新質(zhì)生產(chǎn)力戰(zhàn)略研究報告
- 兩相交錯并聯(lián)Boost變換器的設(shè)計及仿真分析
- 醫(yī)患溝通技巧課件
- 2025年上半年四川瀘州川南發(fā)電限責任公司公開招聘15人高頻重點提升(共500題)附帶答案詳解
- 《海爾研發(fā)與質(zhì)量》課件
- 信息安規(guī)(254題-含答案和解析)
- 《機械系統(tǒng)動力學》課件第六章 動力學專題
評論
0/150
提交評論