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

下載本文檔

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

文檔簡介

1、Visual C+Visual C+1第第10章章 用戶交互對象用戶交互對象菜單、工具欄和狀態(tài)欄菜單、工具欄和狀態(tài)欄 教學(xué)要點教學(xué)要點 本章內(nèi)容主要包括菜單資源和工具欄資源的建菜單資源和工具欄資源的建立立,菜單和工具欄按鈕對象對WM_COMMAND,UPDATE_COMMAND_UI消息的響應(yīng)消息的響應(yīng),狀態(tài)欄牽涉的字符串資源的編輯和對UPDATE _COMMAND _UI消息的響應(yīng),在框架類中如何管理工具欄和狀態(tài)欄。 Visual C+Visual C+2本章內(nèi)容10.1 菜單菜單 10.2 10.2 工具欄工具欄10.3 10.3 狀態(tài)欄狀態(tài)欄 習(xí)題習(xí)題 Visual C+Visual C

2、+310.1菜單菜單 本節(jié)內(nèi)容本節(jié)內(nèi)容 10.1.1 一個菜單的綜合實例 10.1.2 菜單的組成與分類 10.1.3 創(chuàng)建菜單資源 10.1.4 菜單消息 10.1.5 菜單消息的響應(yīng) *10.1.6 為菜單增加快捷鍵和加速鍵Visual C+Visual C+410.1.1一個菜單的綜合實例一個菜單的綜合實例 【例10-1】利用應(yīng)用程序向?qū)FC AppWizard(exe)創(chuàng)建一個單文檔的應(yīng)用程序,實現(xiàn)菜單資源的建立與消息的響應(yīng)。1 生成步驟 : (1)啟動VC6.0,選擇“File”菜單的“New”命令,在彈出的“New”對話框中選擇“Project”選項卡。在“Project”選項卡

3、的列表中選擇“MFC AppWizard(exe)”項,在“Project Name”編輯框中輸入要創(chuàng)建的工程名稱MenuExam,在“Location”編輯框中設(shè)置工程的存放位置,單擊“OK”按鈕。 (2)在彈出的“MFC AppWizard-Step1” 對話框中選擇“single document”,即應(yīng)用程序的類型為單文檔模式,然后單擊“Finish”按鈕。 (3)在彈出的“New Project information” 對話框中單擊“OK”按鈕,完成應(yīng)用程序框架的創(chuàng)建。Visual C+Visual C+5 2程序功能 該程序為一個單文檔的應(yīng)用程序,程序啟動后,單擊“圖形”菜單中的

4、“餅圖”,則在當(dāng)前的客戶區(qū)中顯示一個餅圖;單擊“圖形”菜單中的“弦圖”,則在當(dāng)前的客戶區(qū)中顯示一個弦圖。圖10.1所顯示的就是使用中的MenuExam程序。 3程序牽涉到的知識程序牽涉到的知識 掌握這幾種類型菜單的資源設(shè)計與消息的響應(yīng)。掌握這幾種類型菜單的資源設(shè)計與消息的響應(yīng)。Visual C+Visual C+610.1.2菜單的組成與分類菜單的組成與分類 1菜單的組成 菜單是一種資源,它在資源腳本中經(jīng)常被存作一個模板,用戶通常從菜單欄中選擇命令來操作應(yīng)用程序。菜單主要由下列部分組成: (1)菜單欄 (2)菜單 (3)菜單項 (4)子菜單 (5)分隔條(separator)2菜單的分類 Wi

5、ndows 系統(tǒng)支持三種類型的菜單,它們分別是菜單欄(主菜單)、彈出式子菜單和上下文菜單。Visual C+Visual C+710.1.3 創(chuàng)建菜單資源創(chuàng)建菜單資源 VC應(yīng)用程序的資源是由應(yīng)用程序使用,但卻是在程序之外定義的只讀數(shù)據(jù)。菜單是一種資源,可以利用文本編輯器來創(chuàng)建和修改資源,它操作麻煩,不具有可視化的效果?,F(xiàn)在的VC程序中的資源編輯都是通過可視化的資源編輯器來進(jìn)行的。對于SDI的應(yīng)用程序,應(yīng)用程序向?qū)梢粋€菜單資源IDR_MAINFRAM,對于一般的程序,我們就直接在上面添加自己所需要的菜單資源,方法為: 1打開缺省菜單資源 在Workspace窗口中選擇ResourceView

