《Visual C++ 6.0程序設(shè)計(jì)》課件第6章_第1頁(yè)
《Visual C++ 6.0程序設(shè)計(jì)》課件第6章_第2頁(yè)
《Visual C++ 6.0程序設(shè)計(jì)》課件第6章_第3頁(yè)
《Visual C++ 6.0程序設(shè)計(jì)》課件第6章_第4頁(yè)
《Visual C++ 6.0程序設(shè)計(jì)》課件第6章_第5頁(yè)
已閱讀5頁(yè),還剩73頁(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)介

第6章非客戶區(qū)界面設(shè)計(jì)6.1菜單6.2工具欄6.3狀態(tài)欄思考題

6.1菜單

6.1.1菜單簡(jiǎn)介

幾乎所用的Windows應(yīng)用程序都使用菜單。菜單為用戶提供了操作應(yīng)用程序需要的命令,為用戶應(yīng)用程序中可操作命令的集合。菜單中的各個(gè)菜單項(xiàng)可以顯示單擊鼠標(biāo)而產(chǎn)生的命令消息,從而提供一種用戶對(duì)程序控制的方式。

菜單分為兩類:一類是依附于框架窗口的一般菜單,包括主菜單和子菜單。主菜單是最高層的菜單,子菜單是從主菜單下拉出的菜單,無(wú)論主菜單和子菜單,其位置都是固定的;另一類是彈出式菜單,也稱為快捷菜單,為單擊鼠標(biāo)右鍵后,在光標(biāo)所在位置出現(xiàn)的浮動(dòng)式菜單。菜單是Windows中的重要資源,它是一系列選項(xiàng)的列表,可以選中選項(xiàng)并產(chǎn)生一條消息傳遞給窗口。每個(gè)選項(xiàng)都有惟一的ID號(hào),應(yīng)用程序加載菜單資源時(shí),用其ID號(hào)作為標(biāo)識(shí)。

大多數(shù)MFC應(yīng)用程序中,菜單與主框架窗口關(guān)聯(lián)。選中某一菜單項(xiàng),系統(tǒng)將向主框架窗口傳遞WM_COMMAND消息。該消息按照下列順序傳遞給應(yīng)用程序中的命令目標(biāo)對(duì)象:

●CmainFrame對(duì)象

●MDI主框架窗口

●MDI主框架窗口中的活動(dòng)子框架窗口

●與MDI子框架窗口關(guān)聯(lián)的視對(duì)象

●與活動(dòng)視關(guān)聯(lián)的文檔對(duì)象

●與文檔對(duì)象關(guān)聯(lián)的文檔模板

●CwinApp對(duì)象6.1.2CMenu類介紹

CMenu類是MFC專門為菜單設(shè)計(jì)的類,用于管理應(yīng)用程序窗口中的菜單。一般情況下不需要?jiǎng)?chuàng)建CMenu類對(duì)象,但如果希望在程序運(yùn)行中動(dòng)態(tài)地修改菜單(包括頂層菜單及其子菜單項(xiàng)),則可利用CWnd::GetMenu實(shí)現(xiàn)。該函數(shù)返回指向當(dāng)前窗口菜單的臨時(shí)指針,通過(guò)該窗口菜單指針,可以調(diào)用Cmenu類的相關(guān)成員函數(shù)替換、修改、刪除。

Cmenu類的成員函數(shù)如表6-1所示。表6-1CMenu類屬性列表6.1.3菜單的操作

1.創(chuàng)建新菜單

(1)建立一個(gè)新的工程后,雙擊中的

,在右邊的編輯區(qū)中顯示應(yīng)用程序向?qū)Ы⒌牟藛钨Y源,如圖6-1所示。

(2)單擊空白虛框,輸入主菜單標(biāo)題,菜單欄中會(huì)出現(xiàn)相應(yīng)名稱的菜單項(xiàng),如圖6-2所示。

(3)在主菜單下拉菜單中的空白虛框處可以按照(2)繼續(xù)添加子菜單項(xiàng),并為新的子菜單項(xiàng)添加ID號(hào),便于后續(xù)消息處理函數(shù)的添加識(shí)別。圖6-1Menu文件夾及菜單編輯工作區(qū)圖6-2菜單項(xiàng)屬性對(duì)話框

2.添加消息處理函數(shù)

添加新的菜單資源后,應(yīng)該添加消息處理函數(shù)處理新菜單命令。其步驟如下:

(1)打開(kāi)ClassWizard。

(2)選中MessageMaps標(biāo)簽,從Classname組合框中選擇處理該菜單消息的類。

(3)在ObjectIds類表中選擇產(chǎn)生消息的對(duì)象,即菜單的ID號(hào)。即是在Messages列表框中自動(dòng)顯示該菜單命令可能產(chǎn)生的所有消息。對(duì)菜單命令來(lái)說(shuō),只有兩個(gè)消息:COMMAND和UPDATE_COMMAND_UI,如圖6-3所示。

(4)在Messages列表框中選擇消息,然后單擊“AddFunction…”按鈕,增加消息處理函數(shù)。一般都是用ClassWizard提供的缺省函數(shù)名。

(5)單擊“確定”按鈕,關(guān)閉ClassWizard對(duì)話框,添加消息處理函數(shù)。圖6-3為菜單項(xiàng)添加消息

3.刪除菜單項(xiàng)

實(shí)際的應(yīng)用程序中,AppWizard生成的菜單項(xiàng)有時(shí)是多余的,比如“查看”菜單項(xiàng),在商務(wù)信息系統(tǒng)、工業(yè)生產(chǎn)控制系統(tǒng)中,該項(xiàng)功能幾乎不會(huì)用到??紤]到實(shí)際應(yīng)用的需要,VisualC++中的菜單項(xiàng)允許用戶進(jìn)行刪除。

刪除菜單項(xiàng)的方法很簡(jiǎn)單,類似于Windows下的刪除操作:

(1)選中要?jiǎng)h除的菜單項(xiàng)(無(wú)論是主菜單還是下拉子菜單),單擊鼠標(biāo)左鍵。

(2)點(diǎn)擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“剪切”即可;也可以選中要?jiǎng)h除的菜單項(xiàng)后,直接按下鍵盤“Delete”鍵,將菜單項(xiàng)刪除。

4.創(chuàng)建快捷菜單

右鍵點(diǎn)擊打開(kāi)的菜單就是快捷菜單,快捷菜單多用于提供常用的操作命令,一般與已經(jīng)建立的諸多菜單項(xiàng)關(guān)聯(lián)。

創(chuàng)建快捷菜單一般采用動(dòng)態(tài)方法,其步驟如下:

(1)為CmainFrame添加名為WM_CONTEXTMENU的消息。

(2)利用CMenu類成員函數(shù)CreateMenu創(chuàng)建空的彈出式菜單。

(3)調(diào)用函數(shù)AppendMenu在菜單中添加菜單項(xiàng)。6.1.4菜單操作實(shí)例

1.添加新菜單項(xiàng)

【例6-1】

編寫一個(gè)menu程序,為程序生成一個(gè)名為“顯示”的主菜單,其子菜單包括“激活”和“禁止”兩項(xiàng)。

操作步驟如下:

(1)創(chuàng)建應(yīng)用程序——利用AppWizard向?qū)?,?chuàng)建SDI應(yīng)用程序chap6_1。

(2)在項(xiàng)目工作區(qū)選項(xiàng)卡中,雙擊文件夾展開(kāi),再雙擊,在右邊的編輯區(qū)中顯示應(yīng)用程序向?qū)Ы⒌牟藛钨Y源,如圖6-4所示。圖6-4Menu文件夾及菜單編輯工作區(qū)這里,灰色虛框?yàn)樾陆ú藛雾?xiàng)位置,用鼠標(biāo)選中并拖拽可將新菜單項(xiàng)放到相應(yīng)位置。

(3)單擊空白虛框,輸入主菜單標(biāo)題“顯示”,如圖6-5所示,可以看到在菜單欄中出現(xiàn)了名為“顯示”的菜單項(xiàng)。

這里字符“&S”表示該菜單的快捷方式為Alt+S,并在快捷鍵“S”下添加下劃線。

菜單屬性說(shuō)明如表6-2所示。圖6-5菜單項(xiàng)屬性對(duì)話框表6-2MenuItemProperties屬性說(shuō)明

(4)選中新的空白虛框,輸入“顯示”,在復(fù)選框中選中“彈出”,表示此菜單項(xiàng)并非最底層菜單選項(xiàng),如圖6-6所示。

菜單欄如圖6-7所示。

(5)選中新的空白虛框,輸入“顯示系統(tǒng)時(shí)間”,如圖6-8所示。

