《面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言-C》課件-第6章.ppt
《《面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言-C》課件-第6章.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《《面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言-C》課件-第6章.ppt(75頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1,第六章菜單、工具欄和狀態(tài)欄,本章導(dǎo)讀掌握菜單的創(chuàng)建步驟和方法,如何進(jìn)行命令消息的映射和編寫相應(yīng)的程序代碼。掌握CMenu類及其常用成員函數(shù)的功能和使用方法,掌握利用這些成員函數(shù)創(chuàng)建快捷菜單和實(shí)現(xiàn)動(dòng)態(tài)增加或減少菜單項(xiàng)。掌握工具欄的創(chuàng)建方法和步驟,如何將工具欄的功能與菜單的功能相對(duì)應(yīng)。掌握創(chuàng)建狀態(tài)欄的方法和步驟。學(xué)習(xí)和掌握CMenu類、CStatusBar類、CToolBar類、CCmdUI類及常用成員函數(shù)的功能和使用。菜單、工具欄和狀態(tài)欄是Windows應(yīng)用程序中最重要的三個(gè)用戶界面元素,是應(yīng)用程序設(shè)計(jì)中不可缺少的步驟。,2,6.1創(chuàng)建菜單,菜單是一系列命令的列表,是最常用的命令輸入方式。在Windows中,幾乎所有的命令操作都與菜單有關(guān)。Windows應(yīng)用程序中的菜單是按照一定層次來進(jìn)行組織的,包括菜單項(xiàng)和彈出菜單,其中彈出菜單又可以包括菜單項(xiàng)和其他的彈出菜單。1.創(chuàng)建菜單資源菜單中的每一個(gè)菜單項(xiàng)都由菜單項(xiàng)名和命令I(lǐng)D號(hào)兩個(gè)基本要素組成。在菜單資源中,每個(gè)菜單項(xiàng)都必須有一個(gè)唯一的命令I(lǐng)D號(hào)來對(duì)它進(jìn)行標(biāo)識(shí),這個(gè)ID號(hào)是系統(tǒng)在對(duì)菜單項(xiàng)進(jìn)行識(shí)別時(shí)使用的。對(duì)于用戶而言,菜單項(xiàng)的標(biāo)識(shí)是利用它所屬的彈出菜單和菜單項(xiàng)的句子來標(biāo)識(shí)的,比如ID_FILE_OPEN,其所屬的彈出菜單是【文件】,菜單項(xiàng)名稱為【打開】。,3,創(chuàng)建菜單可以有幾種方法,最簡(jiǎn)單的方法是用菜單資源編輯器進(jìn)行設(shè)計(jì)。在這里,我們把第五章關(guān)于模式對(duì)話框的例子進(jìn)行改造,使對(duì)話框的彈出方式由在窗口中雙擊鼠標(biāo)改為由單擊某個(gè)菜單命令實(shí)現(xiàn)。具體步驟如下:步驟一:在VisualC++6.0中,選【File】菜單中的【OpenWorkspace】菜單項(xiàng),打開已創(chuàng)建的“Dialog.dsw”文件。步驟二:在工作區(qū)窗口中選擇【ResourceView】選項(xiàng)卡,展開【DialogResources】目錄,再展開【Menu】文件,將會(huì)看到菜單IDR_MAINFRAME。步驟三:雙擊IDR_MAINFRAME,將在菜單資源編輯器中打開菜單資源。步驟四:在主菜單中增加一個(gè)【顯示】菜單。用鼠標(biāo)雙擊主菜單最右邊的空菜單項(xiàng),或者用鼠標(biāo)右擊,在彈出的快捷菜單中選擇【Properties】菜單項(xiàng)。系統(tǒng)將彈出屬性對(duì)話框。,4,在【Caption】欄中輸入“顯示(afx_msgvoidOnDisplayData();//ClassWizard自動(dòng)添加的//}}AFX_MSGDECLARE_MESSAGE_MAP()};,14,其中://{{AFX_MSG(CDialogView)……//}}AFX_MSG是ClassWizard分別用來識(shí)別命令消息處理函數(shù)定義的起始標(biāo)記和結(jié)束標(biāo)記,在AFX_MSG(CDialogView)后面括號(hào)內(nèi)的CDialogView表示是處理該消息的類。2.在CDialogView類的實(shí)現(xiàn)文件DialogView.cpp中的消息映射部分也進(jìn)行了一些修改:BEGIN_MESSAGE_MAP(CDialogView,CView)//{{AFX_MSG_MAP(CDialogView),15,ON_WM_LBUTTONDBLCLK()ON_COMMAND(ID_DISPLAY_DATA,OnDisplayData)//ClassWizard自動(dòng)添加的//}}AFX_MSG_MAPEND_MESSAGE_MAP()其中://{{AFX_MSG_MAP(CDialogView)……//}}AFX_MSG_MAP是ClassWizard標(biāo)識(shí)命令消息處理映射機(jī)制的起始標(biāo)記和結(jié)束標(biāo)記。,16,3.在DialogView.cpp文件中編寫OnDisplayData函數(shù)的代碼。把DialogView.cpp文件中響應(yīng)雙擊窗口的函數(shù)OnLButtonDBLCLK()的代碼復(fù)制到OnDisplayData()函數(shù)中,具體代碼如下:voidCDialogView::OnDisplayData(){//TODO:AddyourcommandhandlercodehereCMydataDialogdlg;dlg.m_radio_m=0;dlg.m_edit_name="";CStringmsg;if(dlg.DoModal()==IDOK){msg="按鈕被按下!";}Else{msg="按鈕被按下!";},17,msg+="\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+="最高學(xué)歷:";msg+=dlg.m_combo_school;msg+="\r\n";msg+="愛好:";,18,if(dlg.m_check_art==TRUE)msg+="藝術(shù)";if(dlg.m_check_music==TRUE)msg+="音樂";if(dlg.m_check_sport==TRUE)msg+="體育";AfxMessageBox(msg);}步驟五:編譯運(yùn)行并測(cè)試此應(yīng)用程序。當(dāng)選擇【顯示】菜單中的【個(gè)人資料】菜單項(xiàng),或單擊Ctrl+D鍵時(shí),將彈出【個(gè)人資料】對(duì)話框,在對(duì)話框內(nèi)可以進(jìn)行各種設(shè)置,然后單擊【確認(rèn)】或【取消】按鈕退出??梢钥吹狡湫Чc雙擊應(yīng)用程序窗口是一樣的。,19,4.CMenu類及其常用成員函數(shù)介紹VisualC++的MFC提供的菜單類Cmenu的對(duì)象可以用來表示各種Windows菜單,其中包括頂層菜單項(xiàng)及其相應(yīng)的彈出式菜單。并且該類可以在程序運(yùn)行時(shí)處理有關(guān)菜單的操作,如創(chuàng)建菜單、裝入菜單、刪除菜單項(xiàng)、獲取或設(shè)置菜單項(xiàng)的狀態(tài)等。創(chuàng)建菜單CMenu類的成員函數(shù)CreateMenu和CreatePopupMenu分別用來創(chuàng)建一個(gè)菜單或子菜單框架,其函數(shù)原型如下:BOOLCreateMenu();//產(chǎn)生一個(gè)空菜單BOOLCreatePopupMenu();//產(chǎn)生一個(gè)空彈出式子菜單,20,裝入菜單CMenu類的成員函數(shù)LoadMenu可用來將菜單資源裝入應(yīng)用程序中,它的函數(shù)原型有兩種,如下所示:BOOLLoadMenu(LPCTSTRlpszResourceName);BOOLLoadMenu(UNITnIDResource);其中:形參lpszResourceName表示菜單資源的名稱,形參nIDResource為菜單資源的ID號(hào)。添加菜單項(xiàng)當(dāng)菜單創(chuàng)建后,可以調(diào)用CMenu類提供的成員函數(shù)AppendMenu或InsertMenu來向菜單中添加一些菜單項(xiàng),但每次添加時(shí),函數(shù)AppendMenu是將菜單項(xiàng)添加在菜單的末尾處,而InsertMenu是在指定的位置處插入菜單項(xiàng),并將后面的菜單項(xiàng)依次下移。它們的函數(shù)原型如下:,21,BOOLAppendMenu(UNITnFlags,UNITnIDNewItem,constCBitmap*pBmp);BOOLAppendMenu(UNITnFlags,UNITnIDNewItem=0,LPCTSTRlpszNewItem=NULL);BOOLInsertMenu(UNITnPosition,UNITnFlags,UNITnIDNewItem,constCBitmap*pBmp);BOOLInsertMenu(UNITnPosition,UNITnFlags,UNITnIDNewItem=0,LPCTSTRlpszNewItem=NULL);其中:形參nIDNewItem表示新增菜單項(xiàng)的資源ID號(hào),形參lpszNewItem表示新增菜單項(xiàng)的標(biāo)題內(nèi)容,形參pBmp是新增菜單項(xiàng)的位圖指針,形參nPosition表示新增菜單項(xiàng)要插入的菜單項(xiàng)的位置,nFlags表示要增加的菜單項(xiàng)的狀態(tài)信息,其取值的不同會(huì)影響其他參數(shù)的含義,見表6.3。,22,23,注意:(1)當(dāng)形參nFlags為MF_BYPOSITION時(shí),nPosition表示新菜單項(xiàng)要插入的位置,該位置為0時(shí)表示新菜單項(xiàng)插入到第一個(gè)菜單項(xiàng),為1時(shí)表示新菜單項(xiàng)插入到第二個(gè)菜單項(xiàng),……,當(dāng)為-1時(shí),表示新菜單項(xiàng)插入到菜單的末尾(2)在形參nFlags中,可以用按位或運(yùn)算符“|”將某些取值組合起來,如:MF_CHECKED|MF_STRING等。但有些組合是不允許的,如:MF_DISABLED、MF_ENABLED和MF_GRAYED等。(3)當(dāng)利用以上函數(shù)向菜單中新增菜單后,不管菜單所在的窗口是否改變,都應(yīng)調(diào)用CWnd類的成員函數(shù)CWnd::DrawMenuBar來更新菜單,函數(shù)DrawMenuBar的原型為:voidDrawMenuBar();,24,刪除菜單項(xiàng)當(dāng)要?jiǎng)h除指定的菜單項(xiàng)時(shí),可利用CMenu類的成員函數(shù)DeleteMenu來完成,該函數(shù)的原型為:BOOLDeleteMenu(UNITnPosition,UNITnFlags);其中:形參nPosition的值表示要?jiǎng)h除的菜單項(xiàng)的位置,其值的選取要受到形參nFlags的取值的影響。當(dāng)nFlags的取值為MF_BYCOMMAND時(shí),nPosition表示要?jiǎng)h除的菜單項(xiàng)的ID號(hào),而當(dāng)nFlags的取值為MF_BYPOSITION時(shí),nPosition表示要?jiǎng)h除的菜單項(xiàng)的位置(第一個(gè)菜單項(xiàng)的位置為0,第二個(gè)菜單項(xiàng)的位置為1,……)。注意:當(dāng)調(diào)用DeleteMenu函數(shù)刪除某個(gè)菜單項(xiàng)后,不管菜單所依附的窗口是否改變,也必須調(diào)用CWnd類的成員函數(shù)CWnd::DrawMenuBar來更新菜單。,25,獲取菜單項(xiàng)可以利用CMenu類的以下三個(gè)成員函數(shù)分別獲得菜單的項(xiàng)數(shù)、菜單項(xiàng)的ID號(hào)以及彈出式子菜單的句柄。(1)GetMenuItemCount函數(shù)該函數(shù)的原型為:UNITGetMenuItemCount()const;該函數(shù)的功能是取得菜單中的菜單項(xiàng)數(shù),如果調(diào)用失敗則返回值為-1。(2)GetMenuItemID函數(shù)該函數(shù)的原型是:UNITGetMenuItemID(intnPos)const;該函數(shù)的功能是返回由參數(shù)nPos所指定的菜單項(xiàng)位置的菜單項(xiàng)的ID號(hào),若nPos所指定的位置處為分隔線,則該函數(shù)的返回值為-1。,26,(3)GetSubMenu函數(shù)該函數(shù)的原型為:CMenu*GetSubMenu(intnPos)const;該函數(shù)的功能是獲得指定菜單的彈出式菜單的菜單句柄。該彈出式菜單位置由參數(shù)nPos給定,開始的位置為0,若菜單不存在,則創(chuàng)建一個(gè)臨時(shí)的菜單指針。此外,在主框架CMainFrame類中,可以利用該類的成員函數(shù)CMainFrame::GetMenu來獲得主菜單句柄。該函數(shù)的原型為:CMenu*GetMenu();,27,5.快捷菜單的實(shí)現(xiàn)利用MFC提供的CMenu類的TrackPopupMenu成員函數(shù)可以用來顯示一個(gè)彈出式菜單,該函數(shù)的原型為:BOOLTrackPopupMenu(UNITnFlags,intx,inty,CWnd*pWnd,LPCRECTlpRect=0);其中:(1)形參nFlags表示菜單在屏幕上顯示的位置以及鼠標(biāo)的按鈕狀態(tài),具體見表6.4所示。其中前三個(gè)值可分別與后兩個(gè)值用“|”運(yùn)算符進(jìn)行組合。,28,(2)形參x和y表示菜單的水平坐標(biāo)和菜單的頂端的垂直坐標(biāo)。(3)pWnd表示彈出菜單的窗口,此窗口將收到菜單全部的WM_COMMAND消息。(4)lpRect是一個(gè)RECT結(jié)構(gòu)或CRect類的對(duì)象指針,它表示一個(gè)矩形區(qū)域,用戶單擊這個(gè)區(qū)域時(shí),彈出菜單不消失,而當(dāng)lpRect為NULL時(shí),則當(dāng)用戶單擊菜單外面時(shí),菜單會(huì)立刻消失。下面,我們?cè)谏侠幕A(chǔ)上,添加一個(gè)快捷菜單,并使其能夠完成與與雙擊應(yīng)用程序窗口或選擇【顯示】菜單中的【個(gè)人資料】菜單項(xiàng)一樣的功能。具體步驟如下:步驟一:在VisualC++6.0中,選擇【File】菜單中的【OpenWorkspace】菜單項(xiàng),打開上例中的“Dialog.dsw”,29,步驟二:添加一個(gè)新的菜單資源。選擇【Insert】菜單中的【Resource】菜單項(xiàng),或直接按Ctrl+R鍵,在打開的【InsertResource】對(duì)話框窗口中選擇【Menu】,單擊【New】按鈕。步驟三:在工作區(qū)窗口中選擇【ResourceView】選項(xiàng)卡,展開【DialogResources】目錄,再展開【Menu】文件夾,將會(huì)看到菜單IDR_MENU1(這是系統(tǒng)給該菜單資源的缺省ID號(hào))。雙擊IDR_MENU1,將在菜單資源編輯器中打開菜單資源。用鼠標(biāo)雙擊主菜單最右邊的空菜單項(xiàng),或者用鼠標(biāo)右鍵單擊它,在彈出的快捷菜單中選擇【Properties】菜單項(xiàng)。在出現(xiàn)的“MenuItemProperties”對(duì)話框中的【Caption】欄中任意輸入一個(gè)標(biāo)題,最后按回車鍵退出該對(duì)話框。,30,步驟四:在快捷菜單中增加菜單項(xiàng)。在菜單資源編輯器中用鼠標(biāo)右鍵單擊【顯示】菜單中的空菜單項(xiàng),在出現(xiàn)的快捷菜單中選擇【Properties】選項(xiàng)。在出現(xiàn)的“MenuItemProperties”屬性對(duì)話框的【Caption】欄中輸入“個(gè)人資料(dlg.m_radio_m=0;dlg.m_edit_name="";CStringmsg;if(dlg.DoModal()==IDOK){msg="按鈕被按下!";}else{msg="按鈕被按下!";},33,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+="最高學(xué)歷:";msg+=dlg.m_combo_school;msg+="\r\n";msg+="愛好:";,34,if(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àng).在出現(xiàn)的【MFCClassWizard】對(duì)話框中,選擇【MessageMaps】選項(xiàng)卡。在【Classname】下拉列表框中,選擇類CMainFrame;在【ObjectIds】中選擇CMainFrame選項(xiàng);在【Messages】欄中選擇WM_CONTEXTMENU。單擊對(duì)話框右側(cè)的【AddFunction】,35,按鈕,系統(tǒng)將會(huì)彈出【AddMemberfunction】對(duì)話框。系統(tǒng)將自動(dòng)生成一個(gè)缺省名稱為OnContextMenu的映射函數(shù),單擊【OK】按鈕。單擊【EditCode】按鈕退出【MFCClassWizard】對(duì)話框,并對(duì)OnContextMenu函數(shù)進(jìn)行如下編輯:voidCMainFrame::OnContextMenu(CWnd*pWnd,CPointpoint){//TODO:AddyourmessagehandlercodehereCMenumenu;menu.LoadMenu(IDR_MENU1);menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);},36,步驟十:編譯運(yùn)行并測(cè)試此應(yīng)用程序。當(dāng)在應(yīng)用程序窗口中,單擊鼠標(biāo)右鍵時(shí),會(huì)彈出快捷菜單,選擇其中的【個(gè)人資料】菜單項(xiàng),則彈出【個(gè)人資料】對(duì)話框。在對(duì)話框內(nèi)可以進(jìn)行各種設(shè)置,然后單擊【確認(rèn)】或【取消】按鈕退出。可以看到其效果與雙擊應(yīng)用程序窗口或選擇【顯示】菜單中的【個(gè)人資料】菜單項(xiàng)是一樣的。6.動(dòng)態(tài)向菜單中添加新的菜單項(xiàng)下面,我們?cè)谏侠幕A(chǔ)上,向程序中動(dòng)態(tài)增加一個(gè)新的菜單項(xiàng),具體步驟如下:步驟一:在VisualC++6.0中,選擇【File】菜單中的【OpenWorkspace】菜單項(xiàng),打開上例中的【Dialog.dsw】文件。步驟二:選擇【View】菜單中的【ResourceSymbols】菜單項(xiàng),則會(huì)出現(xiàn)【ResourceView】對(duì)話框。,37,步驟三:?jiǎn)螕魧?duì)話框中【New…】按鈕,則出現(xiàn)“NewSymbol”對(duì)話框。在該對(duì)話框中的Name文本框中,輸入一個(gè)用于菜單項(xiàng)的ID號(hào),如:在本例中輸入“ID_NEW_MENUITEM”。在Value文本框中輸入對(duì)在該ID號(hào)的ID值,系統(tǒng)缺省為101,用戶也可以自行修改成新值,新值必須處在15~61440之間。在此取系統(tǒng)默認(rèn)值,單擊【OK】按鈕。步驟四:利用VisualC++的工作區(qū)窗口,打開CMainFrame類的實(shí)現(xiàn)文件MainFrm.cpp文件,在CMainFrame::OnCreate函數(shù)體中添加如下代碼:intCMainFrame::OnCreate(LPCREATESTRUCTlpCreateStruct){//前一部分在此省略,38,CMenu*pMainMenu=GetMenu();CMenu*pSubMenu=pMainMenu->GetSubMenu(4);CStringStrOfNewMenuItem("新建菜單項(xiàng)");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;},39,步驟五:選擇【View】菜單中的【ClassWizard】菜單項(xiàng),在出現(xiàn)的【MFCClassWizard】對(duì)話框中,選擇【MessageMaps】選項(xiàng)卡。在【Classname】下拉列表框中,選擇類CMainFrame;在【ObjectIds】中選擇CMainFrame選項(xiàng);在【Messages】欄中選擇OnCommand。單擊對(duì)話框右側(cè)的【EditCode】按鈕,系統(tǒng)將會(huì)進(jìn)入CMainFrame::OnCommand編輯窗口,輸入以下黑體部分代碼:BOOLCMainFrame::OnCommand(WPARAMwParam,LPARAMlParam){//TODO:Addyourspecializedcodehereand/orcallthebaseclassif(LOWORD(wParam)==ID_NEW_MENUITEM)MessageBox("您選中了新的菜單項(xiàng)");returnCFrameWnd::OnCommand(wParam,lParam);}此步中完成了對(duì)新增菜單項(xiàng)的消息映射功能。步驟六:編譯運(yùn)行并測(cè)試此應(yīng)用程序。,40,6.2創(chuàng)建工具欄,工具欄是一系列工具按鈕的組合,也是一種常用的命令輸入方式??梢哉f,工具欄是菜單的一種快捷方式。1.創(chuàng)建工具欄的方法和步驟創(chuàng)建工具欄資源在這里,我們將對(duì)上一節(jié)的例子進(jìn)行擴(kuò)充,增加一個(gè)工具欄。當(dāng)用鼠標(biāo)選擇工具欄上的某個(gè)按鈕時(shí),顯示出【個(gè)人資料】對(duì)話框。具體步驟如下:步驟一:打開上一節(jié)創(chuàng)建的Dialog例子。步驟二:在工作區(qū)窗口中選擇【ResourceView】選項(xiàng)卡,展開【DialogResources】文件夾,由于我們?cè)谟肁ppWizard生成應(yīng)用程序時(shí),沒有選擇生成工具欄,因此在【DialogResources】文件夾中,找不到Toolbar文件夾。,41,步驟三:選擇【Insert】菜單中的【Resource】菜單項(xiàng),在彈出菜單中選擇【Insert】菜單項(xiàng)。系統(tǒng)將彈出【InsertResource】對(duì)話框,在對(duì)話框中選擇【Toolbar】,單擊【New】按鈕。步驟四:系統(tǒng)將自動(dòng)在【DialogResounrces】文件夾中添加一個(gè)【Toolbar】文件夾,同時(shí)在【Toolbar】文件夾中添加了一個(gè)名為IDR_TOOLBAR1的文件。屏幕上同時(shí)顯示工具欄設(shè)計(jì)窗口。步驟四:鼠標(biāo)右鍵單擊【ResourceView】中【Toolbar】文件夾中的IDR_TOOLBAR1項(xiàng)目。在彈出菜單中選擇【Properties】菜單項(xiàng),系統(tǒng)將彈出工具欄屬性對(duì)話框。在屬性對(duì)話框中的【ID】框中,我們把ID號(hào)修改為IDR_MYTOOLBAR。,42,步驟五:添加按鈕和制作按鈕圖標(biāo)。我們可以利用【Graphic】和【Color】工具欄上提供的設(shè)計(jì)工具,根據(jù)自己需要制作按鈕圖標(biāo)。我們用字母R作為按鈕的圖標(biāo)。工具欄按鈕的繪制是一個(gè)個(gè)分開進(jìn)行的,在畫完一個(gè)按鈕后,該按鈕的實(shí)際效果立刻顯示出來。在【ToolbarButtonProperties】工具欄按鈕屬性對(duì)話框中,各項(xiàng)的含義如表6.5所示。,43,注:要使選擇工具欄按鈕的功能與選擇菜單的功能一致時(shí),應(yīng)將工具欄按鈕屬性對(duì)象框中的ID號(hào)設(shè)置為與某一菜單項(xiàng)的ID號(hào)相同。值得一提的是,在創(chuàng)建工具欄按鈕的過程中,可以進(jìn)行有關(guān)的操作及方法:(1)創(chuàng)建新的工具欄按鈕在新建一個(gè)工具欄的過程中,在工具欄的右端會(huì)有一個(gè)空按鈕,用鼠標(biāo)單擊該按鈕,則該按鈕的周圍有虛的方框包圍,同時(shí)在編輯區(qū)內(nèi)顯示出該按鈕,用戶可以在其中繪制圖形。(2)移動(dòng)工具欄中的按鈕在編輯工具欄的過程中,可以根據(jù)用戶的需要移動(dòng)工具欄中的按鈕,將某個(gè)按鈕放置到所需要的位置上。,44,(3)復(fù)制工具欄中的按鈕在工具欄編輯窗口內(nèi),選擇待移動(dòng)的工具欄按鈕,在按下Ctrl鍵的同時(shí),將其拖動(dòng)到所需要的位置。(4)刪除工具欄中的按鈕方法是用鼠標(biāo)拖動(dòng)該按鈕到工具欄以外的位置。(5)在工具欄中的按鈕間插入空格可以根據(jù)需要在某個(gè)按鈕的左邊、右邊或兩邊插入一個(gè)空格分隔符,方法是:①如果某按鈕左邊沒有任何空格,拖動(dòng)該按鈕向右移動(dòng)并當(dāng)按鈕的右邊界接觸到右邊按鈕時(shí),釋放鼠標(biāo)鍵,則可以此按鈕的左邊插入一個(gè)空格,反之,亦然。②如果某按鈕的左邊已有空格而右邊沒有空格,拖動(dòng)該按鈕向左移動(dòng)并當(dāng)按鈕的左邊界接觸到左邊按鈕時(shí),釋放鼠標(biāo)鍵,則可在此按鈕右邊插入一個(gè)空格。,45,③如果某按鈕的左右兩邊都有空格,拖動(dòng)該按鈕向右移動(dòng)并接觸到相鄰按鈕時(shí),則此按鈕左邊的空格保留,按鈕右邊的空格消失。反之亦然。實(shí)現(xiàn)工具欄編碼實(shí)現(xiàn)工具欄。具體實(shí)現(xiàn)步驟如下:步驟一:在工作區(qū)中窗口中選中【ClassView】選項(xiàng)卡,用鼠標(biāo)右鍵單擊【CmainFrame】,在彈出的菜單中選擇【AddMemberVariable】菜單項(xiàng),系統(tǒng)將彈出【AddMemberVariable】對(duì)話框。步驟二:在【VariableType】欄中輸入類型名稱CToolBar,在【VariableName】欄中輸入變量名稱m_MyDataToolBar。單擊【OK】按鈕繼續(xù)。此時(shí),VisualC++將自動(dòng)在主框架中的類定義文件MainFrm.h中添加以下聲名:CToolBarm_MyDataToolBar;,46,步驟三:選擇【View】菜單中的【ClassWizard】菜單項(xiàng),或者直接按Ctrl+R鍵,彈出【MFCClassWizard】對(duì)話框。在【Classname】列表框選擇CmainFrame類;在【ObjectIds】列表框中選中CMainFrame;雙擊【Messages】列表欄中的WM_CREATE選項(xiàng),或者選中WM_CREATE,再單擊【AddFunction】按鈕。在【MemberFunction】欄中將會(huì)出現(xiàn)OnCreate()函數(shù)。步驟四:?jiǎn)螕簟綞ditCode】按鈕,ClassWizard將自動(dòng)在框架類的實(shí)現(xiàn)文件MainFrm.cpp中添加成員函數(shù)OnCreate()。在函數(shù)中加入顯示工具欄的代碼。具體代碼如下,其中粗體部分為新添加的代碼。,47,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;},48,步驟五:編譯并運(yùn)行該程序。當(dāng)單擊工具欄上的新建按鈕,窗口中將彈出【個(gè)人資料】對(duì)話框。此按鈕的作用和選擇【顯示】菜單中的【個(gè)人資料】菜單項(xiàng)的效果是一樣的。說明:(1)在上例創(chuàng)建工具欄的過程中,曾用到了CToolBar類的對(duì)象,CToolBar類是由CControlBar類派生而來的,它用于描述工具欄。其中,Create函數(shù)是其成員函數(shù),該函數(shù)的原型為:BOOLCreate(Cwnd*pParentWnd,DWORDwStyle=WS_CHILD|WS_VISIBLE|CBRS_TOP,UNITnID=AFX_IDW_TOOLBAR);其中:參數(shù)pParentWnd是指向父窗口的指針,dwStyle是工具欄的風(fēng)格,nID是子窗口的ID號(hào)。,,49,表6.6工具欄的部分風(fēng)格,50,(2)TRACE宏TRACE宏提供了類似與printf函數(shù)的輸出格式,用于將某一信息(即字符串)輸出到Dump的設(shè)備環(huán)境DC中。該宏只在調(diào)試狀態(tài)下工作。TRACE宏的限制是一次最多輸出512個(gè)字符。如:inti=1;charsz[]="one";TRACE("Integer=%d,String=%s\n",i,sz);此外,還有TRACE0~TRACE3這樣4個(gè)獨(dú)立的宏,分別用于輸出純字符串~字符串+3個(gè)參數(shù)。它們的原型分別為:TRACE0(exp)TRACE1(exp,param1)TRACE2(exp,param1,param2)TRACE3(exp,param1,param2,param3),51,如:TRACE0("StartDumpofMyClassmembers:");inti=1;TRACE1("Integer=%d\n",i);//Output:Integer=1intj=1;charsz[]="one";TRACE2("Integer=%d,String=%s\n",j,sz);//Output:Integer=1,String=one2.如何實(shí)現(xiàn)工具欄的船塢化所謂船塢化工具欄就是可以將工具欄拖動(dòng)到屏幕的任意位置上,還可以用鼠標(biāo)改變工具欄的大小。下面我們就來實(shí)現(xiàn)工具欄的船塢化。,52,首先要通過調(diào)用CControlBar的成員函數(shù)EnableDocking()使工具欄能夠船塢化;然后通過調(diào)用CFrameWnd類的成員函數(shù)EnableDocking()確保邊框窗口能夠船塢化;最后調(diào)用CFrameWnd的成員函數(shù)DockControlBar()使工具欄固定在邊框窗口上。所有這些工作都在邊框窗口類的成員函數(shù)OnCreate()中完成。這三個(gè)函數(shù)的原型為:voidCControlBar::EnableDocking(DWORDdwStyle);voidCFrameWnd::EnableDocking(DWORDdwDockStyle);voidCFrameWnd::DockControlBar(CControlBar*pBar,UINTnDockBarID=0,LPCRECTlpRect=NULL);其中:參數(shù)dwStyle和dwDockStyle表示工具欄的風(fēng)格,其取值見表6.6,pBar是指向待船塢化的工具欄的指針。,53,具體代碼如下,其中粗體部分為新添加的代碼。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;},54,m_MyDataToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(}編譯并運(yùn)行該應(yīng)用程序,將看到工具欄已經(jīng)船塢化了。可以用鼠標(biāo)將它拖動(dòng)到窗口的任意位置。,55,6.3創(chuàng)建狀態(tài)欄,狀態(tài)欄位于應(yīng)用程序框架窗口的底部,它可以分割成幾個(gè)窗格,一般用于顯示一些文本信息,比如:工具欄按鈕的提示信息、CapsLock鍵及NumLock鍵的狀態(tài)等等。1.創(chuàng)建狀態(tài)欄資源下面,我們?cè)谇袄幕A(chǔ)上,為應(yīng)用程序Dialog添加一個(gè)狀態(tài)欄,用來顯示一個(gè)消息區(qū)、一個(gè)字符串和NumLock鍵的狀態(tài)。其具體步驟如下:步驟一:為狀態(tài)欄的內(nèi)容建立一個(gè)ID號(hào)。步驟二:在對(duì)話框中單擊【New】按鈕,彈出【NewSymbol】對(duì)話框,在【Name】欄中填入ID_STATUSBAR_STR,在【Value】欄中的數(shù)字是系統(tǒng)為用戶提供的ID數(shù)值。單擊【OK】按鈕繼續(xù)。,56,步驟三:新添加的ID信息將會(huì)出現(xiàn)在【ResourceSymbols】對(duì)話框的列表中。單擊【Close】按鈕關(guān)閉【ResourceSymbols】對(duì)話框。此時(shí)完成創(chuàng)建ID的工作。步驟四:在工作區(qū)窗口中選擇【ResourceView】選項(xiàng)卡,雙擊【StringTable】文件夾中的【StringTable】選項(xiàng),窗口中將顯示出串表編輯器。在編輯器中單擊鼠標(biāo)右鍵,在彈出的菜單中選擇【NewString】菜單項(xiàng)。步驟五:系統(tǒng)彈出【StringProperties】對(duì)話框,在【ID】框中選擇ID_STATUSBAR_STR項(xiàng),在【Caption】框中輸入字符串“測(cè)試狀態(tài)欄!”,按【Enter】鍵確認(rèn)。,57,2.實(shí)現(xiàn)狀態(tài)欄實(shí)現(xiàn)狀態(tài)欄的具體步驟如下:步驟一:在工作區(qū)窗口中選擇【ClassView】選項(xiàng)卡,用鼠標(biāo)右鍵單擊【CMainFrame】選項(xiàng),在彈出菜單中選擇【AddMemberVariable】菜單項(xiàng)。彈出【AddMemberVariable】對(duì)話框,在【VariableType】欄中輸入類型名稱CStatusBar,在【VariableName】欄中輸入類型名稱為m_MyStatusBar。單擊【OK】按鈕繼續(xù)。此時(shí),VisualC++將自動(dòng)在主框架的類定義文件MainFrm.h中添加以下聲明:CStatusBarm_MyStatusBar;步驟二:在MainFrm.cpp文件中加入數(shù)組indicators的定義,具體代碼如下,其中粗體部分為新增加的代碼。,58,//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)行指示器ID_STATUSBAR_STR,ID_INDICATOR_NUM,};,59,步驟三:在文件MainFrm.app中對(duì)函數(shù)OnCreate()進(jìn)行修改,增加狀態(tài)欄的創(chuàng)建代碼。具體代碼如下,其中粗體部分為新增加的代碼。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;},60,m_MyDataToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(},61,步驟四:編譯并運(yùn)行此應(yīng)用程序,將會(huì)看到在原來程序的基礎(chǔ)之上,在窗口的最下端增加了一個(gè)狀態(tài)欄。說明:(1)在上例創(chuàng)建狀態(tài)欄的過程中,曾用到了CStatusBar類的對(duì)象,CStatusBar是VisualC++的MFC類庫(kù)中的一個(gè)類,它用于描述狀態(tài)欄,CStatusBar類是由CControlBar類派生而來的。其中,Create函數(shù)是其成員函數(shù),該函數(shù)的原型為:BOOLCreate(CWnd*pParentWnd,DWORDdwStyle=WS_CHILD|WS_VISIBLE|CBRS_BOTTOM,UINTnID=AFX_IDW_STATUS_BAR);其中:pParentWnd是指向狀態(tài)欄父窗口的指針,dwStyle是狀態(tài)欄的風(fēng)格,nID是子窗口的ID號(hào),表6.7中列出了決定狀態(tài)欄風(fēng)格的幾種常用的取值及對(duì)應(yīng)的風(fēng)格。,62,表6.7dwStyle的取值及對(duì)應(yīng)的狀態(tài)欄的風(fēng)格(2)在MainFrm.cpp文件中加入的數(shù)組indicators的定義:staticUINTindicators[],用于描述狀態(tài)欄中所包含的內(nèi)容。如果在利用AppWizard向?qū)?chuàng)建SDI或MDI應(yīng)用程序框架中的第4步中,選擇了“Initialstatusbar”時(shí),則向?qū)?huì)自動(dòng)在MainFrm.cpp文件中加入數(shù)組indicators的定義。向?qū)傻娜笔〉膇ndicator數(shù)組包含了四個(gè)元素,它們是ID_SEPARATOR、ID_INDICATOR_CAPS、ID_INDICATOR_NUM和ID_INDICATOR_SCRL。,63,(3)要在狀態(tài)欄的窗格中顯示文本信息,可以采用以下三種方法:①調(diào)用CWnd::SetWindowText函數(shù)更新信息行窗格中的文本。由于狀態(tài)欄也是一種窗口,所以在程序中可以直接調(diào)用該函數(shù)。如:若狀態(tài)欄變量為m_wndStatusBar,則m_wndStatusBar.SetWindowText(“新修改的信息”)語(yǔ)句將在信息行窗格中顯示“新修改的信息”。②手動(dòng)處理狀態(tài)欄的ON_UPDATE_COMMAND_UI更新信息,并在處理函數(shù)中調(diào)用CCmdUI::SetText函數(shù),該函數(shù)的原型為:virtualvoidSetText(LPCTSTRlpszText);其中:參數(shù)lpszText是一個(gè)指向字符串的指針。,64,③調(diào)用函數(shù)CStatusBar::SetPaneText與CStatusBar::GetPaneText可以設(shè)置或獲得任何窗格(包括信息行窗格)中的文本。此函數(shù)的原型為:BOOLSetPaneText(intnIndex,LPCTSTRlpszNewText,BOOLbUpdate=TRUE);CStringGetPaneText(intnIndex)const;其中,參數(shù)nIndex是待設(shè)置的窗格位置索引號(hào)(第1個(gè)窗格的位置索引為0),lpszNewText表示要顯示的字符串,若參數(shù)bUpdate的值為TRUE,系統(tǒng)自動(dòng)更新顯示的結(jié)果。(4)調(diào)用CStatusBar::CommandToIndex可以獲得指定資源ID號(hào)所在窗格的位置索引號(hào),該函數(shù)的原型為:intCommandToIndex(UINTnIDFind)const;其中:參數(shù)nIDFind是狀態(tài)欄中某一資源ID號(hào)。,65,(5)調(diào)用函數(shù)CStatusBar::SetPaneInfo與CStatusBar::GetPaneInfo可設(shè)置或獲得窗格的長(zhǎng)度、風(fēng)格等信息,它們的函數(shù)原型為:voidSetPaneInfo(intnIndex,UINTnID,UINTnStyle,intcxWidth);voidGetPaneInfo(intnIndex,UINT其中:參數(shù)nIndex表示要設(shè)置的狀態(tài)欄窗格的索引號(hào),nID用來為狀態(tài)欄窗格指定新的資源ID號(hào),cxWidth表示窗格的像素寬度,nStyle表示狀態(tài)欄窗格的風(fēng)格類型,用來指定窗格的外觀,如:SBPS_POPOUT表示窗格是凸起來的。具體見表6.8。,66,表6.8狀態(tài)欄中各窗格的風(fēng)格取值及對(duì)應(yīng)風(fēng)格,67,(6)調(diào)用CStatusBar::SetPaneStyle與CStatusBar::GetPaneStyle可分別用來設(shè)置或獲得狀態(tài)欄窗格的風(fēng)格,二者的原型如下:UINTGetPaneStyle(intnIndex)const;voidSetPaneStyle(intnIndex,UINTnStyle);其中:參數(shù)nIndex是狀態(tài)欄中某一窗格的位置索引號(hào),nStyle為狀態(tài)欄中窗格的風(fēng)格。3.進(jìn)一步完善狀態(tài)欄現(xiàn)在,我們?cè)趧偛盘砑訝顟B(tài)欄例子的基礎(chǔ)上進(jìn)行修改。當(dāng)用戶選擇“關(guān)于”菜單項(xiàng)時(shí),彈出“字體對(duì)話框”,當(dāng)單擊“確定”按鈕關(guān)閉此對(duì)話框后,在狀態(tài)欄上原來顯示文本測(cè)試狀態(tài)欄的空格中顯示“您已經(jīng)查看過字體對(duì)話框!”,按照下面的方法進(jìn)行操作。,68,步驟一:選擇【View】菜單中的【ClassWizard】菜單項(xiàng)。彈出【MFCClassWizard】對(duì)話框,在【Classname】列表中選擇類CMainFrame,在【ObjectIDs】列表中選擇ID_APP_ABOUT;右邊的【Messages】欄中將出現(xiàn)COMMAND和UPDATE_COMMAND_UI,雙擊COMMAND選項(xiàng)。將彈出AddMemberFunction對(duì)話框。步驟二:接受系統(tǒng)缺省的函數(shù)名稱OnAppAbout,單擊【OK】按鈕,返回MFCClassWizard對(duì)話框。這時(shí)在MFCClassWizard對(duì)話框中的【Memberfunctions】框中增加了一個(gè)函數(shù)OnAppAbout。步驟三:?jiǎn)螕簟綞ditCode】按鈕,在代碼編輯窗口中打開OnAppAbout函數(shù)。在編輯此函數(shù)之前,首先要在MainFrm.cpp文件中添加一個(gè)#include語(yǔ)句。具體代碼如下,其中粗體部分為新增加的代碼。,69,//MainFrm.cpp:implementationoftheCMainFrameclass//#include"stdafx.h"#include"Dialog.h"#include"MainFrm.h"#include"MydataDialog.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif,70,步驟四:在代碼編輯窗口中,編輯函數(shù)OnAppAbout()。具體代碼如下,其中粗體部分為新增加的代碼。voidCMainFrame::OnAppAbout(){//TODO:AddyourcommandhandlercodehereCMydataDialogdlg;if(dlg.DoModal()==IDOK){CClientDCdc(this);SIZEsize=dc.GetTextExtent("您已經(jīng)查看過個(gè)人資料對(duì)話框!");intndex=m_MyStatusBar.CommandToIndex(ID_STATUSBAR_STR);m_MyStatusBar.SetPaneInfo(index,ID_STATUSBAR_STR,SBPS_POPOUT,size.cx);m_MyStatusBar.SetPaneText(index,_T("您已經(jīng)查看過個(gè)人資料對(duì)話框!"),TRUE);}},71,說明:在此函數(shù)中,首先生成了一個(gè)字體對(duì)話框的實(shí)例,并且顯示為有模式對(duì)話框。當(dāng)用戶單擊【確定】按鈕退出此對(duì)話框時(shí),要改變狀態(tài)欄的字符串顯示。首先調(diào)用函數(shù)GetTextExtent()來獲得字符串的長(zhǎng)度,然后調(diào)用CommandToIndex()函數(shù)獲得窗格的索引,再通過調(diào)用函數(shù)SetPaneInfo()來設(shè)置窗格的長(zhǎng)度、風(fēng)格等信息。在此例中,我們使用了風(fēng)格SBPS_POPOUT,它使創(chuàng)建的窗格看起來是從狀態(tài)欄中凸出來的。最后調(diào)用函數(shù)SetPaneText()來顯示文本內(nèi)容。步驟五:編譯并運(yùn)行此應(yīng)用程序。,72,本章小結(jié),在應(yīng)用程序中,要實(shí)現(xiàn)菜單的功能,其步驟和方法是先利用菜單編輯器建立菜單資源,然后編寫菜單命令的WM_COMMAND消息映射函數(shù)及相應(yīng)代碼。在MFC框架中,菜單命令消息是按照一定的順序進(jìn)行傳遞的。對(duì)于一個(gè)單文檔應(yīng)用程序,消息傳遞的順序?yàn)椋阂晥D類→文檔類→框架類→應(yīng)用程序類。VisualC++的MFC提供的菜單類Cmenu的對(duì)象可以用來表示各種Windows菜單,其中包括頂層菜單項(xiàng)及其相應(yīng)的彈出式菜單。并且利用該類的成員函數(shù)可以在程序運(yùn)行時(shí)處理有關(guān)菜單的操作。工具欄是應(yīng)用程序中常用操作的快捷方式,創(chuàng)建工具欄的方法是先創(chuàng)建工具欄資源,然后在主框架窗口類CMainFrame中創(chuàng)建響應(yīng)WM_CREATE的消息映射函數(shù),在該函數(shù)中,利用MFC提供的工具欄類CToolBar對(duì)象的,73,Create成員函數(shù),創(chuàng)建工具欄。CToolBar類是由CControlBar類派生而來的,它用于描述工具欄。狀態(tài)欄中的空間按從左向右的順序分為信息行窗格和指示器窗格,處在狀態(tài)欄最左側(cè)的窗格,其位置序號(hào)為0,向右依次類推,它可以分割成幾個(gè)窗格,用來顯示許多信息。其創(chuàng)建方法是先創(chuàng)建狀態(tài)欄資源,然后在主框架窗口類CMainFrame中創(chuàng)建響應(yīng)WM_CREATE的消息映射函數(shù),在該函數(shù)中,利用MFC提供的工具欄類CStatusBar對(duì)象的Create成員函數(shù),創(chuàng)建狀態(tài)欄。CStatusBar類是由CControlBar類派生而來的,它用于描述狀態(tài)欄。狀態(tài)欄中的窗格的個(gè)數(shù)及所顯示的信息由在MainFrm.cpp文件中定義的數(shù)組indicators的元素的個(gè)數(shù)和元素的值來決定。,74,習(xí)題,6.1利用AppWizard向?qū)Ы⒁粋€(gè)單文檔應(yīng)用程序,并完成以下操作:(1)利用資源編輯器向原有菜單欄中增加一個(gè)頂層菜單“查看”,并在其下拉菜單(彈出菜單)中添加“顯示鼠標(biāo)坐標(biāo)”菜單項(xiàng)。(2)在主框架窗口類即CMainFrame類中,建立響應(yīng)WM_COMMAND和WM_COMMAND_UI消息映射函數(shù),函數(shù)名自定,函數(shù)的功能是,當(dāng)程序運(yùn)行過程中,用戶選擇“顯示鼠標(biāo)坐標(biāo)”菜單項(xiàng)時(shí)能在該菜單項(xiàng)的左邊顯示“√”標(biāo)記,當(dāng)再次選擇該菜單項(xiàng)時(shí)標(biāo)記消失。(3)為“顯示鼠標(biāo)坐標(biāo)”菜單項(xiàng)建立一個(gè)快捷鍵“Ctrl+D”。,75,(4)利用資源編輯器向現(xiàn)有的工具欄的末尾添加一個(gè)按鈕,按鈕的圖標(biāo)自己設(shè)計(jì)。并進(jìn)行有關(guān)的設(shè)定使該按鈕的功能同選擇“顯示鼠標(biāo)坐標(biāo)”菜單項(xiàng)的功能相同。(5)在現(xiàn)有狀態(tài)欄的基礎(chǔ)上再增加一個(gè)信息行窗格,用于顯示鼠標(biāo)移動(dòng)過程中鼠標(biāo)的當(dāng)前X,Y坐標(biāo)。(6)利用ClassWizard向?qū)г趹?yīng)用程序的視圖類中添加響應(yīng)WM_MOUSEMOVE消息的消息處理函數(shù),函數(shù)名自定,該函數(shù)的功能就是把鼠標(biāo)在移動(dòng)過程中的位置X,Y坐標(biāo)顯示到狀態(tài)欄的新增信息行窗格中。6.2在VC環(huán)境中,利用Help菜單查看和學(xué)習(xí)CMenu類、CToolBar類、CStatusBar類、CCmdUI類的內(nèi)容,即其中的數(shù)據(jù)成員和成員函數(shù)。,- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言-C 面向 對(duì)象 程序設(shè)計(jì)語(yǔ)言 課件
鏈接地址:http://www.820124.com/p-11500100.html