菜單工具欄和狀態(tài)欄_第1頁(yè)
菜單工具欄和狀態(tài)欄_第2頁(yè)
菜單工具欄和狀態(tài)欄_第3頁(yè)
菜單工具欄和狀態(tài)欄_第4頁(yè)
菜單工具欄和狀態(tài)欄_第5頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

會(huì)計(jì)學(xué)1菜單工具欄和狀態(tài)欄26.1菜單(1of11)

對(duì)于菜單的顯示都遵循下列一些規(guī)則:若某菜單項(xiàng)標(biāo)題后有“…”,那么在點(diǎn)擊某菜單項(xiàng)會(huì)彈出一對(duì)話框。若某項(xiàng)菜單有子菜單,那么在該菜單項(xiàng)文本后有“”。菜單項(xiàng)需要助記符,用括號(hào)將帶下劃線的字母括起來(lái)。助記符與Alt構(gòu)成一個(gè)組合鍵,當(dāng)按住“Alt”鍵不放,再敲擊該字母時(shí),對(duì)應(yīng)的菜單項(xiàng)就會(huì)被選中。若某項(xiàng)菜單需要快捷鍵的支持,則一般將其列在相應(yīng)菜單項(xiàng)文本之后。任何時(shí)候按下快捷鍵,相應(yīng)的菜單命令都會(huì)被執(zhí)行。圖6.1File菜單第1頁(yè)/共32頁(yè)36.1菜單(2of11)

6.1.1用編輯器設(shè)計(jì)菜單

編輯菜單 在菜單的空位置上雙擊鼠標(biāo)左鍵,則出現(xiàn)它的屬性對(duì)話框,如圖。

圖6.2菜單編輯器菜單的空位置圖6.3菜單屬性對(duì)話框第2頁(yè)/共32頁(yè)46.1菜單(3of11)

第3頁(yè)/共32頁(yè)56.1菜單(4of11)

需要注意的是:當(dāng)菜單項(xiàng)的屬性中選中了Pop_up(該菜單包含子菜單)時(shí),對(duì)話框中ID、Separator和Prompt項(xiàng)無(wú)效。增加新的菜單項(xiàng)后,用戶可以用鼠標(biāo)將菜單項(xiàng)拖到其他位置,而當(dāng)菜單項(xiàng)位置改變時(shí),其屬性并不改變。菜單項(xiàng)被拖動(dòng)的位置圖6.4拖動(dòng)菜單項(xiàng)圖6.5添加的菜單項(xiàng)第4頁(yè)/共32頁(yè)66.1菜單(5of11)

菜單命令的消息映射[例Ex_Mmenu]“成績(jī)輸入”菜單項(xiàng)的映射。

(1)進(jìn)入MFCClassWizard對(duì)話框,切換到MessageMaps頁(yè)面。

(2)從“Classname”列表中選擇CMainFrame,在IDs列表中選擇ID_SCORE_IN,然后在Messages框中選擇COMMAND消息,如圖。

圖6.6消息的選擇第5頁(yè)/共32頁(yè)76.1菜單(6of11)

(3)單擊[AddFunction]按鈕或雙擊COMMAND消息,輸入成員函數(shù)的名稱。如圖6.7所示。

(4)單擊[OK]。選擇新增加的成員函數(shù),單擊[EditCode]按鈕(或直接在函數(shù)名雙擊鼠標(biāo)左鍵),就可以在此成員函數(shù)中添加一些代碼。例如:

voidCMainFrame::OnScoreIn() { //TODO:Addyourcommandhandlercodehere

AfxMessageBox("現(xiàn)在就輸入成績(jī)嗎?"); } (5)編譯并運(yùn)行。在應(yīng)用程序的頂層菜單上,單擊“成績(jī)輸入”菜單項(xiàng)或按Alt+S組合鍵,如圖6.8所示。圖6.7添加成員函數(shù)對(duì)話框圖6.8菜單命令執(zhí)行的結(jié)果第6頁(yè)/共32頁(yè)86.1菜單(7of11)

