《面向?qū)ο笈c可視化程序設(shè)計(jì)--VisualC編程主講教師唐》由會(huì)員分享,可在線閱讀,更多相關(guān)《面向?qū)ο笈c可視化程序設(shè)計(jì)--VisualC編程主講教師唐(30頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、Click to edit Master title style,Click to edit Master text styles,Second Level,Third Level,Fourth Level,Fifth Level,*,*,*,面向?qū)ο笈c可視化程序設(shè)計(jì)-Visual C+編程主講教師:唐 龍教授 計(jì)算機(jī)科學(xué)與技術(shù)系黃維通博士 計(jì)算機(jī)與信息管理中心清 華 大 學(xué)2001年2月,12/14/2024,1,第十二章,菜單類(lèi)及其應(yīng)用,12/14/2024,2,內(nèi)容提要,菜單類(lèi)簡(jiǎn)介,菜單類(lèi)控件的應(yīng)用,12/14/2024,3,12.1.菜單類(lèi)簡(jiǎn)介,12/14/2024,4,,,1.菜單,
2、菜單是用戶與應(yīng)用程序交互的最常用手段。,菜單存放在資源腳本中,在程序運(yùn)行時(shí)調(diào)用。,一個(gè)菜單項(xiàng)必須包含兩局部:,菜單項(xiàng)名稱(chēng)字符串構(gòu)成,例如:file,菜單項(xiàng)標(biāo)識(shí)符ID整數(shù)值,可用整數(shù)常量表示,菜單標(biāo)識(shí)符ID在資源的頭文件Resource.h中定義,前綴IDM指明是菜單項(xiàng),如:,#define IDM_MENU1 129,在菜單資源,必須鏈接到類(lèi)中,通過(guò)提供類(lèi)方法來(lái)處理每個(gè)菜單項(xiàng)。,12/14/2024,5,IDR_MENU1 MENU DISCARDABLE,BEGIN,POPUP&File /定義File菜單,BEGIN /菜單File定義開(kāi)始,MENUITEM&Voice,IDC_VOICE
3、_MENU/菜單項(xiàng),MENUITEM&Show,IDC_SHOW_MENU /菜單項(xiàng),MENUITEM SEPARATOR/分隔線,MENUITEM&Exit,IDC_EXIT_MENU/菜單項(xiàng),END/菜單File定義結(jié)束,POPUP&Help /定義Help菜單,BEGIN,/菜單Help定義開(kāi)始,MENUITEM&About,IDC_ABOUT_MENU/菜單項(xiàng),END /菜單Help定義結(jié)束,END,2.菜單結(jié)構(gòu),菜單模板用一種很簡(jiǎn)單的結(jié)構(gòu)在資源腳本文件中定義,一個(gè)菜單資源模板實(shí)例如下:,12/14/2024,6,3.CMenu類(lèi),CMenu,類(lèi)是,Cobject,類(lèi)直接派生的。,CM
4、enu,類(lèi)提供了許多處理菜單和菜單項(xiàng)的方法:,構(gòu)造方法;,菜單操作方法;,菜單項(xiàng)操作方法;,虛擬方法。,12/14/2024,7,3.CMenu類(lèi)續(xù),構(gòu)造方法用于建立Windows菜單,并在運(yùn)行時(shí)將它們附加到,CMenu,對(duì)象上,,12/14/2024,8,3.CMenu類(lèi)續(xù),菜單操作方法用于,處理菜單的頂層操作,,,只有兩個(gè)方法:,DeleteMenu()刪除指定的菜單項(xiàng)(包括附屬的級(jí)連菜單項(xiàng));,TrackPopupMenu()在一個(gè)指定的位置顯示一個(gè)快捷菜單。,12/14/2024,9,3.CMenu類(lèi)續(xù),菜單項(xiàng)操作方法有多種用于處理指定菜單項(xiàng)操作,12/14/2024,10,12.2.
5、菜單類(lèi)編程實(shí)例,12/14/2024,11,1.應(yīng)用程序的實(shí)現(xiàn)功能,主窗口標(biāo)題為Application of Menu。,有三個(gè)按鈕:Voice、Show和Exit。,有兩個(gè)菜單:File和Help。,File下拉出三個(gè)菜單項(xiàng):Voice、Show和Exit。,單擊Vioce選項(xiàng),可聽(tīng)到PC機(jī)喇叭發(fā)出蜂鳴聲,單擊Show,那么彈出對(duì)話框,顯示信息“This is a Sample of adding menu。,單擊Exit,那么退出。,12/14/2024,12,主窗口布局如以下圖;,12/14/2024,13,2.編程過(guò)程,建立工程文件:用MFC AppWizard(exe),工程工程名稱(chēng)
6、:Menu,建立主窗口標(biāo)題為Application of Menu的應(yīng)用程序。,可視化編程:,設(shè)計(jì)界面,連接變量,修改特性,添加代碼,12/14/2024,14,3.界面設(shè)計(jì),在,Menu,的工作區(qū)中選擇,ResourceView,在名為,IDD_MENU_DIALOG,的對(duì)話框作為應(yīng)用程序的主窗口中進(jìn)行,界面設(shè)計(jì),。,對(duì)話框中按鈕的設(shè)計(jì),借助于工具窗,在主窗口中安排三個(gè)命令按鈕。,在,命令按鈕,上單擊,右,鍵,選,Propertires,在,Puch Button Propertires,的,General,上,輸入相應(yīng)的,ID,和,Caption,重復(fù)三次,完成了三個(gè)按鈕的設(shè)計(jì)。,12/1
7、4/2024,15,3.界面設(shè)計(jì)續(xù),設(shè)計(jì)的三個(gè)按鈕屬性,對(duì) 象,IDCaption,命令按鈕,IDC_VOICE_BUTTON&Voice,命令按鈕,IDC_SHOW_BUTTON&Show,命令按鈕,IDC_EXTT_BUTTON&Exit,12/14/2024,16,(a),Insert,Resource,對(duì)話框,(b)選擇,Menu,項(xiàng),(c)單擊按鈕,New,,加一菜,單資源,對(duì)話框中菜單的設(shè)計(jì),插入資源,Insert,-,Resource,,顯示,nsertResource,對(duì)話框,在資源列表選擇,Menu,項(xiàng),單擊按鈕,New,,在資源文件,Menu.rc,中加一菜單資源。,12/
8、14/2024,17,4.給菜單連接一個(gè)類(lèi),作為一個(gè)對(duì)象,菜單必須與一個(gè)類(lèi)連接。,這個(gè)菜單是對(duì)話框中的一個(gè)資源,將它與對(duì)話框的派生類(lèi),CMenuDlg,相連接。,菜單,IDR_MENU1,連接了一個(gè)類(lèi),可調(diào)用該類(lèi)的成員函數(shù)和成員變量。,12/14/2024,18,5.連接菜單和應(yīng)用程序的主窗口,為了在主窗口中顯示菜單,菜單還應(yīng)連接主窗口。,菜單與主窗口對(duì)話框(即,IDD_MENU_DIALOG,)的連接:,在,Menu,工作區(qū)的,Resource View,選項(xiàng)卡中,雙擊,Dialog,文件夾中的,IDD_MENU_DIALOG,,彈出,IDD_MENU_DIALOG,對(duì)話框。,在對(duì)話框內(nèi),單
9、擊鼠標(biāo)右鍵,在快捷菜單中選擇,Properties,命令,在對(duì)話框中的,Menu,組合框中選擇,IDD_MENU1,12/14/2024,19,(1)給菜單File的Exit選項(xiàng)編寫(xiě)代碼,void CMenuDlg:OnExitMenu,OnOK;,6.應(yīng)用程序的代碼編程,(2)給File菜單的Voice項(xiàng)連接代碼,void CMenuDlg:OnVioceMenu,MessageBeepWORD-1;,DWORD iTime=GetCurrentTime,whileGetCurrentTime AppWizard Step 1 -Dialog based,(2)給對(duì)話框添加菜單。Insert
10、-Resource,在Resource type-Menu-New按鈕為應(yīng)用程序添加菜單資源-設(shè)置菜單項(xiàng)屬性,各菜單項(xiàng)的屬性如表所示,對(duì)象IDCaption,菜單時(shí)間(&T),菜單項(xiàng)ID_YEAR_MENU年、月、日(&D),菜單項(xiàng)ID_HOUR_MENU小時(shí)、分鐘、秒(&H),菜單項(xiàng)ID_EXIT_MENU退出(&X),12/14/2024,24,-在菜單上單擊鼠標(biāo)右鍵,-在彈出菜單中選ClassWizard,-出現(xiàn)了Add Class對(duì)話框,-選擇Select an existing calss選項(xiàng),單擊OK按鈕,,-在彈出的對(duì)話框中選擇CMy12_5Dlg類(lèi),這樣就把菜單參加到對(duì)話框類(lèi)中
11、。,-在Resource View選項(xiàng)卡中翻開(kāi)Dialog資源組,雙擊IDD_MY12_5_DIALOG,如以下圖。,鼠標(biāo)右鍵-Properties菜單項(xiàng),,在Menu列表框中選擇編輯過(guò)的,菜單的ID:ID_MENU1。這樣,就把菜單參加到對(duì)話框中。,12/14/2024,25,ID變量,ID_YEAR_EDITm_Year_Edit,ID_MONTH_EDITm_Month_Edit,ID_DAY_EDITm_Day_Edit,ID_HOUR_EDITm_Hour_Edit,ID_MINUTE_EDITm_Minute_Edit,ID_SECOND_EDITm_Second_Edit,ID_
12、EXIT_BUTTONE&xit,12/14/2024,26,菜單項(xiàng)的消息處理函數(shù),菜單項(xiàng)ID消息消息處理函數(shù),ID_YEAR_MENUCOMMANDOnYearMenu(),ID_HOUR_MENUCOMMANDOnHourMenu(),ID_EXIT_MENUCOMMANDOnExitMenu(),void CMy12_5Dlg:OnYearMenu()/給“年、月、日菜單項(xiàng)消息處理函數(shù),struct tm*newtime;/定義tm結(jié)構(gòu),存貯時(shí)間,time_t long_time;/定義保存時(shí)間的變量,char buffer10;,time(/獲取時(shí)間,newtime=localtime
13、(/時(shí)間轉(zhuǎn)換,/將年月日輸出到編輯框中.,_itoa(newtime-tm_year+1900,buffer,10);/tm_year是當(dāng)前年份和1900之差,m_Year_Edit.SetWindowText(LPCTSTR)(buffer);,_itoa(newtime-tm_mon+1,buffer,10);/tm_mon是當(dāng)前月份,m_Month_Edit.SetWindowText(LPCTSTR)(buffer);,_itoa(newtime-tm_mday,buffer,10);/tm_mday是當(dāng)前日,m_Day_Edit.SetWindowText(LPCTSTR)(buff
14、er);,12/14/2024,27,void CMy12_5Dlg:OnHourMenu()/給菜單項(xiàng)“小時(shí)、分、秒?yún)⒓哟a,struct tm*newtime;/定義tm結(jié)構(gòu),保存時(shí)間,time_t long_time;/定義保存時(shí)間的長(zhǎng)整型變量,char buffer10;,time(/獲取時(shí)間,newtime=localtime(/時(shí)間轉(zhuǎn)換,/將小時(shí),分鐘,秒輸出到編輯框中.,_itoa(newtime-tm_hour,buffer,10);/tm_hour是當(dāng)前小時(shí),m_Hour_Edit.SetWindowText(LPCTSTR)(buffer);,_itoa(newtime-t
15、m_min+1,buffer,10);/tm_min是當(dāng)前分鐘,m_Minute_Edit.SetWindowText(LPCTSTR)(buffer);,_itoa(newtime-tm_sec,buffer,10);/tm_sec是當(dāng)前秒,m_Second_Edit.SetWindowText(LPCTSTR)(buffer);,12/14/2024,28,(第十二章),完,12/14/2024,29,第11-12章課后練習(xí)題,編寫(xiě)一個(gè)程序,對(duì)每組4個(gè)元素的10組數(shù)據(jù)進(jìn)行管理,用用按鍵/下拉菜單操作實(shí)現(xiàn)功能包括:,輸入修改數(shù)據(jù);,顯示一組數(shù)據(jù);,對(duì)一組數(shù)據(jù)求:,最大值;,最小值;,平均值;,均方差,;,注,11月12日,前完成,12/14/2024,30,