第10章:用戶交互對象-菜單、工具欄和狀態(tài)欄_第1頁
第10章:用戶交互對象-菜單、工具欄和狀態(tài)欄_第2頁
第10章:用戶交互對象-菜單、工具欄和狀態(tài)欄_第3頁
第10章:用戶交互對象-菜單、工具欄和狀態(tài)欄_第4頁
第10章:用戶交互對象-菜單、工具欄和狀態(tài)欄_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第10章用戶交互對象——

菜單、工具欄和狀態(tài)欄

教學(xué)要點(diǎn)

本章內(nèi)容主要包括菜單資源和工具欄資源的建立,菜單和工具欄按鈕對象對WM_COMMAND,UPDATE_COMMAND_UI消息的響應(yīng),狀態(tài)欄牽涉的字符串資源的編輯和對UPDATE_COMMAND_UI消息的響應(yīng),在框架類中如何管理工具欄和狀態(tài)欄。1本章內(nèi)容 10.1菜單 10.2工具欄 10.3狀態(tài)欄

習(xí)題

210.1 菜單

本節(jié)內(nèi)容

10.1.1一個(gè)菜單的綜合實(shí)例10.1.2菜單的組成與分類10.1.3創(chuàng)建菜單資源10.1.4菜單消息10.1.5菜單消息的響應(yīng)*10.1.6為菜單增加快捷鍵和加速鍵310.1.1 一個(gè)菜單的綜合實(shí)例

【例10-1】利用應(yīng)用程序向?qū)FCAppWizard(exe)創(chuàng)建一個(gè)單文檔的應(yīng)用程序,實(shí)現(xiàn)菜單資源的建立與消息的響應(yīng)。1.生成步驟:

(1)啟動VC6.0,選擇“File”菜單的“New”命令,在彈出的“New”對話框中選擇“Project”選項(xiàng)卡。在“Project”選項(xiàng)卡的列表中選擇“MFCAppWizard(exe)”項(xiàng),在“ProjectName”編輯框中輸入要?jiǎng)?chuàng)建的工程名稱MenuExam,在“Location”編輯框中設(shè)置工程的存放位置,單擊“OK”按鈕。(2)在彈出的“MFCAppWizard-Step1”對話框中選擇“singledocument”,即應(yīng)用程序的類型為單文檔模式,然后單擊“Finish”按鈕。(3)在彈出的“NewProjectinformation”對話框中單擊“OK”按鈕,完成應(yīng)用程序框架的創(chuàng)建。4

2.程序功能

該程序?yàn)橐粋€(gè)單文檔的應(yīng)用程序,程序啟動后,單擊“圖形”菜單中的“餅圖”,則在當(dāng)前的客戶區(qū)中顯示一個(gè)餅圖;單擊“圖形”菜單中的“弦圖”,則在當(dāng)前的客戶區(qū)中顯示一個(gè)弦圖。圖10.1所顯示的就是使用中的MenuExam程序。3.程序牽涉到的知識

掌握這幾種類型菜單的資源設(shè)計(jì)與消息的響應(yīng)。510.1.2 菜單的組成與分類

1.菜單的組成菜單是一種資源,它在資源腳本中經(jīng)常被存作一個(gè)模板,用戶通常從菜單欄中選擇命令來操作應(yīng)用程序。菜單主要由下列部分組成:(1)菜單欄(2)菜單(3)菜單項(xiàng)(4)子菜單(5)分隔條(separator)2.菜單的分類Windows系統(tǒng)支持三種類型的菜單,它們分別是菜單欄(主菜單)、彈出式子菜單和上下文菜單。610.1.3 創(chuàng)建菜單資源

VC應(yīng)用程序的資源是由應(yīng)用程序使用,但卻是在程序之外定義的只讀數(shù)據(jù)。菜單是一種資源,可以利用文本編輯器來創(chuàng)建和修改資源,它操作麻煩,不具有可視化的效果?,F(xiàn)在的VC程序中的資源編輯都是通過可視化的資源編輯器來進(jìn)行的。 對于SDI的應(yīng)用程序,應(yīng)用程序向?qū)梢粋€(gè)菜單資源IDR_MAINFRAM,對于一般的程序,我們就直接在上面添加自己所需要的菜單資源,方法為:1.打開缺省菜單資源