6、選項卡,打開MenuExam工程的資源列表,選中“Menu”資源項目下的“IDR_MAINFRAME”,可以看到應(yīng)用程序缺省定義的菜單資源形式,它包含如圖10.2所示的菜單中的“文件”、“編輯”、“查看”、“幫助”四個菜單項。Visual C+Visual C+8 2增加一個主菜單項“圖形” 選擇“幫助”菜單,然后按“Insert”鍵將會在“查看”與“幫助”菜單項之間加入一個空菜單項。雙擊該菜單項,彈出圖10.3所示的主菜單屬性對話框,并在其中的“Caption”編輯框中輸入主菜單的標(biāo)題為“圖形”。這樣在應(yīng)用程序的主框架中就增加了一個主菜單項“圖形”。 3、增加主菜單“圖形”的子菜單項 用鼠標(biāo)

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

8、話框Visual C+Visual C+11 4增加上下文菜單 上 下 文 菜 單 必 須 要 有 自 己 的 資 源 I D , 在Workspace窗口中選擇ResourceView選項卡,打開MenuExam工程的資源列表,鼠標(biāo)右鍵單擊“Menu”項,在彈出菜單中選擇“Insert Menu”,完后將該菜單資源的ID修改為IDR_POPUP_MENU。 用同步驟3的方法在IDR_POPUP_MENU資源中添加主菜單“上下文菜單”。Visual C+Visual C+12 10.1.4 菜單消息菜單消息 菜單被選中時發(fā)送消息給Windows,再由Windows傳送給應(yīng)用程序的消息映射。在M

9、FC消息映映射中,有三個菜單消息:WM_COMMAND、ON_UPDATE_COMMAND_UI和WM_CONTEXTMENU。1WM_COMMAND消息 當(dāng)用戶選中了菜單項,激活了相關(guān)鍵加速器或者是選中了與此菜單項相對應(yīng)的工具欄按鈕,Windows發(fā)送WM_COMMAND消息,該消息又叫命令消息。命令消息的消息映射采用以下形式: ON_COMMAND(MenuId, ClassMethod)2UPDATE_COMMAND_UI消息 UPDATE_COMMAND_UI是MFC所特有的,如果你想根據(jù)應(yīng)用程序的當(dāng)前狀態(tài)激活或者使菜單項無效,或者在程序運行的某一時刻反映菜單項的可用性,該條消息就要處

10、理。消息映射采用以下形式: ON_UPDATE_COMMAND_UI(MenuID, ClassMethod) Visual C+Visual C+133上下文菜單消息WM_CONTEXTMENU 在Windows系統(tǒng)下,隨處可見上下文菜單,只要你是在不同程序的不同操作區(qū)域內(nèi),按下鼠標(biāo)右鍵,都會出來一個與當(dāng)前操作上下文有關(guān)的菜單,它就是上下文菜單。當(dāng)用戶按下 鼠 標(biāo) 右 鍵 時 , 就 會 發(fā) 出 上 下 文 菜 單 消 息WM_CONTEXTMENU。該消息的消息映射宏為: ON_WM_CONTEXTMENU()Visual C+Visual C+14 10.1.5 菜單消息的響應(yīng)菜單消息的