(6)在“顯示”菜單項(xiàng)下,添加“分隔符”,選中屬性中“分隔符”復(fù)選框,方法如圖6-9所示。圖6-6菜單屬性對(duì)話框圖6-7添加子菜單后菜單顯示圖6-8菜單屬性對(duì)話框圖6-9菜單屬性對(duì)話框

(7)在“分隔符”菜單項(xiàng)下添加“禁止”菜單項(xiàng),快捷鍵為“Alt+P”,提示為“禁止菜單功能”。

(8)在“禁止”菜單項(xiàng)下增加“激活”菜單項(xiàng),快捷鍵為“Alt+A”,提示為“激活菜單功能”。

請(qǐng)注意,在菜單中用鼠標(biāo)左鍵雙擊新添加的子菜單項(xiàng),在彈出的屬性窗口中的ID號(hào)為系統(tǒng)自動(dòng)分配的ID號(hào),為了便于尋找可將其修改為便于記憶的ID號(hào)。

系統(tǒng)自動(dòng)分配的ID號(hào)如表6-3所示。

(9)運(yùn)行該程序,可見(jiàn)應(yīng)用程序菜單如圖6-10所示。

需要注意的是,這里所有子菜單選項(xiàng)均為灰色,即無(wú)效狀態(tài)。要想對(duì)應(yīng)的子菜單處于有效狀態(tài),就要為相應(yīng)的菜單項(xiàng)添加消息處理函數(shù),即具體的操作功能。圖6-10建立菜單運(yùn)行結(jié)果

2.刪除菜單項(xiàng)

【例6-2】

刪除例6-1的“查看”菜單項(xiàng)。

操作步驟如下:

(1)打開(kāi)例6-1的工程文件。

(2)在項(xiàng)目工作區(qū)選項(xiàng)卡中,雙擊文件夾

展開(kāi),再雙擊。

(3)在右邊的編輯區(qū)中,選中“查看”主菜單,按下鍵盤上“Delete”鍵。

(4)系統(tǒng)彈出如下對(duì)話框,提示該操作將刪除主菜單包含的下拉子菜單及其命令行,如圖6-11所示。圖6-11刪除“查看”菜單項(xiàng)彈出對(duì)話框

(5)單擊“確定”按鈕,即可看見(jiàn)菜單欄中相關(guān)信息全部消失。

(6)運(yùn)行該程序,“查看”主菜單被刪除,結(jié)果如圖6-12所示。圖6-12刪除菜單項(xiàng)運(yùn)行結(jié)果

3.添加菜單消息處理函數(shù)

菜單是用戶操作命令的集合,在可視化編程中,點(diǎn)擊鼠標(biāo)就意味著向Windows發(fā)送消息。對(duì)菜單的操作也應(yīng)該添加相應(yīng)的消息處理函數(shù)。

上例的程序運(yùn)行中,用戶自定義的菜單項(xiàng)“顯示系統(tǒng)時(shí)間”為灰色,表示該項(xiàng)無(wú)效。要使菜單項(xiàng)有效,則必須為其添加相應(yīng)的消息處理函數(shù)。

【例6-3】

為例6-1添加命令處理函數(shù)。功能為選擇“激活”菜單項(xiàng),子菜單項(xiàng)“顯示系統(tǒng)時(shí)間”為激活狀態(tài),選擇“禁止”菜單項(xiàng),“顯示”菜單項(xiàng)中對(duì)應(yīng)子菜單項(xiàng)“顯示系統(tǒng)時(shí)間”為禁止(灰色)狀態(tài)。操作步驟如下:

(1)打開(kāi)chap6_1的工程文件。

(2)在項(xiàng)目區(qū)中選中ClassView,選中,選中“CChap6_1Doc”,用鼠標(biāo)右鍵單擊,在彈出快捷菜單中選擇“AddMemberVariable”項(xiàng)彈出“AddMemberVariable”對(duì)話框,添加一類型為“BOOL”,名稱為“status”,訪問(wèn)權(quán)限為“Protected”的變量,用來(lái)識(shí)別“禁止”和“激活”狀態(tài)的按下情況。操作如圖6-13所示。圖6-13添加成員函數(shù)對(duì)話框需要指出的是,這里變量的訪問(wèn)權(quán)限為“Protected”是因?yàn)樵L問(wèn)權(quán)限設(shè)置為在CChap6_1Doc中可見(jiàn)。status代表用戶選中菜單項(xiàng)的標(biāo)識(shí)。status=true代表選擇了“激活”;status=false代表選擇了“禁止”。