在Workspace窗口中選擇ResourceView選項(xiàng)卡,打開MenuExam工程的資源列表,選中“Menu”資源項(xiàng)目下的“IDR_MAINFRAME”,可以看到應(yīng)用程序缺省定義的菜單資源形式,它包含如圖10.2所示的菜單中的“文件”、“編輯”、“查看”、“幫助”四個(gè)菜單項(xiàng)。7

2.增加一個(gè)主菜單項(xiàng)“圖形”

選擇“幫助”菜單,然后按“Insert”鍵將會在“查看”與“幫助”菜單項(xiàng)之間加入一個(gè)空菜單項(xiàng)。雙擊該菜單項(xiàng),彈出圖10.3所示的主菜單屬性對話框,并在其中的“Caption”編輯框中輸入主菜單的標(biāo)題為“圖形”。這樣在應(yīng)用程序的主框架中就增加了一個(gè)主菜單項(xiàng)“圖形”。

3、增加主菜單“圖形”的子菜單項(xiàng)

用鼠標(biāo)雙擊“圖形”菜單下的空白菜單項(xiàng),彈出圖10.4所示的子菜單屬性設(shè)置對話框,在ID組合框中輸入菜單的資源ID為ID_GRAPH_PIE,在“Caption”編輯框中輸入“餅圖”,在“Prompt”編輯框中輸入菜單項(xiàng)提示信息為“在客戶區(qū)畫一個(gè)餅圖\n畫餅圖”。用同樣的方法再添加一個(gè)菜單項(xiàng),其中菜單資源ID為ID_GRAPH_CHORD,“Caption”的內(nèi)容為“弦圖”,“Prompt”中的內(nèi)容為“在客戶區(qū)畫一個(gè)弦圖\n畫弦圖”。8圖10.2單文檔程序的缺省菜單

9圖10.3主菜單屬性對話框

圖10.4子菜單的屬性對話框10

4.增加上下文菜單上下文菜單必須要有自己的資源ID,在Workspace窗口中選擇ResourceView選項(xiàng)卡,打開MenuExam工程的資源列表,鼠標(biāo)右鍵單擊“Menu”項(xiàng),在彈出菜單中選擇“InsertMenu”,完后將該菜單資源的ID修改為IDR_POPUP_MENU。用同步驟3的方法在IDR_POPUP_MENU資源中添加主菜單“上下文菜單”。11

10.1.4 菜單消息

菜單被選中時(shí)發(fā)送消息給Windows,再由Windows傳送給應(yīng)用程序的消息映射。在MFC消息映映射中,有三個(gè)菜單消息:WM_COMMAND、ON_UPDATE_COMMAND_UI和WM_CONTEXTMENU。1.WM_COMMAND消息

當(dāng)用戶選中了菜單項(xiàng),激活了相關(guān)鍵加速器或者是選中了與此菜單項(xiàng)相對應(yīng)的工具欄按鈕,Windows發(fā)送WM_COMMAND消息,該消息又叫命令消息。命令消息的消息映射采用以下形式:

ON_COMMAND(MenuId,ClassMethod)2.UPDATE_COMMAND_UI消息

UPDATE_COMMAND_UI是MFC所特有的,如果你想根據(jù)應(yīng)用程序的當(dāng)前狀態(tài)激活或者使菜單項(xiàng)無效,或者在程序運(yùn)行的某一時(shí)刻反映菜單項(xiàng)的可用性,該條消息就要處理。消息映射采用以下形式:

ON_UPDATE_COMMAND_UI(MenuID,ClassMethod)

123.上下文菜單消息WM_CONTEXTMENU在Windows系統(tǒng)下,隨處可見上下文菜單,只要你是在不同程序的不同操作區(qū)域內(nèi),按下鼠標(biāo)右鍵,都會出來一個(gè)與當(dāng)前操作上下文有關(guān)的菜單,它就是上下文菜單。當(dāng)用戶按下鼠標(biāo)右鍵時(shí),就會發(fā)出上下文菜單消息WM_CONTEXTMENU。該消息的消息映射宏為:

ON_WM_CONTEXTMENU()13

10.1.5菜單消息的響應(yīng)

Windows是通過消息傳遞機(jī)制運(yùn)行的。菜單項(xiàng)對命令的激發(fā)、調(diào)用是通過發(fā)送WM_COMMAND消息來實(shí)現(xiàn)的。在單文檔和多文檔的應(yīng)用程序中,要考慮消息的路由問題。

命令消息WM_COMMAND可以映射到不同的類中,可以根據(jù)菜單的不同作用進(jìn)行不同的映射。對于通用的菜單,則在框架中映射。About對話框的顯示菜單最好在應(yīng)用程序類中映射。在使用類向?qū)椴藛蔚拿钕⑦M(jìn)行映射后,ClassWizard自動向程序中插入菜單命令消息映射入口、消息處理函數(shù)的原型說明和空的消息映射函數(shù)體。

141.添加WM_COMMAND菜單命令消息響應(yīng)函數(shù)(1)打開前面創(chuàng)建的MenuExam工程,選擇View|ClassWizard命令打開類向?qū)υ捒?。?)在圖10.5所示的對話中,單擊“ClassName”列表框中的下拉按鈕,在其中選擇“CMenuExamView”項(xiàng),在“ObjectIDs”列表框中選擇“ID_GRAPH_PIE”,在“Message”列表中選擇“Command”項(xiàng),然后單擊“AddFucntion”按鈕彈出“AddMemberFunction”對話框,采用默認(rèn)的函數(shù)名,單擊“OK”按鈕。(3)用同樣的方法為視圖類CmenuExamView中添加了“弦圖”菜單項(xiàng)的命令消息函數(shù)OnGraphChord()。(4)消息映射函數(shù)的實(shí)現(xiàn)點(diǎn)擊代碼152.添加UPDATE_COMMAND_UI更新菜單命令用戶接口的消息響應(yīng)函數(shù)

(1)打開MenuExam工程,選擇View|ClassWizard命令打開類向?qū)υ捒?,單擊“ClassName”列表框中的下拉按鈕,在其中選擇“CMenuExamView”項(xiàng),在“ObjectIDs”列表框中選擇“ID_GRAPH_PIE”,在“Message”列表中選擇“UPDATE_COMMAND_UI”項(xiàng),然后單擊“AddFucntion”按鈕彈出“AddMemberFunction”對話框,采用默認(rèn)的函數(shù)名OnUpdateGraphPie,單擊“OK”按鈕。(2)用同樣的方法,在視圖類CmenuExamView中添加了“弦圖”菜單項(xiàng)的更新命令用戶接口的消息函數(shù)OnUpdateGraphChord()。(3)消息映射函數(shù)的實(shí)現(xiàn)

①“餅圖”菜單項(xiàng)的更新命令用戶接口消息函數(shù)OnUpdateGraphPie的代碼16

voidCMenuExamView::OnUpdateGraphPie(CCmdUI*pCmdUI){

pCmdUI->Enable(!m_IsPie);}②“弦圖”菜單項(xiàng)的更新命令用戶接口消息函數(shù)OnUpdateGraphChord的代碼voidCMenuExamView::OnUpdateGraphChord(CCmdUI*pCmdUI){pCmdUI->Enable(m_IsPie);}3.添加WM_CONTEXTMENU上下文菜單消息響應(yīng)函數(shù)

(1)打開MenuExam工程,選擇View|ClassWizard命令打開類向?qū)υ捒?,單擊“ClassName”列表框中的下拉按鈕,在其中選擇“CMenuExamView”項(xiàng),在“ObjectIDs”列表框中選擇“CMenuExamView”,在“Message”列表中選擇“WM_CONTEXTMENU”項(xiàng),然后單擊“AddFucntion”按鈕彈出“AddMemberFunction”對話框,采用默認(rèn)函數(shù)名OnContextMenu,單擊“OK”按鈕。17(2)鼠標(biāo)右鍵單擊響應(yīng)函數(shù)OnContextMenu()的實(shí)現(xiàn)

