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