第菜單和框架窗口_第1頁
第菜單和框架窗口_第2頁
第菜單和框架窗口_第3頁
第菜單和框架窗口_第4頁
第菜單和框架窗口_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

會(huì)計(jì)學(xué)1第菜單和框架窗口9.2Windows菜單和MFC菜單編輯器菜單是Windows程序設(shè)計(jì)中一項(xiàng)重要的界面元素。通常,開發(fā)者可以為主窗口定義一個(gè)默認(rèn)的菜單資源,當(dāng)應(yīng)用程序創(chuàng)建窗口時(shí),該默認(rèn)的菜單會(huì)被自動(dòng)裝入。也可以定義一個(gè)與窗口無關(guān)的菜單資源,當(dāng)調(diào)用一些消息函數(shù)時(shí),可以自動(dòng)調(diào)入,如鼠標(biāo)右鍵的浮動(dòng)菜單。菜單資源的設(shè)計(jì)定義了菜單的初始形態(tài)。菜單可以為不可選擇狀態(tài)(灰色),也可以有復(fù)選框標(biāo)記,菜單之間可以使用“組”的概念,為了直觀,不同的“組”可以由分割線來分割,也可以有多層彈出式菜單。如圖所示,該圖所示就是一個(gè)Windows應(yīng)用程序的菜單。Windows應(yīng)用程序菜單

第1頁/共23頁9.3Windows應(yīng)用程序的快捷鍵一般而言,除非是娛樂性地使用軟件,如電子游戲、音頻視頻點(diǎn)播,大多數(shù)應(yīng)用程序應(yīng)用使用鍵盤的頻率都大于使用鼠標(biāo),如文檔錄入,報(bào)表管理等,鍵盤加速鍵可以讓工作者始終都使用鍵盤,而不用反復(fù)在鍵盤和鼠標(biāo)之間進(jìn)行切換而浪費(fèi)使用應(yīng)用軟件的文職工作者的時(shí)間鍵盤加速鍵的編輯是在資源編輯框中的鍵盤加速鍵資源中,如圖所示。鍵盤加速鍵資源編輯器