voidCMenuExamView::OnContextMenu(CWnd*pWnd,CPointpoint){

CMenuPopupMenu;//定義菜單對象

PopupMenu.LoadMenu(IDR_POPUP_MENU); PopupMenu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);//彈出上下文菜單}1810.1.6 為菜單增加快捷鍵和加速鍵在應(yīng)用程序中,可以為每個(gè)菜單項(xiàng)增加快捷鍵和加速鍵。所謂快捷鍵就是當(dāng)包含該菜單項(xiàng)的菜單被打開時(shí),直接按某指定的鍵等同于用鼠標(biāo)單擊該菜單項(xiàng)。所謂加速鍵就是在沒有打開包含該菜單項(xiàng)的菜單時(shí),按組合鍵Ctrl+某指定鍵等價(jià)于用鼠標(biāo)單擊該菜單項(xiàng)。1.快捷鍵的設(shè)置

打開菜單資源編輯器,雙擊“餅圖”,修改Caption編輯框的標(biāo)題為“餅圖(&P)\tCtrl+T”。2.加速鍵的設(shè)置(1)在WorkSpace窗口中選擇ResourceView選項(xiàng)卡,單擊Accelerator項(xiàng)前面的“+”號,雙擊展開的列表項(xiàng)中的IDR_MAINFRAME,出現(xiàn)加速鍵資源編輯器。(2)雙擊加速鍵列表項(xiàng)最下面的空白項(xiàng),,單擊ID組合框的下拉按鈕,從下拉列表中選擇ID_GRAPH_PIE,在Key組合框中輸入大寫字母T。1910.2 工具欄

本節(jié)內(nèi)容

10.2.1工具欄簡介

10.2.2一個(gè)使用工具欄的應(yīng)用程序

10.2.3創(chuàng)建工具欄資源模板

10.2.4工具欄類CToolBar10.2.5在應(yīng)用程序框架中創(chuàng)建工具欄對象10.2.6工具欄的消息處理機(jī)制

2010.2.1 工具欄簡介

工具欄為用戶提供了程序命令的直接訪問方式,工具欄中包含有一些水平排放的圖形按鈕,當(dāng)用一次鼠標(biāo)單擊它們時(shí)就發(fā)送相應(yīng)的命令消息。

從編程角度看,工具欄就是一個(gè)子窗口,它顯示一系列位圖按鈕。由于工具欄按鈕一般對應(yīng)著某個(gè)菜單選項(xiàng),因此工具欄的某個(gè)按鈕和菜單的某個(gè)選項(xiàng)除了創(chuàng)建的方式和在界面的顯示方式不一樣外,對于消息的響應(yīng)都是一樣的。

工具欄和狀態(tài)欄對象一般作為框架窗口類的成員變量聲明,在創(chuàng)建框架窗口時(shí)自動創(chuàng)建它們,在銷毀框架窗口時(shí)自動銷毀所創(chuàng)建的控件欄對象。使用AppWizard創(chuàng)建了應(yīng)用程序的基本框架后,也就建立了初始的工具欄和狀態(tài)欄對象。2110.2.2 一個(gè)使用工具欄的應(yīng)用程序

【例10-2】利用應(yīng)用程序向?qū)FCAppWizard(exe)創(chuàng)建一個(gè)單文檔的應(yīng)用程序,實(shí)現(xiàn)工具欄的操作。1.生成步驟

模仿10.1.1節(jié)中的方法,利用應(yīng)用程序向?qū)FCAppWizard(exe)創(chuàng)建一個(gè)單文檔的應(yīng)用程序框架,該工程的名稱為ToolBarExam,所有的步驟都采用缺省的設(shè)置。2.程序功能

本程序是一個(gè)演示工具欄的單文檔應(yīng)用程序。當(dāng)程序運(yùn)行后,在工具欄上有自己新設(shè)計(jì)的兩個(gè)工具條按鈕,單擊一個(gè),可以重新啟動計(jì)算機(jī),單擊另一個(gè),可以把當(dāng)前的鼠標(biāo)樣子變成一個(gè)動畫圖形。3.技術(shù)要點(diǎn)