11、響應(yīng) Windows是通過消息傳遞機(jī)制運行的。菜單項 對 命 令 的 激 發(fā) 、 調(diào) 用 是 通 過 發(fā) 送WM_COMMAND消息來實現(xiàn)的。在單文檔和多文檔的應(yīng)用程序中,要考慮消息的路由問題。 命令消息WM_COMMAND可以映射到不同的類中,可以根據(jù)菜單的不同作用進(jìn)行不同的映射。對于通用的菜單,則在框架中映射。About對話框的顯示菜單最好在應(yīng)用程序類中映射。 在使用類向?qū)椴藛蔚拿钕⑦M(jìn)行映射后,ClassWizard自動向程序中插入菜單命令消息映射入口、消息處理函數(shù)的原型說明和空的消息映射函數(shù)體。 Visual C+Visual C+151添加WM_COMMAND菜單命令消息響應(yīng)函數(shù)

12、 (1)打開前面創(chuàng)建的MenuExam工程,選擇View|ClassWizard命令打開類向?qū)υ捒颉?(2)在圖10.5所示的對話中,單擊“ClassName”列表框中的下拉按鈕,在其中選擇“CMenuExamView”項,在“Object IDs”列表框中選擇“ID_GRAPH_PIE”,在“Message”列表中選擇“Command”項,然后單擊“Add Fucntion”按鈕彈出 “Add Member Function”對話框,采用默認(rèn)的函數(shù)名,單擊“OK”按鈕。 (3)用同樣的方法為視圖類CmenuExamView中添加了“弦圖”菜單項的命令消息函數(shù) OnGraphChord()。

13、 (4)消息映射函數(shù)的實現(xiàn) 點擊代碼Visual C+Visual C+162添加UPDATE_COMMAND_UI更新菜單命令用戶接口的消息響應(yīng)函數(shù) (1)打開MenuExam工程,選擇View|ClassWizard命令打開類向?qū)υ捒?,單擊“ClassName”列表框中的下拉按鈕,在其中選擇“CMenuExamView”項,在“Object IDs”列表框中選擇“ I D _ G R A P H _ P I E ” , 在 “ M e s s a g e ” 列 表 中 選 擇“UPDATE_COMMAND_UI”項,然后單擊“Add Fucntion”按鈕彈出“Add Member F

14、unction”對話框,采用默認(rèn)的函數(shù)名OnUpdateGraphPie,單擊“OK”按鈕。 (2)用同樣的方法,在視圖類CmenuExamView中添加了“弦圖”菜單項的更新命令用戶接口的消息函數(shù)OnUpdateGraphChord()。 (3)消息映射函數(shù)的實現(xiàn) “ 餅 圖 ” 菜 單 項 的 更 新 命 令 用 戶 接 口 消 息 函 數(shù)OnUpdateGraphPie的代碼Visual C+Visual C+17 void CMenuExamView:OnUpdateGraphPie(CCmdUI* pCmdUI) pCmdUI-Enable(!m_IsPie); “ 弦 圖 ” 菜

15、單 項 的 更 新 命 令 用 戶 接 口 消 息 函 數(shù)OnUpdateGraphChord的代碼 void CMenuExamView:OnUpdateGraphChord(CCmdUI* pCmdUI) pCmdUI-Enable(m_IsPie); 3添加WM_CONTEXTMENU上下文菜單消息響應(yīng)函數(shù) (1)打開MenuExam工程,選擇View|ClassWizard命令打開類向?qū)υ捒颍瑔螕簟癈lassName”列表框中的下拉按鈕,在其中選擇“CMenuExamView”項,在“Object IDs”列表框中選擇“CMe nuExa mVie w ” ,在“M e s s a

16、g e ” 列表中選擇“WM_CONTEXTMENU”項,然后單擊“Add Fucntion”按鈕彈出“Add Member Function”對話框,采用默認(rèn)函數(shù)名OnContextMenu,單擊“OK”按鈕。Visual C+Visual C+18(2)鼠標(biāo)右鍵單擊響應(yīng)函數(shù))鼠標(biāo)右鍵單擊響應(yīng)函數(shù)OnContextMenu()的實現(xiàn)的實現(xiàn) void CMenuExamView:OnContextMenu(CWnd* pWnd, CPoint point) CMenu PopupMenu; /定義菜單對象PopupMenu.LoadMenu (IDR_POPUP_MENU);PopupMenu