6.1.2使用鍵盤(pán)快捷鍵

(1)先打開(kāi)上例的項(xiàng)目工作區(qū)窗口中Accelerator的資源項(xiàng),雙擊IDR_MAINFRAME,如圖。

圖6.9示例Ex_Sdi的加速鍵資源最下端的空行第7頁(yè)/共32頁(yè)96.1菜單(8of11)

(2)要建立一新的加速鍵,雙擊加速鍵列表的最下端的空行,如圖6.10,其中可設(shè)置的屬性如表6.2。

(3)在上述對(duì)話框中,選擇ID_SCORE_IN作為要設(shè)定快捷鍵的ID號(hào),單擊[NextKeyTyped],按下Ctrl+1作為此加速鍵的鍵值。圖6.10“AccelProperities”對(duì)話框第8頁(yè)/共32頁(yè)106.1菜單(9of11)

6.1.3使用快捷菜單——右鍵菜單用資源編輯器和MFC庫(kù)的CMenu::TrackPopupMenu函數(shù)可以創(chuàng)建快捷菜單。CMenu::TrackPopupMenu函數(shù)原型如下:BOOLTrackPopupMenu(UINTnFlags,intx,inty,CWnd*pWnd,LPCRECTlpRect=NULL);

其中:x和y表示菜單頂端(一般為左上角)的水平坐標(biāo)和垂直坐標(biāo)。pWnd表示彈出菜單的窗口。lpRect是一個(gè)RECT結(jié)構(gòu)或CRect對(duì)象指針,表示一個(gè)矩形區(qū)域,不在該區(qū)域單擊鼠標(biāo)時(shí),則彈出菜單消失;當(dāng)lpRect為NULL時(shí),若擊在菜單外面,菜單立刻消失。第9頁(yè)/共32頁(yè)116.1菜單(10of11)

[例Ex_Menu]創(chuàng)建彈出菜單。(1)選擇“Insert”菜單“Resource”命令,為應(yīng)用程序添加一個(gè)新的菜單資源。(2)用菜單編輯器,為該菜單資源中的頂層菜單的第一項(xiàng)加一任意標(biāo)題(實(shí)際上該標(biāo)題無(wú)任何作用),在此菜單項(xiàng)下依次添加如下表所示的菜單項(xiàng)。(3)將此菜單資源ID號(hào)改為IDR_MYFLOATMENU(默認(rèn)的ID號(hào)為IDR_MENU1)。(4)按Ctrl+W快捷鍵打開(kāi)ClassWizard,將出現(xiàn)一對(duì)話框,詢問(wèn)是“選擇一個(gè)已存在的類”,還是“創(chuàng)建一個(gè)新類”。選擇“選擇一個(gè)已存在的類”項(xiàng)并選定CMainFrame類。第10頁(yè)/共32頁(yè)126.1菜單(11of11)

(5)在CMainFrame類中,選擇上表中所列的菜單ID,雙擊COMMAND消息。這里僅為菜單ID_MENU_SCOREIN映射COMMAND消息,添加代碼:

voidCMainFrame::OnMenuScorein() { AfxMessageBox("現(xiàn)在就輸入成績(jī)嗎?"); }

(6)在CMainFrame類加入WM_CONTEXTMENU消息處理函數(shù),代碼如下:

voidCMainFrame::OnContextMenu(CWnd*pWnd,CPointpoint) { CMenumenu; menu.LoadMenu(IDR_MYFLOATMENU); menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);

}

(7)運(yùn)行并測(cè)試。在應(yīng)用程序的窗口客戶區(qū)中單擊鼠標(biāo)右鍵,彈出如圖菜單?!俺煽?jī)打印”菜單命令沒(méi)有消息處理函數(shù),因此它是灰顯的,用戶不能使用它們。若用戶選中“成績(jī)輸入”菜單命令,則會(huì)執(zhí)行相應(yīng)的代碼。圖6.13快捷菜單第11頁(yè)/共32頁(yè)13第6章菜單、工具欄和狀態(tài)欄6.1菜單