本程序主要掌握工具欄資源的建立方法,工具欄對命令消息的響應(yīng),熟悉一些API函數(shù)的用法,體會VC對系統(tǒng)的控制。2210.2.3創(chuàng)建工具欄資源模板

工具欄也是一種資源,因此使用工具欄的首要工作是利用VC的可視化的資源編輯器進(jìn)行工具欄資源的創(chuàng)建與保存,下面為創(chuàng)建與編輯工具欄資源的步驟。

1.打開剛才創(chuàng)建的工程ToolBarExam。2.在WorkSpace窗口中選擇ResourceView選項(xiàng)卡,單擊ToolBar項(xiàng)前面的“+”號展開工具欄資源項(xiàng)目,系統(tǒng)默認(rèn)的工具欄的ID值為IDR_MAINFRAM。雙擊IDR_MAINFRAM,VC以設(shè)計(jì)模式顯示出工具條,注意,若想刪除無用的工具欄按鈕,只需把無用的按鈕脫離工具欄即可。3.我們在工具條最右邊的空白圖標(biāo)中增加兩個(gè)新圖標(biāo),雙擊創(chuàng)建好的圖標(biāo),彈出屬性對話框,設(shè)定該兩個(gè)工具條按鈕的ID為ID_QUIT_WINDOWS和ID_CARTOON,同時(shí)在提示欄Prompt中輸入“重新啟動Windows操作系統(tǒng)\n重新啟動”和”裝載動畫鼠標(biāo)圖形\n動畫圖標(biāo)”。2310.2.4 工具欄類CToolBar

類CToolBar提供了帶有位圖按鈕和可選分隔符的工具欄,工具欄按鈕有下壓式、復(fù)選框按鈕或單選按鈕。CToolBar對象通常是做為派生類CFrameWnd或CMDIFrameWnd框架窗口的對象成員,利用AppWizard創(chuàng)建應(yīng)用程序框架時(shí),在框架類中已創(chuàng)建了一個(gè)CToolBar對象。

MFC的工具欄類CToolBar是創(chuàng)建用來接收某些命令鍵入并向用戶顯示狀態(tài)信息的類,利用它可以立即訪問程序命令。從編程的角度看,工具欄是一個(gè)顯示一系列位圖按鈕的子窗口,一旦創(chuàng)建了工具欄并使其可見,就可以用操作窗口的方法來操作它。工具欄的按鈕和菜單或加速鍵一樣,單擊他們都生成WM_COMMAND消息,并且工具欄的命令I(lǐng)D與菜單或加速鍵的命令I(lǐng)D相同。下面為該類中幾個(gè)重要的函數(shù)說明。24

1.Create()函數(shù)Create()函數(shù)用于創(chuàng)建一個(gè)Windows工具欄,并將其連接到CToolBar對象上,同時(shí)設(shè)置工具條的默認(rèn)高度。該函數(shù)的原型如下:BOOLCreate(CWnd*pParentWnd,DWORDdwStyle=WS_CHILD|WS_VISIBLE|CBRS_TOP,UINTnID=AFX_IDW_TOOLBAR);2.LoadToolBar()函數(shù)該函數(shù)裝載指定的工具欄資源,它的原型為:BOOLLoadToolBar(LPCTSTRlpszResourceName);BOOLLoadToolBar(UINTnIDResource);2510.2.5 在應(yīng)用程序框架中創(chuàng)建

工具欄對象

在利用MFCAppWizard生成的單文檔應(yīng)用程序中,工具欄對象的創(chuàng)建是在應(yīng)用程序框架類中,可以說應(yīng)用程序框架類的一個(gè)主要功能就是管理工具欄和狀態(tài)欄。1.在框架類CMainFrame類中聲明工具欄對象打開上一節(jié)所生成的應(yīng)用程序。在WorkSpace窗口中選擇ClasseView選項(xiàng)卡,用鼠標(biāo)雙擊類視圖中的CMainFrame類,程序?qū)⒍ㄎ坏皆擃悓?yīng)的頭文件MainFrm.h中,下面為該類的頭文件中有關(guān)框架類的聲明的內(nèi)容,所有代碼都是自動生成的,請利用上一篇所講的面向?qū)ο罄碚撝R對它進(jìn)行分析。