(3)在項(xiàng)目區(qū)中,單擊前的符號(hào),在最底部可以看到,系統(tǒng)已經(jīng)自動(dòng)添加了一個(gè)保護(hù)型成員變量。

(4)選擇編輯窗口菜單欄項(xiàng),在下拉菜單中選擇

子項(xiàng),彈出“MFCClassWizard”對(duì)話框。

(5)選擇Classname項(xiàng),在右邊的下拉菜單中,選中CChap6_1Doc,對(duì)不同的對(duì)象添加消息函數(shù),如表6-4所示。(6)為添加消息處理函數(shù)。

voidCChap6_1Doc::OnPrevent()

{

//TODO:Addyourcommandhandlercodehere

status=false;//選中"禁止",status值為false

UpdateAllViews(NULL);//通知所有的視圖文檔的改變

}

(7)添加消息處理函數(shù)。

voidCChap6_1Doc::OnActive()

{

//TODO:Addyourcommandhandlercodehere

status=true;//選中"激活",status值為true

UpdateAllViews(NULL);//通知所有的視圖文檔的改變

}(8)為添加消息處理函數(shù)。

voidCChap6_1Doc::OnUpdateShowtime(CCmdUI*pCmdUI)

{

//TODO:AddyourcommandupdateUIhandlercodehere

if(status==1)

pCmdUI->Enable(TRUE);

//如果選擇"激活"菜單項(xiàng),"顯示系統(tǒng)時(shí)間"菜單項(xiàng)可見(jiàn)

else

pCmdUI->Enable(FALSE);

//如果選擇"禁止"菜單項(xiàng),"顯示系統(tǒng)時(shí)間"菜單項(xiàng)不可見(jiàn)

}

(9)使用快捷鍵“Ctrl+F5”,運(yùn)行程序,可以看到:選擇“禁止”菜單項(xiàng),“顯示系統(tǒng)時(shí)間”菜單項(xiàng)為灰色禁用狀態(tài);選擇“激活”菜單項(xiàng),“顯示系統(tǒng)時(shí)間”菜單項(xiàng)為黑色激活狀態(tài)。

4.創(chuàng)建彈出式菜單

【例6-4】

為例6-3添加快捷菜單。鼠標(biāo)右鍵單擊客戶區(qū),在鼠標(biāo)當(dāng)前位置顯示快捷菜單。

操作步驟如下:

(1)打開(kāi)chap6_3的工程文件。

(2)在菜單欄中,單擊菜單,在下拉菜單中選擇

子項(xiàng)。

(3)彈出“MFCClassWizard”對(duì)話框。

(4)在“Classname”中選擇“CMainFrame”;在“ObjectIds”中選擇“CMainFrame”;在“Messages”中選擇WM_CONTEXTMENU,雙擊,在“Memberfunctions”中出現(xiàn)“OnContextMenuON_WM_CONTEXTMEU”成員函數(shù)。

(5)為添加消息函數(shù)。

voidCMainFrame::OnContextMenu(CWnd*pWnd,CPointpoint)