第2頁/共23頁9.4命令處理的使用Windows應(yīng)用程序設(shè)計(jì)是基于消息處理的,Windows操作系統(tǒng)管理著一個(gè)消息隊(duì)列,這個(gè)消息隊(duì)列根據(jù)各種加權(quán)因子確定排隊(duì)次序,各種加權(quán)因子是:等待時(shí)間。消息優(yōu)先級(jí)別。是否有特殊優(yōu)先權(quán)限。而MFC應(yīng)用程序框架中,大多數(shù)命令消息都來自于應(yīng)用程序框架,但應(yīng)用程序框架并沒有對(duì)這些消息進(jìn)行處理,因此開發(fā)者要自主添加消息處理函數(shù)并且在消息處理函數(shù)的實(shí)現(xiàn)方面做一些工作。這樣是不是說明MFC沒有對(duì)消息處理做貢獻(xiàn)呢?不對(duì),MFC對(duì)消息處理函數(shù)做的貢獻(xiàn)主要在于有一個(gè)命令傳遞系統(tǒng),通過這個(gè)復(fù)雜的命令傳遞系統(tǒng),一方面減少了開發(fā)者梳理這些煩雜的消息的開發(fā)工作量,另一方面,也幾乎可以在程序中的任何地方對(duì)消息進(jìn)行控制。第3頁/共23頁9.5復(fù)文本編輯Windows有兩種文本編輯控件:普通的編輯控件和復(fù)文本編輯通用控件。MFC提供了CEditView類和CRichEditView類,以支持復(fù)文本的功能。第4頁/共23頁9.5.1編輯視圖類:CEditView類CEditView類是基于Windows的編輯控件,因此它具有所有編輯控件的特性,編輯控件的一般特點(diǎn)如下:文本不能超過64KB。不能設(shè)置混合字體。實(shí)現(xiàn)了剪貼板的剪切、復(fù)制和粘貼功能。第5頁/共23頁9.5.2復(fù)文本編輯視圖類:CRichEditView類CRichEditView類是復(fù)文本編輯控件所使用的類,它的特點(diǎn)是:支持大數(shù)量的文本數(shù)據(jù)。支持多種混合字體。具有普通編輯控件的一般性特點(diǎn)。第6頁/共23頁9.5.3復(fù)文本編輯控件類:CRichEditCtrl類CRichEditCtrl類是一個(gè)復(fù)文本控件類,開發(fā)者可以使用該控件類來進(jìn)行開發(fā)一個(gè)功能簡(jiǎn)單的文本編輯器。該控件常用的函數(shù)有:Create():創(chuàng)建復(fù)文本編輯控件的無模式對(duì)話框窗口。SetWindowPos():設(shè)置編輯窗口的大小和位置。GetWindowText():獲取控件的文本(純文本,不帶格式)。SetWindowText():設(shè)置控件的文本。GetModify():獲得一個(gè)標(biāo)記,判斷是否被修改。SetModify():設(shè)置修改標(biāo)記。GetSel():獲取用戶是否選取了文本的標(biāo)記。SetDefaultCharFormat():設(shè)置控件的默認(rèn)格式。SetSelectionCharFormat():設(shè)置選中的文本的格式。第7頁/共23頁9.6實(shí)例7.1-快捷鍵和文本編輯使用本節(jié)的實(shí)例是快捷鍵和復(fù)文本編輯控件的使用,讀者在進(jìn)行實(shí)例練習(xí)時(shí),可以學(xué)習(xí)到菜單和減速見時(shí)如何被傳遞到文本和視圖中的。第8頁/共23頁9.6.1基本框架和界面實(shí)現(xiàn)實(shí)例創(chuàng)建步驟如下:(1)單擊“File”菜單,選中“New”命令,新建VC項(xiàng)目。(2)創(chuàng)建MFC應(yīng)用程序項(xiàng)目,并命名為“ExEdit”。(3)創(chuàng)建“單文檔”的MFC應(yīng)用程序項(xiàng)目,應(yīng)用程序向?qū)У钠溆噙x項(xiàng)默認(rèn),單擊“Finish”按鈕完成應(yīng)用程序向?qū)Р⑸蓱?yīng)用程序框架。(4)新增菜單項(xiàng),并將菜單項(xiàng)命名為如表所示。(5)創(chuàng)建“更改字體”菜單項(xiàng)的彈出選項(xiàng)卡對(duì)話框。菜單命名和作用菜單名稱ID作用更改字體ID_ZITI更改字體、顏色和大小等屬性獲取文本ID_HUOQU獲取內(nèi)存中的文本存儲(chǔ)文本ID_STORE存儲(chǔ)當(dāng)前控件的文本第9頁/共23頁9.6.2快捷鍵設(shè)計(jì)設(shè)置快捷鍵也是軟件開發(fā)項(xiàng)目中的重要工作??旖萱I添加列表

第10頁/共23頁9.6.3存儲(chǔ)和顯示文檔類中的文本為菜單項(xiàng)添加命令消息函數(shù),如表所示。添加命令消息函數(shù)ID消息成員函數(shù)ID_HUOQUCOMMANDOnHuoqu()ID_STORECOMMANDOnStore()ID_STOREUPDATE_COMMAND_UIOnUpdateStore()第11頁/共23頁9.6.4選項(xiàng)卡對(duì)話框的設(shè)計(jì)本小節(jié)是介紹選項(xiàng)卡菜單的制作。(1)應(yīng)該為IDD_DIALOG1對(duì)話框創(chuàng)建類,單擊“Insert”菜單,選中“NewClass”選項(xiàng),在彈出的對(duì)話框中新建一個(gè)與IDD_DIALOG1關(guān)聯(lián)的C++類,如圖所示。(2)將這些類連接起來,合并成為一個(gè)選項(xiàng)卡頁。

創(chuàng)建與IDD_DIALOG1對(duì)話框關(guān)聯(lián)的類 字體屬性選項(xiàng)卡對(duì)話框效果圖