點(diǎn)擊代碼26語句CToolBarm_wndToolBar;代表在框架類中有一個(gè)從CToolBar派生的對象_wndToolBar;語句CStatusBarm_wndStatusBar代表在框架類中有一個(gè)從狀態(tài)欄類CStatusBar實(shí)例化一個(gè)狀態(tài)欄對象m_wndStatusBar。2.在框架類CMainFrame類的實(shí)現(xiàn)文件中初始化工具欄對象

打開上一節(jié)所生成的應(yīng)用程序。在WorkSpace窗口中選擇ClasseView選項(xiàng)卡,用鼠標(biāo)單擊類視圖中的CMainFrame類,將該類展開,雙擊框架類的OnCreate成員函數(shù),程序?qū)⒆詣佣ㄎ坏皆擃悓?yīng)的實(shí)現(xiàn)文件MainFrm.cpp中的OnCreate的實(shí)現(xiàn)處。下面為該類的消息響應(yīng)函數(shù)OnCreate的主要內(nèi)容(WM_CREATE的響應(yīng)函數(shù)),所有代碼都是自動生成的。點(diǎn)擊代碼2710.2.6工具欄的消息處理機(jī)制

若一個(gè)工具欄按鈕的資源ID與菜單選項(xiàng)的資源ID一樣時(shí),單擊工具欄按鈕與選擇該菜單發(fā)出的消息都一樣。該命令消息可以像菜單消息一樣進(jìn)行消息的傳遞,因此在菜單一章中講的命令消息的傳遞機(jī)制也同樣適合于工具欄消息。工具欄要處理的兩個(gè)主要消息是WM_COMMAND和UPDATE_COMMAND_UI。和菜單一樣,應(yīng)用程序是通過提供消息映射函數(shù)來處理單擊工具欄按鈕所產(chǎn)生的命令,如果工具欄的某個(gè)按鈕沒有消息COMMAND或UPDATE_COMMAND_UI對應(yīng)的處理函數(shù),那么框架自動使該按鈕無效。下面我們在視圖類中添加對工具欄按鈕ID_QUIT_WINDOWS和ID_CARTOON的消息響應(yīng)函數(shù),添加的方法和對菜單的單擊一樣,參見10.1.5節(jié)的敘述。點(diǎn)擊代碼2810.3 狀態(tài)欄

本節(jié)內(nèi)容

10.3.1狀態(tài)欄簡介10.3.2一個(gè)使用狀態(tài)欄的應(yīng)用程序10.3.3狀態(tài)欄類CStatuslBar10.3.4在應(yīng)用程序框架中創(chuàng)建狀態(tài)欄對象10.3.5創(chuàng)建字符串資源10.3.6

狀態(tài)欄的消息處理29

10.3.1 狀態(tài)欄簡介

狀態(tài)欄是顯示在應(yīng)用程序主窗口底部的的一個(gè)多區(qū)域子窗口,用于顯示文本信息。狀態(tài)欄中的子窗口可以分為狀態(tài)信息行和狀態(tài)指示器,如圖10.10所示。狀態(tài)信息行顯示應(yīng)用程序動態(tài)提供的字符串,例如單擊菜單的命令提示信息,狀態(tài)指示器顯示一些狀態(tài)信息,如鍵盤某些鍵的狀態(tài)如Capslock鍵的狀態(tài)。AppWizard創(chuàng)建應(yīng)用程序時(shí),一般自動添加狀態(tài)欄,程序員在編程的過程中只需在原有的狀態(tài)欄的基礎(chǔ)上適當(dāng)修改即可。3010.3.1狀態(tài)欄

圖10.10Word軟件中的狀態(tài)欄

3110.3.2一個(gè)使用狀態(tài)欄的應(yīng)用程序【例10-3】利用應(yīng)用程序向?qū)FCAppWizard(exe)創(chuàng)建一個(gè)單文檔的應(yīng)用程序,實(shí)現(xiàn)狀態(tài)欄的操作。1.程序功能