17、.GetSubMenu(0) -TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON, point.x,point.y,this); /彈出上下文菜單 Visual C+Visual C+1910.1.6 為菜單增加快捷鍵和加速鍵為菜單增加快捷鍵和加速鍵 在應(yīng)用程序中,可以為每個菜單項增加快捷鍵和加速鍵。所謂快捷鍵就是當(dāng)包含該菜單項的菜單被打開時,直接按某指定的鍵等同于用鼠標(biāo)單擊該菜單項。所謂加速鍵就是在沒有打開包含該菜單項的菜單時,按組合鍵Ctrl+某指定鍵等價于用鼠標(biāo)單擊該菜單項。1快捷鍵的設(shè)置 打開菜單資源編輯器,雙擊“餅圖”,修改Caption編輯

18、框的標(biāo)題為“餅圖(&P)tCtrl+T”。2加速鍵的設(shè)置(1)在WorkSpace窗口中選擇ResourceView選項卡,單擊Accelerator項前面的“+”號,雙擊展開的列表項中的IDR_MAINFRAME,出現(xiàn)加速鍵資源編輯器。 ( 2 ) 雙擊加速鍵列表項最下面的空白項,單擊ID組合框的下拉按鈕,從下拉列表中選擇ID_GRAPH_PIE,在Key組合框中輸入大寫字母T。Visual C+Visual C+2010.2工具欄工具欄 本節(jié)內(nèi)容本節(jié)內(nèi)容 10.2.1 工具欄簡介 10.2.2 一個使用工具欄的應(yīng)用程序 10.2.3 創(chuàng)建工具欄資源模板 10.2.4 工具欄類CTo

19、olBar 10.2.5 在應(yīng)用程序框架中創(chuàng)建工具欄對象 10.2.6 工具欄的消息處理機(jī)制 Visual C+Visual C+2110.2.1工具欄簡介工具欄簡介 工具欄為用戶提供了程序命令的直接訪問方式,工具欄中包含有一些水平排放的圖形按鈕,當(dāng)用一次鼠標(biāo)單擊它們時就發(fā)送相應(yīng)的命令消息。 從編程角度看,工具欄就是一個子窗口,它顯示一系列位圖按鈕。由于工具欄按鈕一般對應(yīng)著某個菜單選項,因此工具欄的某個按鈕和菜單的某個選項除了創(chuàng)建的方式和在界面的顯示方式不一樣外,對于消息的響應(yīng)都是一樣的。 工具欄和狀態(tài)欄對象一般作為框架窗口類的成員變量聲明,在創(chuàng)建框架窗口時自動創(chuàng)建它們,在銷毀框架窗口時自動銷

20、毀所創(chuàng)建的控件欄對象。使用AppWizard創(chuàng)建了應(yīng)用程序的基本框架后,也就建立了初始的工具欄和狀態(tài)欄對象。Visual C+Visual C+2210.2.2一個使用工具欄的應(yīng)用程序一個使用工具欄的應(yīng)用程序 【例10-2】利用應(yīng)用程序向?qū)FC AppWizard(exe)創(chuàng)建一個單文檔的應(yīng)用程序,實現(xiàn)工具欄的操作。1生成步驟 模仿10.1.1節(jié)中的方法,利用應(yīng)用程序向?qū)FC AppWizard(exe)創(chuàng)建一個單文檔的應(yīng)用程序框架,該工程的名稱為ToolBarExam,所有的步驟都采用缺省的設(shè)置。2程序功能 本程序是一個演示工具欄的單文檔應(yīng)用程序。當(dāng)程序運行后,在工具欄上有自己新設(shè)計的兩