第12頁/共23頁9.6.5視圖類的功能實(shí)現(xiàn)編寫視圖類的代碼,使之完成顯示復(fù)文本控件的功能。(1)應(yīng)該在視圖類定義中添加一個(gè)文本字符串的格式化函數(shù)聲明:voidFormat(CHARFORMAT&cf);。(2)創(chuàng)建一個(gè)視圖類的消息處理函數(shù),(3)為視圖添加一個(gè)父類的指針,在“Page1.cpp”文件中,定義一個(gè)全局的指針:CView*g_pView;(4)在視圖類中添加相應(yīng)的WM_USERAPPLY消息處理函數(shù),在“ExEditView.h”文件中,視圖類定義中添加公有的消息函數(shù)定義如下:afx_msgLRESULTOnUserApply(WPARAMwParam,LPARAMlParam);并在“ExEditView.cpp”源文件中,安裝消息映射:ON_MESSAGE(WM_USERAPPLY,OnUserApply)第13頁/共23頁9.6.6運(yùn)行效果和實(shí)踐小結(jié)按F5鍵編譯并運(yùn)行該項(xiàng)目,并且單擊“轉(zhuǎn)換”菜單,選中“獲取文本”選項(xiàng),可以得到如圖所示的運(yùn)行效果。讀者可以增加控件中的文字,并嘗試使用“轉(zhuǎn)換”菜單中的“存儲(chǔ)文字”選項(xiàng),測(cè)試一下存儲(chǔ)功能,存儲(chǔ)之后,刪除控件中的文本,使用“獲取文本”選項(xiàng)看看顯示的內(nèi)容。讀者也可以嘗試測(cè)試一下字體的變化的功能,先輸入若干行的文字,然后選中其中一行,再單擊“編輯”,選中“更改字體”選項(xiàng),修改文字的屬性為:斜體+下劃線、紅色顏色,字體大小為20。執(zhí)行效果如圖所示。

運(yùn)行效果圖 字體屬性更改的運(yùn)行效果