{

//TODO:Addyourmessagehandlercodehere

CMenum_popmenu;//建立菜單類對(duì)象m_popmenu

if(m_popmenu.CreatePopupMenu())//創(chuàng)建彈出菜單

{

m_popmenu.AppendMenu(MF_STRING,ID_SHOWTIME,“

顯示(&S)");

//給對(duì)應(yīng)的ID添加彈出菜單項(xiàng)

m_popmenu.AppendMenu(MF_STRING,ID_PREVENT,“禁止(&P)”);

m_popmenu.AppendMenu(MF_STRING,ID_ACTIVE,“激活(&A)”);

}

m_popmenu.TrackPopupMenu(TPM_RIGHTBUTTON,point.x,point.y,this);

//跟蹤方式確定為鼠標(biāo)右鍵單擊位置

}

這里,使用成員函數(shù)CMenu::TrackPopupMenu在指定位置顯示彈出菜單,并跟蹤用戶選擇的菜單項(xiàng)。其函數(shù)原型為:

BOOLTrackPopupMenu(UNITnFlags,intx,inty,CWnd*pWnd,LPCRECTlpRect=0);

形式參數(shù)說(shuō)明:

①nFlages表示彈出菜單的顯示位置,其可選的參數(shù)如表6-5所示。②x,y值代表菜單的水平坐標(biāo)和菜單頂端的垂直坐標(biāo)。

③pWnd表示彈出菜單的窗口,如為當(dāng)前窗口,該參數(shù)為this。

④lpRect是一個(gè)RECT結(jié)構(gòu)或CRect類的對(duì)象指針。它表示一個(gè)矩形區(qū)域,用戶單擊這個(gè)區(qū)域時(shí),彈出菜單不消失;而當(dāng)lpRect為NULL時(shí),單擊菜單區(qū)域外,菜單會(huì)立即消失。

(6)運(yùn)行程序,在客戶區(qū)任意位置單擊鼠標(biāo)右鍵則出現(xiàn)彈出式菜單,選擇相應(yīng)菜單項(xiàng)即可獲得對(duì)應(yīng)的圖形輸出,如圖6-14所示。圖6-14添加彈出式菜單運(yùn)行結(jié)果在程序的運(yùn)行中,可以看到,當(dāng)選中“禁止”彈出菜單項(xiàng)后,菜單欄“顯示/顯示/顯示系統(tǒng)時(shí)間”菜單項(xiàng)變灰;當(dāng)選中“激活”彈出菜單項(xiàng)后,菜單欄“顯示/顯示/顯示系統(tǒng)時(shí)間”菜單項(xiàng)變黑。整個(gè)添加彈出菜單的過(guò)程中并未對(duì)任何成員函數(shù)進(jìn)行修改,這是為什么呢?原因?yàn)?,此例操作的?5)步中,AppendMenu函數(shù)將彈出快捷菜單項(xiàng)與固定菜單項(xiàng)通過(guò)指定菜單項(xiàng)標(biāo)識(shí)別符“ID_SHOWTIME”、“ID_PREVENT”和“ID_ACTIVE”聯(lián)系在一起,因此,在程序中盡管并未為新增加的快捷菜單項(xiàng)輸入消息函數(shù)代碼,但相同ID對(duì)應(yīng)的子菜單項(xiàng)具有相同的功能。

6.2工具欄

工具欄是一種窗口,往往作為使用頻率較高的菜單項(xiàng)的圖形化表示,放置在菜單欄下方,其排列的方式由程序設(shè)計(jì)的界面來(lái)決定。如Windows窗口中經(jīng)??吹降?,代表操作中常用的“新建”,“打開(kāi)”和“保存”操作。工具欄是以圖標(biāo)形式進(jìn)行表示的,其圖標(biāo)也對(duì)應(yīng)了操作功能,比較形象。相對(duì)于菜單而言,工具欄能提供更加直接和快捷的操作。

工具欄還具有工具提示功能,當(dāng)用戶將鼠標(biāo)停留在對(duì)應(yīng)工具按鈕上幾秒鐘,工具提示便會(huì)出現(xiàn)在工具欄按鈕上方的小文本框中。工具欄的添加,VisualC++中主要體現(xiàn)為繪制工具欄按鈕的位圖,該位圖作為BMP文件保存。工具欄位圖是一系列覆蓋工具欄按鈕的圖形,每個(gè)按鈕對(duì)應(yīng)一個(gè)圖形。在默認(rèn)狀態(tài)下,每個(gè)圖形為16像素寬,15像素高。6.2.1向工具欄添加按鈕

向工具欄添加按鈕的步驟為:

(1)在項(xiàng)目區(qū)“ResourceView”下,展開(kāi)“ToolBar”文件夾。

(2)雙擊下拉的“IDR_MAINFRAME”。

(3)在右邊出現(xiàn)的編輯區(qū)中選中空白工具欄按鈕。

(4)利用VC提供的繪圖和調(diào)色板工具繪制用戶自定義工具欄按鈕。

(5)編輯按鈕屬性,與菜單項(xiàng)ID號(hào)關(guān)聯(lián)。6.2.2工具欄操作實(shí)例

1.添加工具欄按鈕

【例6-5】

為例6-4添加工具欄?!凹せ睢睂?duì)應(yīng)工具欄按鈕;“禁止”對(duì)應(yīng)工具欄按鈕。

操作步驟如下:

(1)打開(kāi)chap6_4的工程文件。

(2)工作區(qū)下,雙擊,展開(kāi)文件夾。