21、個工具條按鈕,單擊一個,可以重新啟動計算機(jī),單擊另一個,可以把當(dāng)前的鼠標(biāo)樣子變成一個動畫圖形。3技術(shù)要點 本程序主要掌握工具欄資源的建立方法,工具欄對命令消息的響應(yīng),熟悉一些API函數(shù)的用法,體會VC對系統(tǒng)的控制。Visual C+Visual C+2310.2.3 創(chuàng)建工具欄資源模板創(chuàng)建工具欄資源模板 工具欄也是一種資源,因此使用工具欄的首要工作是利用VC的可視化的資源編輯器進(jìn)行工具欄資源的創(chuàng)建與保存,下面為創(chuàng)建與編輯工具欄資源的步驟。 1打開剛才創(chuàng)建的工程ToolBarExam。 2在WorkSpace窗口中選擇ResourceView選項卡,單擊ToolBar項前面的“+”號展開工具欄資

22、源項目,系統(tǒng)默認(rèn)的工具欄的ID值為IDR_MAINFRAM。雙擊IDR_MAINFRAM,VC以設(shè)計模式顯示出工具條,注意,若想刪除無用的工具欄按鈕,只需把無用的按鈕脫離工具欄即可。 3我們在工具條最右邊的空白圖標(biāo)中增加兩個新圖標(biāo),雙擊創(chuàng)建好的圖標(biāo),彈出屬性對話框,設(shè)定該兩個工具條按鈕的ID為ID_QUIT_WINDOWS和ID_CARTOON,同時在提示欄Prompt中輸入“重新啟動Windows操作系統(tǒng)n重新啟動”和”裝載動畫鼠標(biāo)圖形n動畫圖標(biāo)”。Visual C+Visual C+2410.2.4 工具欄類工具欄類CToolBar 類CToolBar提供了帶有位圖按鈕和可選分隔符的工具欄

23、,工具欄按鈕有下壓式、復(fù)選框按鈕或單選按鈕。CToolBar對象通常是做為派生類CFrameWnd或CMDIFrameWnd框架窗口的對象成員,利用AppWizard創(chuàng)建應(yīng)用程序框架時,在框架類中已創(chuàng)建了一個CToolBar對象。 MFC的工具欄類CToolBar是創(chuàng)建用來接收某些命令鍵入并向用戶顯示狀態(tài)信息的類,利用它可以立即訪問程序命令。 從編程的角度看,工具欄是一個顯示一系列位圖按鈕的子窗口,一旦創(chuàng)建了工具欄并使其可見,就可以用操作窗口的方法來操作它。工具欄的按鈕和菜單或加速鍵一樣,單擊他們都生成WM_COMMAND消息,并且工具欄的命令I(lǐng)D與菜單或加速鍵的命令I(lǐng)D相同。下面為該類中幾個

24、重要的函數(shù)說明。Visual C+Visual C+25 1Create()函數(shù) Create()函數(shù)用于創(chuàng)建一個Windows工具欄,并將其連接到CToolBar對象上,同時設(shè)置工具條的默認(rèn)高度。該函數(shù)的原型如下: BOOL Create( CWnd* pParentWnd, DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_TOP,UINT nID = AFX_IDW_TOOLBAR ); 2LoadToolBar()函數(shù) 該函數(shù)裝載指定的工具欄資源,它的原型為: BOOLLoadToolBar(LPCTSTR lpszResourceName );

25、 BOOL LoadToolBar( UINT nIDResource );Visual C+Visual C+2610.2.5 在應(yīng)用程序框架中創(chuàng)建在應(yīng)用程序框架中創(chuàng)建工具欄對象工具欄對象 在利用MFC AppWizard生成的單文檔應(yīng)用程序中,工具欄對象的創(chuàng)建是在應(yīng)用程序框架類中,可以說應(yīng)用程序框架類的一個主要功能就是管理工具欄和狀態(tài)欄。 1在框架類CMainFrame類中聲明工具欄對象 打開上一節(jié)所生成的應(yīng)用程序。在WorkSpace窗口中選擇ClasseView選項卡,用鼠標(biāo)雙擊類視圖中的CMainFrame類,程序?qū)⒍ㄎ坏皆擃悓?yīng)的頭文件MainFrm.h中,下面為該類的頭文件中有關(guān)