本程序是在上一節(jié)將的程序基礎(chǔ)上添加一個(gè)演示狀態(tài)欄的功能。當(dāng)程序運(yùn)行后,在狀態(tài)欄的信息提示行上顯示鼠標(biāo)在屏幕上的位置,在狀態(tài)欄指示器的最右端顯示系統(tǒng)的時(shí)間。2.技術(shù)要點(diǎn)

本程序主要練習(xí)狀態(tài)欄牽涉的字符串資源的的建立方法,狀態(tài)欄對更新命令用戶接口消息的響應(yīng),熟悉自己在類中添加消息映射的方法,熟悉MFC對狀態(tài)欄的支持。

3210.3.3 狀態(tài)欄類CStatuslBar

MFC的CStatusBar類用來實(shí)現(xiàn)狀態(tài)欄的功能,CStatusBar類為CControlBar類的派生類,它定義了一個(gè)默認(rèn)的構(gòu)造函數(shù)和一個(gè)Create()成員函數(shù)。CStatusBar::Create()函數(shù)用于創(chuàng)建一個(gè)Windows狀態(tài)欄(子窗口),置初始字體和狀態(tài)欄的高度,該函數(shù)原型為:

BoolCreate(CWnd*pParentWnd,DWORDdwStyle=WS_CHILD|WS_VISIBLE|CBRS_BOTTOM,UINTnID=AFX_IDW_STATUS_BAR);

CStatusBar類還提供一系列成員函數(shù)來管理狀態(tài)欄的指示器,主要有:1.SetIndicators()函數(shù)

函數(shù)SetIndicators()用于設(shè)置指示器ID,并裝入由每個(gè)ID指定的字符串資源,然后將指示器的文字設(shè)置為該字符串,該函數(shù)的原型為:

BOOLSetIndicators(constUINT*lpIDArray,intnIDCount);33

2.SetPaneInfo()函數(shù)

數(shù)SetPaneInfo()用于設(shè)置給定索引值的指示器ID、風(fēng)格和寬度。它的原型為:

voidSetPaneInfo(intnIndex,UINTnID,UINTnStyle,intcxWidth);該函數(shù)給標(biāo)識符欄設(shè)置一個(gè)新的ID、風(fēng)格和寬度。

3.SetPaneText()函數(shù)

函數(shù)SetPaneText()用于設(shè)置給定索引值的指示器的文本,它的原型為:

BOOLSetPaneText(intnIndex,LPCTSTRlpszNewText,BOOLbUpdate=TRUE);該函數(shù)用lpszNewText所指向的字符串來設(shè)置狀態(tài)欄的文字。3410.3.4 在應(yīng)用程序框架中

創(chuàng)建狀態(tài)欄對象

在利用MFCAppWizard生成的單文檔應(yīng)用程序中,狀態(tài)欄對象的創(chuàng)建是在應(yīng)用程序框架類中??梢哉f應(yīng)用程序框架類的一個(gè)主要功能就是管理工具欄和狀態(tài)欄的。因此該節(jié)的程序代碼請參照10.3.4節(jié)內(nèi)容。1.在框架類CMainFrame類的.h頭文件中聲明狀態(tài)欄對象

在MFC的應(yīng)用程序中,狀態(tài)欄的聲明在在框架類CMainFrame類的頭文件Mainframe.h中。一般情況在,一個(gè)狀態(tài)欄聲明為框架窗口的受保護(hù)的CStatusBar成員變量:protected:CStatusBarm_wndStatusBar;

2.在框架類CMainFrame類.cpp初始化狀態(tài)欄對象

狀態(tài)欄的創(chuàng)建和初始化工作是由該框架窗口在它的OnCreate()函數(shù)中完成。Mainfrm.cpp中的OnCreate()函數(shù)下35if(!m_wndStatusBar.Create(this)||!m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT))){ TRACE0("Failedtocreatestatusbar\n");eturn-1; }上述代碼的主要功能是調(diào)用狀態(tài)欄對象m_wndStatusBar的成員函數(shù).Create()創(chuàng)建該對象,并且調(diào)用狀態(tài)欄類的成員函數(shù)SetIndicators()設(shè)置狀態(tài)欄的提示信息和指示器的信息。當(dāng)創(chuàng)建應(yīng)用程序的基本框架時(shí),AppWizard會在主邊框窗口類(CMainFram)中創(chuàng)建類似以下的提示符數(shù)組:staticUINTindicators[]={ ID_SEPARATOR,//狀態(tài)行指示器

ID_INDICATOR_CAPS,ID_INDICATOR_NUM, ID_INDICATOR_SCRL,};3610.3.5創(chuàng)建字符串資源