第14頁/共23頁9.7屬性表的開發(fā)過程屬性表這個(gè)概念對(duì)讀者來說并不陌生,它允許開發(fā)者或用戶在一個(gè)小的對(duì)話框里面設(shè)置很多分類的信息,這些分類信息可以以列表的形式展現(xiàn),也可以通過選項(xiàng)卡的方式來讓用戶選擇。在前文中其實(shí)已經(jīng)開發(fā)了一個(gè)屬性表,這個(gè)就是選項(xiàng)卡對(duì)話框,因此,選項(xiàng)卡對(duì)話框形式的屬性表創(chuàng)建過程的步驟一般是:(1)創(chuàng)建若干個(gè)對(duì)話框,用于制作選項(xiàng)卡的子對(duì)話框。雖然對(duì)話框的大小沒有限制,不過為了方便起見,最好在尺寸上不要差別太大。(2)使用ClassWizard為每個(gè)對(duì)話框生成一個(gè)類,這些類可以取類似的名字以表示這些子對(duì)話框相互之間的關(guān)系,并且,這些類的基類都是CPropertyPage類。(3)生成CPropertySheet類的派生類,并將子對(duì)話框類的對(duì)象添加到該類中。(4)使用Domal()函數(shù)生成屬性表的對(duì)話框。(5)添加Apply按鈕的消息處理函數(shù)。第15頁/共23頁9.8鼠標(biāo)右鍵調(diào)用的浮動(dòng)快捷菜單到目前為止,CMenu類是讀者沒有見過的一個(gè)類,通過理解該類名的中文意義,容易知道該類是一個(gè)菜單類。該類的對(duì)象可以用來表示各種各樣的Windows菜單,其中Windows菜單主要包括兩類:頂層菜單:該菜單就是主框架窗口的頂級(jí)菜單,這個(gè)是前文常見的一種菜單。彈出式菜單:這個(gè)前文雖然沒有提及,不過相信讀者在使用各種應(yīng)用軟件時(shí),都使用過彈出菜單,如鼠標(biāo)右鍵彈出的菜單列表。第16頁/共23頁9.9CPersistentFrame持續(xù)信息類的使用C++是在C的基礎(chǔ)上發(fā)展起來的,主要目的就是為了實(shí)現(xiàn)“帶類的C”,也就是為了定義一套可以進(jìn)行面向?qū)ο笤O(shè)計(jì)和研發(fā)的高級(jí)程序設(shè)計(jì)語言。因此,C++的一項(xiàng)重要任務(wù)是開發(fā)一些能夠復(fù)用的“軟件模塊”,使軟件程序設(shè)計(jì)的工作也可以變得像硬件研發(fā)一樣,基于模塊的、可復(fù)用的工程項(xiàng)目。這種復(fù)用是完全沒有問題的,如C++自帶了STL、還有使用在網(wǎng)絡(luò)編程方面的C++ACE庫等。而狀態(tài)的復(fù)用確實(shí)有些困難的,如常使用Windows操作系統(tǒng)的讀者可能會(huì)發(fā)現(xiàn)一個(gè)現(xiàn)象:有些應(yīng)用程序似乎能夠記住它們是否倍最小化到任務(wù)欄、或者最大化了,或者是非最小化也非最大化,這些狀態(tài),即使關(guān)閉了這個(gè)應(yīng)用程序,下次打開依然會(huì)“記得”。第17頁/共23頁9.10使用ActivateFrame()成員函數(shù)設(shè)置窗口尺寸和位置在一個(gè)MFC的單文檔應(yīng)用程序中,主框架窗口是視圖窗口的“父窗口”,父窗口的創(chuàng)建是先于子窗口的,改變框架窗口尺寸的關(guān)鍵在于CFrameWnd類的ActivateFrame成員函數(shù)。如果使用對(duì)派生類中的ActivateFrame成員函數(shù)進(jìn)行重載,開發(fā)者就可以調(diào)用CWnd::SetWindowPlacement函數(shù)來設(shè)置框架窗口的位置和尺寸,也可以設(shè)置控制欄的可視狀態(tài),而這些工作都是在框架窗口被顯示之前完成的。第18頁/共23頁9.11創(chuàng)建窗口之前的工作:PreCreateWindow成員函數(shù)PreCreateWindow成員函數(shù)視在CWnd類層次上聲明的,這個(gè)函數(shù)是提供給開發(fā)者在窗口顯示之前可以重寫的一個(gè)虛擬函數(shù),而應(yīng)用程序框架在調(diào)用ActivateFrame成員函數(shù)函數(shù)之前必須調(diào)用PreCreateWindow成員函數(shù)。該函數(shù)有一個(gè)CREATESTRUCT結(jié)構(gòu)作為參數(shù),該結(jié)構(gòu)有兩個(gè)數(shù)據(jù)成員:style:風(fēng)格,如決定窗口是否有邊界、是否具有滾動(dòng)條和是否具有最小化框等。dwExStyle:擴(kuò)展的風(fēng)格,一些擴(kuò)展的風(fēng)格,如視圖總在最前面等。第19頁/共23頁9.12控制欄狀態(tài)和Windows注冊(cè)表在Win16年代,存儲(chǔ)軟件狀態(tài)信息一般是使用INI文件,而現(xiàn)在普遍都使用了Win32系統(tǒng),INI文件還是在使用的,只是微軟公司建議開發(fā)者少使用INI文件而應(yīng)該多使用Windows注冊(cè)表。Windows注冊(cè)表實(shí)際就是一組系統(tǒng)文件,是一種層次數(shù)據(jù)庫,由Windows操作系統(tǒng)管理,讓W(xué)indows系統(tǒng)和其他應(yīng)用軟件可以在注冊(cè)表中保存一些永久信息。MFC庫提供了兩個(gè)CFrameWnd成員函數(shù):SaveBarState():存儲(chǔ)狀態(tài)欄信息。LoadBarState():加載狀態(tài)欄信息。以上的兩個(gè)函數(shù)可以處理應(yīng)用程序的狀態(tài)欄和貼邊工具欄的大小和位置。第20頁/共23頁9.13MDI應(yīng)用程序和持續(xù)框架本章所講述的CPersistentFrame類并不適用于MDI(多文檔)應(yīng)用程序,因?yàn)镸DI主框架窗口中的ShowWindow函數(shù)是由應(yīng)用程序類的InitInstance成員函數(shù)來調(diào)用,而沒有用

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論