26、框架類的聲明的內(nèi)容,所有代碼都是自動生成的,請利用上一篇所講的面向?qū)ο罄碚撝R對它進(jìn)行分析。 點擊代碼Visual C+Visual C+27 語句CToolBar m_wndToolBar;代表在框架類中有一個從CToolBar派生的對象_wndToolBar;語句CStatusBar m_wndStatusBar代表在框架類中有一個從狀態(tài)欄類CStatusBar實例化一個狀態(tài)欄對象m_wndStatusBar。2在框架類CMainFrame類的實現(xiàn)文件中初始化工具欄對象 打 開 上 一 節(jié) 所 生 成 的 應(yīng) 用 程 序 。 在WorkSpace窗口中選擇ClasseView選項卡,用鼠標(biāo)

27、單擊類視圖中的CMainFrame類,將該類展開,雙擊框架類的OnCreate成員函數(shù),程序?qū)⒆詣佣ㄎ坏皆擃悓?yīng)的實現(xiàn)文件MainFrm.cpp中的OnCreate的實現(xiàn)處。下面為該類的消息響應(yīng)函數(shù)OnCreate的主要內(nèi)容(WM_CREATE的響應(yīng)函數(shù)),所有代碼都是自動生成的。 點擊代碼Visual C+Visual C+2810.2.6 工具欄的消息處理機(jī)制工具欄的消息處理機(jī)制 若一個工具欄按鈕的資源ID與菜單選項的資源ID一樣時,單擊工具欄按鈕與選擇該菜單發(fā)出的消息都一樣。該命令消息可以像菜單消息一樣進(jìn)行消息的傳遞,因此在菜單一章中講的命令消息的傳遞機(jī)制也同樣適合于工具欄消息。工具欄要

28、處理的兩個主要消息是WM_COMMAND和UPDATE_COMMAND_UI。 和菜單一樣,應(yīng)用程序是通過提供消息映射函數(shù)來處理單擊工具欄按鈕所產(chǎn)生的命令,如果工具欄的某個按鈕沒有消息COMMAND或UPDATE_COMMAND_UI對應(yīng)的處理函數(shù),那么框架自動使該按鈕無效。 下面我們在視圖類中添加對工具欄按鈕ID_QUIT_WINDOWS和ID_CARTOON的消息響應(yīng)函數(shù),添加的方法和對菜單的單擊一樣,參見10.1.5節(jié)的敘述。點擊代碼Visual C+Visual C+2910.3 狀態(tài)欄狀態(tài)欄 本節(jié)內(nèi)容本節(jié)內(nèi)容 10.3.1 狀態(tài)欄簡介 10.3.2 一個使用狀態(tài)欄的應(yīng)用程序 10.3

29、.3 狀態(tài)欄類CStatuslBar 10.3.4 在應(yīng)用程序框架中創(chuàng)建狀態(tài)欄對象 10.3.5 創(chuàng)建字符串資源 10.3.6 狀態(tài)欄的消息處理Visual C+Visual C+30 10.3.1 狀態(tài)欄簡介狀態(tài)欄簡介 狀態(tài)欄是顯示在應(yīng)用程序主窗口底部的的一個多區(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)用程序時,一般自動添加狀態(tài)欄,程序員在編程的過程中只需在原有的狀態(tài)欄

30、的基礎(chǔ)上適當(dāng)修改即可。Visual C+Visual C+3110.3.1狀態(tài)欄狀態(tài)欄 狀態(tài)信息行 狀態(tài)指示器 圖10.10 Word軟件中的狀態(tài)欄 Visual C+Visual C+3210.3.2 一個使用狀態(tài)欄的應(yīng)用程序一個使用狀態(tài)欄的應(yīng)用程序【例10-3】利用應(yīng)用程序向?qū)FC AppWizard(exe)創(chuàng)建一個單文檔的應(yīng)用程序,實現(xiàn)狀態(tài)欄的操作。1程序功能 本程序是在上一節(jié)將的程序基礎(chǔ)上添加一個演示狀態(tài)欄的功能。當(dāng)程序運行后,在狀態(tài)欄的信息提示行上顯示鼠標(biāo)在屏幕上的位置,在狀態(tài)欄指示器的最右端顯示系統(tǒng)的時間。2技術(shù)要點 本程序主要練習(xí)狀態(tài)欄牽涉的字符串資源的的建立方法,狀態(tài)欄對更