6.2工具欄

6.3狀態(tài)欄第12頁(yè)/共32頁(yè)146.2工具欄

(1of6)6.2.1使用工具欄編輯器 例:選擇“File”“OpenWorkspace”,創(chuàng)建單文檔應(yīng)用程序Ex_Sdi。在項(xiàng)目工作區(qū)窗口中選擇ResourceView標(biāo)簽,雙擊“Toolbar”項(xiàng)中的IDR_MAINFRAME,則工具欄編輯器出現(xiàn)在主界面的右邊,如圖。圖6.14工具欄編輯器窗口空按鈕第13頁(yè)/共32頁(yè)156.2工具欄(2of6)可以對(duì)工具欄進(jìn)行的操作:

(1)創(chuàng)建一個(gè)新的工具欄按鈕 在新建的工具欄中,最右端總有一個(gè)空按鈕,雙擊該按鈕彈出其屬性對(duì)話框,在ID框中輸入其標(biāo)識(shí)符名稱。單擊該按鈕,在編輯器的視窗內(nèi)進(jìn)行編輯,這個(gè)編輯就是繪制一個(gè)按鈕位圖。

(2)移動(dòng)一個(gè)按鈕 在工具欄中移動(dòng)一個(gè)按鈕,用鼠標(biāo)左鍵點(diǎn)中它并拖動(dòng)至相應(yīng)位置即可。若在移動(dòng)一個(gè)按鈕的同時(shí),按下Ctrl鍵,則在新位置復(fù)制一個(gè)按鈕。

(3)刪除一個(gè)按鈕 如果用戶拖動(dòng)它離開(kāi)工具欄位置,則此按鈕從工具欄中消失(被刪除)。但若選中按鈕后,單擊Delete鍵并不能刪除一個(gè)按鈕,只是將按鈕中的圖形全部以背景色填充。第14頁(yè)/共32頁(yè)166.2工具欄(3of6)可以對(duì)工具欄進(jìn)行的操作:

(4)在按鈕之間插入/刪除空格如果按鈕左側(cè)沒(méi)有空格,拖動(dòng)該按鈕向右移動(dòng)并當(dāng)覆蓋相鄰按鈕的一半以上時(shí),釋放鼠標(biāo)鍵,則此按鈕左側(cè)出現(xiàn)空格。如果按鈕左側(cè)有空格而按鈕右側(cè)沒(méi)有空格,拖動(dòng)該按鈕向左移動(dòng)并當(dāng)按鈕的左邊界接觸到前面按鈕時(shí),釋放鼠標(biāo)鍵,則此按鈕右側(cè)將出現(xiàn)空格。如果按鈕左、右兩側(cè)均有空格,拖動(dòng)該按鈕向右移動(dòng)并當(dāng)接觸到相鄰按鈕時(shí),則此按鈕左側(cè)的空格保留,按鈕右側(cè)的空格消失。相反,拖動(dòng)該按鈕向左移動(dòng)并當(dāng)接觸到前一個(gè)相鄰按鈕時(shí),則此按鈕左側(cè)的空格消失,右側(cè)的空格保留。第15頁(yè)/共32頁(yè)176.2工具欄(4of6)可以對(duì)工具欄進(jìn)行的操作:

(5)設(shè)置工具欄按鈕的屬性

雙擊某工具按鈕,就會(huì)彈出其屬性對(duì)話框,如下圖所示。圖6.15工具欄按鈕屬性對(duì)話框第16頁(yè)/共32頁(yè)186.2工具欄(5of6)6.2.2工具欄和菜單相結(jié)合

[例Ex_T&M]將菜單項(xiàng)ID_SCORE_IN與工具按鈕相結(jié)合。

(1)在單文檔應(yīng)用程序Ex_Sid中,作如下操作;

(2)利用工具欄編輯器設(shè)計(jì)一個(gè)工具按鈕,如圖;