(3)雙擊,右邊工作區(qū)出現(xiàn)菜單欄編輯區(qū)如圖6-15所示,編輯區(qū)中已經(jīng)包含系統(tǒng)框架默認(rèn)的一些工具欄按鈕,添加新的按鈕,只需要在最后一個(gè)灰底空白工具欄按鈕處用鼠標(biāo)單擊即可。圖6-15菜單欄編輯區(qū)

(4)單擊空白工具欄按鈕,利用右邊“圖形”和“色彩”工具欄提供的設(shè)計(jì)工具,繪制按鈕圖標(biāo)。這里我們利用“圖形”工具欄繪制工具欄符號(hào)和?!皥D形”和“色彩”工具欄如圖6-16所示。圖6-16“圖形”工具欄和“色彩”工具欄

(5)運(yùn)行程序,程序界面如圖6-17所示。

此時(shí),在工具欄出現(xiàn)了繪制的工具欄按鈕圖標(biāo),但為灰色,表示不可用。需要為按鈕指定對(duì)應(yīng)的標(biāo)識(shí)才能進(jìn)行對(duì)應(yīng)的操作。

有時(shí)候工具欄上的按鈕,從功能上可以分為幾大類,為了進(jìn)行區(qū)別,往往在不同的類別之間使用間隔符號(hào)進(jìn)行功能隔離。為工具欄添加間隔的方法非常簡(jiǎn)單,只需將空白工具欄按鈕用鼠標(biāo)左鍵選中,并輕輕向右拖動(dòng)一點(diǎn),即為工具欄添加了一個(gè)間隔。圖6-17添加工具欄運(yùn)行結(jié)果

2.為工具欄按鈕添加屬性

(1)雙擊工具欄按鈕,彈出工具欄按鈕屬性對(duì)話框,如圖6-18所示。圖6-18工具欄按鈕屬性對(duì)話框各屬性說(shuō)明如表6-6所示。為了讓該工具欄按鈕具有與菜單項(xiàng)相同的功能,需要通過(guò)ID號(hào)將二者關(guān)聯(lián)起來(lái)。

(2)在ID下拉菜單中選擇需要和此工具欄按鈕關(guān)聯(lián)的菜單欄ID號(hào),這里選擇“ID_ACTIVE”,如圖6-19所示。圖6-19工具欄按鈕屬性對(duì)話框

(3)采用同樣的方法,將和“ID_PREVENT”關(guān)聯(lián)起來(lái)。

(4)運(yùn)行程序,可以看到,在工具欄上選中或按鈕,可以得到和菜單選項(xiàng)相同的操作結(jié)果。

在這里,對(duì)工具欄按鈕的禁止或激活操作與對(duì)菜單欄的操作方法相同,如果是對(duì)同一個(gè)ID號(hào)的操作,只需操作菜單欄或操作工具欄按鈕,無(wú)需重復(fù)操作,因?yàn)槎呤峭ㄟ^(guò)同一個(gè)ID號(hào)進(jìn)行關(guān)聯(lián)的。

6.3狀態(tài)欄

狀態(tài)欄位于

Windows窗口的底部,狀態(tài)欄既不接受用戶的輸入,也不產(chǎn)生命令消息,常常用于顯示某些提示信息。當(dāng)用戶將鼠標(biāo)移動(dòng)到某個(gè)菜單項(xiàng)或工具欄按鈕上時(shí),狀態(tài)欄中通常會(huì)顯示一些簡(jiǎn)單的信息,提示用戶該選項(xiàng)可以做哪些操作。

狀態(tài)欄實(shí)際上是個(gè)窗口,一般分為幾個(gè)窗格,每個(gè)窗格顯示不同的信息。AppWizard會(huì)為應(yīng)用程序自動(dòng)創(chuàng)建一個(gè)狀態(tài)欄。AppWizard產(chǎn)生的狀態(tài)欄各部分信息由indicator數(shù)組來(lái)表示,用戶可以在應(yīng)用程序主框架類(文件MainFrm.cpp中)找到,其原型為:staticUINTindicators[]=

{

ID_SEPARATOR,//statuslineindicator

ID_INDICATOR_CAPS,

ID_INDICATOR_NUM,

ID_INDICATOR_SCRL,

};

它們分別對(duì)應(yīng)狀態(tài)欄的4個(gè)部分,如圖6-20所示。圖6-20狀態(tài)欄介紹創(chuàng)建一個(gè)狀態(tài)欄需要以下幾個(gè)步驟:

(1)構(gòu)建一個(gè)CStatusBar對(duì)象。

(2)調(diào)用CStatusBar::Create創(chuàng)建狀態(tài)欄窗口。

(3)調(diào)用CStatusBar::SetIndicators函數(shù)分配窗格,并將狀態(tài)欄的每一個(gè)窗格與一個(gè)字符串ID相聯(lián)系。它的第一項(xiàng)一般為ID_SEPARATOR,該ID對(duì)應(yīng)的窗格用來(lái)顯示命令提示信息;后三項(xiàng)都是字符串ID,這三個(gè)字符串分別是CAP、NUM和SCRL,它們對(duì)應(yīng)的三個(gè)窗格用來(lái)顯示鍵盤的狀態(tài)。

1.修改應(yīng)用程序的狀態(tài)欄

對(duì)窗口狀態(tài)欄的結(jié)構(gòu)了解之后,我們來(lái)學(xué)習(xí)如何修改應(yīng)用程序的狀態(tài)欄,即對(duì)已有的窗格進(jìn)行用戶自定義修改。

【例6-6】

為例6-5的狀態(tài)欄再加一個(gè)用戶選中狀態(tài)窗格,它將用來(lái)顯示用戶選中的“激活”或“禁止”操作名稱。

操作步驟如下:

(1)打開(kāi)chap6_5工程文件。

(2)在項(xiàng)目區(qū)中選中,雙擊展開(kāi)。

(3)選中文件夾,雙擊展開(kāi)。

(4)選中,雙擊,光標(biāo)移動(dòng)到編輯區(qū),在其中找到indicators數(shù)組。輸入代碼:

staticUINTindicators[]=

{

ID_SEPARATOR,

//statuslineindicator

ID_INDICATOR_CHOICE,

//新增加一個(gè)窗格ID

ID_INDICATOR_CAPS,

ID_INDICATOR_NUM,

ID_INDICATOR_SCRL,

};

(5)回到項(xiàng)目區(qū),選中,雙擊文件夾。

(6)雙擊下拉菜單中的,右邊編輯區(qū)如圖6-21所示。圖6-21StringTable內(nèi)容

(7)單擊編輯區(qū)下端空白虛框處,按下鍵盤的“Insert”鍵,彈出“StringProperties”(字符串屬性)對(duì)話框,如圖6-22所示。

(8)在ID中不做選擇,在ID中將當(dāng)前字符串刪除,在其中輸入“ID_INDICATOR_CHOICE”;在“標(biāo)題”中輸入“選擇狀態(tài)”,為添加的新?tīng)顟B(tài)欄窗格增加默認(rèn)文本顯示;關(guān)閉對(duì)話框,如圖6-23所示。

(9)運(yùn)行該程序,觀察應(yīng)用程序的狀態(tài)欄如圖6-24所示。圖6-22String屬性對(duì)話框圖6-23在String屬性對(duì)話框中輸入信息圖6-24在狀態(tài)欄新增了一個(gè)窗格“選擇圖形”

2.更新?tīng)顟B(tài)欄窗格內(nèi)容

上例中,為狀態(tài)欄添加了一個(gè)新的窗格,只是在狀態(tài)欄上開(kāi)辟了一塊空間,顯示默認(rèn)的字符串,但狀態(tài)欄如果僅用于此就沒(méi)有多大的意義了。為了能在程序運(yùn)行中,狀態(tài)欄顯示與鼠標(biāo)操作相關(guān)的信息,有必要為該窗格添加消息處理函數(shù)。

【例6-7】

為例6-6的狀態(tài)欄添加消息處理函數(shù),當(dāng)鼠標(biāo)選中對(duì)應(yīng)的圖形子菜單或工具欄按鈕時(shí),在新添窗格“選擇圖形”中顯示對(duì)應(yīng)圖形名稱。操作步驟如下:

(1)打開(kāi)chap6_1的工程文件。

(2)在項(xiàng)目區(qū)中,單擊前的符號(hào),展開(kāi)CChap6_1View的成員,雙擊成員函數(shù),光標(biāo)自動(dòng)移動(dòng)到該函數(shù)體起始位置。修改函數(shù)體:

voidCChap6_1View::OnDraw(CDC*pDC)

{

CChap6_1Doc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

//TODO:adddrawcodefornativedatahere

CStatusBar*pS

溫馨提示

  • 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)論