31、新命令用戶接口消息的響應(yīng),熟悉自己在類中添加消息映射的方法,熟悉MFC對狀態(tài)欄的支持。 Visual C+Visual C+3310.3.3狀態(tài)欄類狀態(tài)欄類CStatuslBar MFC的CStatusBar類用來實現(xiàn)狀態(tài)欄的功能,CStatusBar類為CControlBar類的派生類,它定義了一個默認(rèn)的構(gòu)造函數(shù)和一個Create()成員函數(shù)。CStatusBar:Create()函數(shù)用于創(chuàng)建一個Windows狀態(tài)欄(子窗口),置初始字體和狀態(tài)欄的高度,該函數(shù)原型為: Bool Create( CWnd* pParentWnd, DWORD dwStyle = WS_CHILD |WS_VI

32、SIBLE|CBRS_BOTTOM,UINT nID = AFX_IDW_STATUS_BAR ); CStatusBar類還提供一系列成員函數(shù)來管理狀態(tài)欄的指示器,主要有: 1SetIndicators()函數(shù) 函數(shù)SetIndicators()用于設(shè)置指示器ID,并裝入由每個ID指定的字符串資源,然后將指示器的文字設(shè)置為該字符串,該函數(shù)的原型為: BOOL SetIndicators( const UINT* lpIDArray, int nIDCount ); Visual C+Visual C+34 2SetPaneInfo()函數(shù) 數(shù)SetPaneInfo()用于設(shè)置給定索引值的指示

33、器ID、風(fēng)格和寬度。它的原型為: void SetPaneInfo( int nIndex, UINT nID, UINT nStyle,int cxWidth ); 該函數(shù)給標(biāo)識符欄設(shè)置一個新的ID、風(fēng)格和寬度。 3SetPaneText()函數(shù) 函數(shù)SetPaneText()用于設(shè)置給定索引值的指示器的文本,它的 原型為: BOOL SetPaneText( int nIndex, LPCTSTR lpszNewText, BOOL bUpdate = TRUE ); 該函數(shù)用lpszNewText所指向的字符串來設(shè)置狀態(tài)欄的文字。Visual C+Visual C+3510.3.4在應(yīng)用

34、程序框架中在應(yīng)用程序框架中 創(chuàng)建狀態(tài)欄對象創(chuàng)建狀態(tài)欄對象 在利用MFC AppWizard生成的單文檔應(yīng)用程序中,狀態(tài)欄對象的創(chuàng)建是在應(yīng)用程序框架類中??梢哉f應(yīng)用程序框架類的一個主要功能就是管理工具欄和狀態(tài)欄的。因此該節(jié)的程序代碼請參照10.3.4節(jié)內(nèi)容。1在框架類CMainFrame類的.h頭文件中聲明狀態(tài)欄對象 在MFC的應(yīng)用程序中,狀態(tài)欄的聲明在在框架類CMainFrame類的頭文件Mainframe.h中。一般情況在,一個狀態(tài)欄聲明為框架窗口的受保護(hù)的CStatusBar成員變量: protected: CStatusBar m_wndStatusBar; 2在框架類CMainFram

35、e類.cpp初始化狀態(tài)欄對象 狀態(tài)欄的創(chuàng)建和初始化工作是由該框架窗口在它的OnCreate()函數(shù)中完成。Mainfrm.cpp中的OnCreate()函數(shù)下Visual C+Visual C+36if(!m_wndStatusBar.Create(this)|!m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT)TRACE0(Failed to create status barn); eturn -1; 上述代碼的主要功能是調(diào)用狀態(tài)欄對象m_wndStatusBar的成員函數(shù).Create()創(chuàng)建該對