(3)雙擊剛才設(shè)計(jì)的鈕工具按鈕圖形,彈出該工具按鈕的屬性對(duì)話框;在屬性對(duì)話框中,將工具按鈕的ID號(hào)設(shè)為ID_SCORE_IN,在Prompt框內(nèi)鍵入“向系統(tǒng)輸入學(xué)生成績(jī)\n成績(jī)輸入”;圖6.16工具欄按鈕的設(shè)計(jì)第17頁(yè)/共32頁(yè)196.2工具欄(6of6)6.2.2工具欄和菜單相結(jié)合

[例Ex_T&M]將菜單項(xiàng)ID_SCORE_IN與工具按鈕相結(jié)合。

(4)編譯并運(yùn)行程序。在應(yīng)用程序的工具欄上,將鼠標(biāo)指針移至剛才設(shè)計(jì)的工具按鈕處,這時(shí)在狀態(tài)欄上顯示出“向系統(tǒng)輸入學(xué)生成績(jī)”信息,若稍等片刻后,還會(huì)彈出提示小窗口,顯示出“成績(jī)輸入”字樣。第18頁(yè)/共32頁(yè)20第6章菜單、工具欄和狀態(tài)欄6.1菜單6.2工具欄

6.3狀態(tài)欄

第19頁(yè)/共32頁(yè)216.3狀態(tài)欄(1of9)

6.3.1狀態(tài)欄的定義

用AppWizard創(chuàng)建的SDI或MDI應(yīng)用程序框架中,有一個(gè)靜態(tài)的indicators數(shù)組,這個(gè)數(shù)組中的元素通常都是一些字符串資源的ID號(hào),它是在MainFrm.cpp文件中被定義的,被MFC用作狀態(tài)欄的定義。默認(rèn)的indicators數(shù)組包含4個(gè)元素,如下圖所示:StaticUINTindicators[]={ID_SEPARATOR,ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,}圖6.17indicators數(shù)組的定義第20頁(yè)/共32頁(yè)226.3狀態(tài)欄(2of9)6.3.2狀態(tài)欄的常用操作增加和減少窗格

狀態(tài)欄中的窗格可以分為信息行窗格和指示器窗格兩類。若在狀態(tài)欄中增加一個(gè)信息行窗格,則在indicators數(shù)組中的適當(dāng)位置中增加一個(gè)ID_SEPARATOR標(biāo)識(shí)即可;若在狀態(tài)欄中增加一個(gè)指示器窗格,則在indicators數(shù)組中的適當(dāng)位置增加一個(gè)在字符串資源中定義過(guò)的資源ID號(hào)即可;若在狀態(tài)欄中減少一個(gè)信息行或者指示器窗格,其操作與增加類似,只需減少一個(gè)對(duì)應(yīng)的數(shù)組元素即可。第21頁(yè)/共32頁(yè)236.3狀態(tài)欄(3of9)6.3.2狀態(tài)欄的常用操作在狀態(tài)欄上顯示文本 有三種辦法可以在狀態(tài)欄窗格顯示文本信息:(1)調(diào)用CWnd::SetWindowText更新信息行窗格(或窗格0)中的文本。若狀態(tài)欄變量為m_wndStatusBar,則m_wndStatusBar.SetWindowText(“消息”)語(yǔ)句將在第一個(gè)信息行窗格內(nèi)顯示“消息”字樣。第22頁(yè)/共32頁(yè)246.3狀態(tài)欄(3of9)6.3.2狀態(tài)欄的常用操作在狀態(tài)欄上顯示文本 有三種辦法可以在狀態(tài)欄窗格顯示文本信息:(2)手動(dòng)處理狀態(tài)欄的ON_UPDATE_COMMAND_UI更新消息,并在處理函數(shù)中調(diào)用CCmdUI::SetText函數(shù)。第23頁(yè)/共32頁(yè)256.3狀態(tài)欄(3of9)6.3.2狀態(tài)欄的常用操作在狀態(tài)欄上顯示文本 有三種辦法可以在狀態(tài)欄窗格顯示文本信息:(3)調(diào)用CStatusBar::SetPaneText函數(shù)更新任何窗格(包括信息行窗格)中的文本。此函數(shù)原型描述如下:

BOOLSetPaneText(intnIndex,LPCTSTRlpszNewText,BOOLbUpdate=TRUE);其中:nIndex表示設(shè)置的窗格的索引(第一個(gè)窗格的索引為0);lpszNewText表示要顯示的字符串;bUpdate為T(mén)RUE表示系統(tǒng)自動(dòng)更新顯示的結(jié)果。第24頁(yè)/共32頁(yè)266.3狀態(tài)欄(4of9)[例Ex_Status]在狀態(tài)欄的最右邊兩個(gè)窗格中顯示出當(dāng)前鼠標(biāo)在窗口客戶區(qū)的位置。

(1)將前面的單文檔應(yīng)用程序Ex_Sdi打開(kāi)或者新建一個(gè)單文檔應(yīng)用程序;

(2)將項(xiàng)目工作區(qū)窗口切換到ResourceView頁(yè)面,雙擊“StringTable”項(xiàng)的“StringTable”圖標(biāo)。在字符串列表的最后一行空項(xiàng)上雙擊鼠標(biāo)左鍵,如圖6.17所示。

(3)該對(duì)話框中,可以指定相應(yīng)的ID和字符串值,這里加入兩個(gè)字符串資源ID_LEFT和ID_RIGHT,其字符個(gè)數(shù)的多少?zèng)Q定窗格的大小。如圖6.18。圖6.17字符串屬性對(duì)話框添加的字符串圖6.18添加的字符串資源第25頁(yè)/共32頁(yè)276.3狀態(tài)欄(5of9)

(4)打開(kāi)MainFrm.cpp文件,將原先的indicators數(shù)組修改如下:

staticUINTindicators[]= { ID_SEPARATOR, //第一個(gè)信息行窗格

ID_SEPARATOR, //第二個(gè)信息行窗格

ID_LEFT, //第三個(gè)窗格

ID_RIGHT, //第四個(gè)窗格

};

(5)必須手動(dòng)添加消息處理函數(shù)原型。打開(kāi)Ex_SdiView.h文件,在AFX_MSG內(nèi)增加消息處理語(yǔ)句,ClassWizard以后允許訪問(wèn)和編輯該代碼。

protected: //{{AFX_MSG(CEx_SdiView)

afx_msgvoidOnUpdateXY(CCmdUI*pCmdUI);

//}}AFX_MSG DECLARE_MESSAGE_MAP()第26頁(yè)/共32頁(yè)286.3狀態(tài)欄(6of9)

(6)打開(kāi)Ex_SdiView.cpp文件,在其消息入口處手動(dòng)添加消息映射函數(shù):

BEGIN_MESSAGE_MAP(CEx_SdiView,CView) //{{AFX_MSG_MAP(CEx_SdiView)

ON_UPDATE_COMMAND_UI(ID_LEFT,OnUpdateXY) ON_UPDATE_COMMAND_UI(ID_RIGHT,OnUpdateXY)

//}}AFX_MSG_MAP第27頁(yè)/共32頁(yè)296.3狀態(tài)欄(7of9)(7)增加修改狀態(tài)欄指示器的消息映射函數(shù)代碼,狀態(tài)欄的窗格需要更新時(shí),應(yīng)用程序框架自動(dòng)調(diào)用此函數(shù)。

voidCEx_SdiView::OnUpdateXY(CCmdUI*pCmdUI) { pCmdUI->Enable(TRUE); //使窗格文本能被更新

}第28頁(yè)/共32頁(yè)306.3狀態(tài)欄(8of9)(8)用ClassWizard在CEx_SdiView類中加入WM_MOUSEMOVE(鼠標(biāo)移動(dòng))消息處理函數(shù),

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論