字符串表也是一種Windows的資源。它包含了應(yīng)用程序所有字符串的ID號、ID號的數(shù)值和字符串內(nèi)容。使用字符字符串的好處是有利于將應(yīng)用程序本地化。要編輯應(yīng)用程序的字符串資源,可激活WorkSpace窗口的ResourceView欄,雙擊StringTable進(jìn)入字符串資源編輯器中。在其中插入一個(gè)字符串資源ID_INDICATOR_TIME。如圖37

添加完字符串資源后,激活WorkSpace窗口的FileView欄,雙擊SourceFiles文件夾下的mainfrm.cpp,找到數(shù)組indicators[]的定義,將該字符串資源添加到該數(shù)組中。staticUINTindicators[]={ ID_SEPARATOR,//statuslineindicator ID_INDICATOR_CAPS,//CapsLock鍵狀態(tài)

ID_INDICATOR_NUM,//NumLock鍵狀態(tài)

ID_INDICATOR_SCRL,//ScrollLock鍵狀態(tài)

ID_INDICATOR_TIME//手工添加的顯示時(shí)間的字符串資源ID};

3810.3.6 狀態(tài)欄的消息處理本節(jié)的程序主要講解狀態(tài)欄的使用,狀態(tài)欄中的子窗口可以分為狀態(tài)信息行和狀態(tài)指示器,我們按照狀態(tài)信息行的消息處理和狀態(tài)指示器的消息處理來闡述。

1.狀態(tài)信息行的消息處理

許多應(yīng)用程序都有這樣的功能(如AutoCAD)當(dāng)鼠標(biāo)在屏幕上移動時(shí),在程序的狀態(tài)欄上顯示鼠標(biāo)的位置,本節(jié)的例子首先要實(shí)現(xiàn)該功能。因?yàn)槭髽?biāo)在屏幕移動,這牽涉到WM_MOUSEMOVE消息的處理,因此在狀態(tài)欄上顯示鼠標(biāo)的位置就是在該消息的響應(yīng)函數(shù)中添加對狀態(tài)信息行的處理。利用類向?qū)lassWizard添加視圖類CToolBarExam對WM_MOUSEMOVE的消息映射,在該消息響應(yīng)函數(shù)中添加獲取鼠標(biāo)的光標(biāo)位置的代碼:39在代碼中,使用CWnd的GetDescendantWindow()函數(shù)返回一個(gè)指向ID_VIEW_STATUS_BAR狀態(tài)欄的指針,然后使用狀態(tài)欄成員函數(shù)SetPaneText為第0個(gè)信息框賦值(注意本程序只能給一個(gè)信息框賦值,調(diào)用成員函數(shù)SetPaneStyle(0,SBPS_POPOUT)將該信息提示框設(shè)置成凸起風(fēng)格。2.狀態(tài)指示器的消息處理

狀態(tài)指示器總是與一個(gè)字符串資源連接的(10.3.5節(jié)創(chuàng)建的ID_INDICATOR_TIME),該字符串是否被顯示完全取決于相應(yīng)更新命令用戶接口消息映射函數(shù)。指示器是由一個(gè)字符串資源ID來標(biāo)識的,該ID也被用來傳遞更新命令用戶接口消息,因此狀態(tài)指示器的消息處理主要指對UPDATE_COMMAND_UI消息的映射處理。40(1)聲明消息映射函數(shù)

在框架類的頭文件Mainfrm.h中,找到該類的所有消息映射函數(shù)原型的說明,增加ID_INDICATOR_TIME字符串資源ID對UPDATE_COMMAND_UI消息的映射函數(shù)OnUpdateTime()原型聲明,添加后的代碼如下:protected: //{{AFX_MSG(CMainFrame) afx_msgintOnCreate

溫馨提示

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

最新文檔

評論

0/150

提交評論