36、象,并且調(diào)用狀態(tài)欄類的成員函數(shù)SetIndicators()設(shè)置狀態(tài)欄的提示信息和指示器的信息。 當(dāng)創(chuàng)建應(yīng)用程序的基本框架時,AppWizard會在主邊框窗口類(CMainFram)中創(chuàng)建類似以下的提示符數(shù)組: static UINT indicators = ID_SEPARATOR, / 狀態(tài)行指示器 ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, ;Visual C+Visual C+37 10.3.5 創(chuàng)建字符串資源創(chuàng)建字符串資源 字符串表也是一種Windows的資源。它包含了應(yīng)用程序所有字符串的ID號、ID號的數(shù)值和字符

37、串內(nèi)容。使用字符字符串的好處是有利于將應(yīng)用程序本地化。 要編輯應(yīng)用程序的字符串資源,可激活WorkSpace窗口的ResourceView欄,雙擊String Table進(jìn)入字符串資源編輯器中。在其中插入一個字符串資源ID_INDICATOR_TIME。如圖 Visual C+Visual C+38 添加完字符串資源后,激活WorkSpace窗口的FileView欄,雙擊Source Files文件夾下的mainfrm.cpp,找到數(shù)組indicators的定義,將該字符串資源添加到該數(shù)組中。 static UINT indicators = ID_SEPARATOR, / status li

38、ne indicator ID_INDICATOR_CAPS, /Caps Lock鍵狀態(tài) ID_INDICATOR_NUM, /Num Lock鍵狀態(tài) ID_INDICATOR_SCRL, /Scroll Lock鍵狀態(tài) ID_INDICATOR_TIME /手工添加的顯示時間的字符串資源ID ; Visual C+Visual C+3910.3.6狀態(tài)欄的消息處理狀態(tài)欄的消息處理 本節(jié)的程序主要講解狀態(tài)欄的使用,狀態(tài)欄中的子窗口可以分為狀態(tài)信息行和狀態(tài)指示器,我們按照狀態(tài)信息行的消息處理和狀態(tài)指示器的消息處理來闡述。 1狀態(tài)信息行的消息處理 許多應(yīng)用程序都有這樣的功能(如AutoCAD)當(dāng)

39、鼠標(biāo)在屏幕上移動時,在程序的狀態(tài)欄上顯示鼠標(biāo)的位置,本節(jié)的例子首先要實現(xià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)位置的代碼:Visual C+Visual C+40 在代碼中,使用CWnd的GetDescendantWindow()函數(shù)返回一個指向ID_VIEW_STATUS_BAR狀態(tài)欄的指針,然后使用狀態(tài)欄成員函數(shù)SetPaneText為第0個

40、信息框賦值(注意本程序 只 能 給 一 個 信 息 框 賦 值 , 調(diào) 用 成 員 函 數(shù)SetPaneStyle(0,SBPS_POPOUT)將該信息提示框設(shè)置成凸起風(fēng)格。2狀態(tài)指示器的消息處理 狀態(tài)指示 器總是與一個字符串資源連接的(10.3.5節(jié)創(chuàng)建的ID_INDICATOR_TIME),該字符串是否被顯示完全取決于相應(yīng)更新命令用戶接口消息映射函數(shù)。指示器是由一個字符串資源ID來標(biāo)識的,該ID也被用來傳遞更新命令用戶接口消息,因此狀態(tài)指示器的消息處理主要指對UPDATE_COMMAND_UI消息的映射處理。Visual C+Visual C+41(1)聲明消息映射函數(shù) 在框架類的頭文件Mainfrm.h中,找到該類的所有消息映射函數(shù)原型的 說 明 , 增 加 I D _ I N D I C AT O R _ T I M E 字 符 串 資 源 I D 對UPDATE_COMMAND_UI消息的映射函數(shù)OnUpdateTime()原型聲明,添加后的代碼如下: protected:/AFX_MSG(CMainFrame)afx_msg int

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論