第12章設(shè)計(jì)用戶界面v2_第1頁(yè)
第12章設(shè)計(jì)用戶界面v2_第2頁(yè)
第12章設(shè)計(jì)用戶界面v2_第3頁(yè)
第12章設(shè)計(jì)用戶界面v2_第4頁(yè)
第12章設(shè)計(jì)用戶界面v2_第5頁(yè)
已閱讀5頁(yè),還剩77頁(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)介

1、第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面12.1 菜單和加速鍵菜單和加速鍵12.2 工具欄工具欄12.3 狀態(tài)欄狀態(tài)欄12.6 通用對(duì)話框通用對(duì)話框第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面資源資源 在在Windows的可執(zhí)行文件中,資源是獨(dú)立于代碼的可執(zhí)行文件中,資源是獨(dú)立于代碼的,使用單獨(dú)的的,使用單獨(dú)的Resource Compiler進(jìn)行編譯,并進(jìn)行編譯,并嵌入到可執(zhí)行文件中。嵌入到可執(zhí)行文件中。 在編程過(guò)程中,代碼是可復(fù)用的,資源也是可復(fù)在編程過(guò)程中,代碼是可復(fù)用的,資源也是可

2、復(fù)用的,通過(guò)資源的用的,通過(guò)資源的“導(dǎo)入導(dǎo)入”和和“導(dǎo)出導(dǎo)出”功能來(lái)實(shí)功能來(lái)實(shí)現(xiàn)資源的可復(fù)用?,F(xiàn)資源的可復(fù)用。 程序的國(guó)際化,也是通過(guò)資源來(lái)實(shí)現(xiàn)的。程序的國(guó)際化,也是通過(guò)資源來(lái)實(shí)現(xiàn)的。 第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面獲取資源的一個(gè)樣例獲取資源的一個(gè)樣例 查看查看Windows(98/2000)系統(tǒng)中自帶的紙牌游戲中的圖片資源:系統(tǒng)中自帶的紙牌游戲中的圖片資源: c:Windowscards.dll 或或 c:WINNTSystem32第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面12.1 菜單和加速鍵菜單和加速鍵第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面12.1.1 使用菜單使用菜單Hello W

3、orld!ID_COLOR_REDID_COLOR _GREENID_COLOR_BLUEID_OPER_SHOW屬性選擇屬性選擇Pop-up第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面在在My_ResView.h中的中的 class CMy_ResView 中的中的public處加入如下處加入如下聲明,添加成員變量:聲明,添加成員變量:在在構(gòu)造函數(shù)構(gòu)造函數(shù)CMy_ResView:CMy_ResView( )中初始化成員變量:中初始化成員變量:COLORREF m_nColor; /用戶可選顏色數(shù)組用戶可選顏色數(shù)組CStringm_strShow; / 顯示的字符內(nèi)容顯示的字符內(nèi)容 BOOL m_b

4、Show; / 是否顯示是否顯示m_nColor=RGB(255,0,0);/ 初始設(shè)置為紅色初始設(shè)置為紅色m_strShow = Hello World!;/ 顯示內(nèi)容顯示內(nèi)容m_bShow = TRUE; / 初始化為顯示初始化為顯示第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面if(m_bShow) / 若顯示若顯示 pDC-SetTextColor(m_nColor); / 設(shè)置輸出字符串顏色設(shè)置輸出字符串顏色 pDC-TextOut(100,100,m_strShow); / 輸出字符串輸出字符串 在函數(shù)在函數(shù)void CMy_ResView :OnDraw(CDC* pDC)中加入代碼,繪

5、中加入代碼,繪制字符串:制字符串:第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面菜單消息響應(yīng)菜單消息響應(yīng) 若編譯運(yùn)行程序,可看到程序輸出一行紅色的字符串,但若編譯運(yùn)行程序,可看到程序輸出一行紅色的字符串,但顏色設(shè)置菜單項(xiàng)還沒(méi)有起作用。顏色設(shè)置菜單項(xiàng)還沒(méi)有起作用。 菜單消息響應(yīng)機(jī)制:菜單消息響應(yīng)機(jī)制: COMMAND消息的響應(yīng)消息的響應(yīng) UPDATE_COMMAND_UI消息的響應(yīng)消息的響應(yīng)1. COMMAND消息的響應(yīng)消息的響應(yīng) / Generated message map functionsprotected: /AFX_MSG(CMy_ResView) afx_msg void OnOperSh

6、ow(); /成員函數(shù)成員函數(shù) afx_msg void OnColorBlue(); afx_msg void OnColorGreen(); afx_msg void OnColorRed();/AFX_MSG(1)添加了對(duì))添加了對(duì)COMMAND消息的響應(yīng)后,消息的響應(yīng)后,My_ResView.h變化變化(聲聲明消息處理函數(shù)明消息處理函數(shù)):第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面BEGIN_MESSAGE_MAP(CMy_ResView, CView) /AFX_MSG_MAP(CMy_ResView) ON_COMMAND(ID_OPER_SHOW, OnOperShow) /菜單和對(duì)

7、應(yīng)菜單和對(duì)應(yīng)COMMAND消息的綁定消息的綁定 ON_COMMAND(ID_COLOR_BLUE, OnColorBlue) ON_COMMAND(ID_COLOR_GREEN, OnColorGreen) ON_COMMAND(ID_COLOR_RED, OnColorRed) /AFX_MSG_MAP / Standard printing commands ON_COMMAND(ID_FILE_PRINT, CView:OnFilePrint) END_MESSAGE_MAP()(2)在)在My_ResView.cpp文件中,文件中,ID_OPER_SHOW對(duì)應(yīng)的對(duì)應(yīng)的COMMAND消息

8、的綁定,代碼如下消息的綁定,代碼如下(完成消息映射完成消息映射) :第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面void CMy_ResView:OnOperShow() m_bShow = !m_bShow; / 前面定義有:前面定義有:BOOL m_bshow; m_bshow= TRUE; Invalidate(); / 強(qiáng)制強(qiáng)制刷刷新窗口新窗口,或或InvalidateRect(NULL,TRUE);void CMy_ResView :OnColorBlue() m_nColor=RGB(0,0,255); /設(shè)定當(dāng)前顏色為藍(lán)色設(shè)定當(dāng)前顏色為藍(lán)色I(xiàn)nvalidate(); / 刷刷新窗口新窗

9、口void CMy_ResView :OnColorGreen() m_nColor=RGB(0,255,0); /設(shè)定當(dāng)前顏色為綠色設(shè)定當(dāng)前顏色為綠色I(xiàn)nvalidate(); / 刷刷新窗口新窗口void CMy_ResView :OnColorRed() m_nColor=RGB(255,0,0); /設(shè)定當(dāng)前顏色為紅色設(shè)定當(dāng)前顏色為紅色I(xiàn)nvalidate(); / 刷刷新窗口新窗口(3)在)在My_ResView.cpp文件的最后加入代碼文件的最后加入代碼(加入消息處理函數(shù)加入消息處理函數(shù)):第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面Invalidate() 該函數(shù)的作用是使整個(gè)窗口客戶

10、區(qū)無(wú)效。窗口的客戶區(qū)無(wú)效意該函數(shù)的作用是使整個(gè)窗口客戶區(qū)無(wú)效。窗口的客戶區(qū)無(wú)效意味著需要重繪。這時(shí)味著需要重繪。這時(shí)Windows會(huì)在應(yīng)用程序的消息隊(duì)列中放置會(huì)在應(yīng)用程序的消息隊(duì)列中放置WM_PAINT消息。消息。 MFC為為窗口類窗口類提供了提供了WM_PAINT的消息處理函數(shù)的消息處理函數(shù)OnPaint,OnPaint負(fù)責(zé)重繪窗口。負(fù)責(zé)重繪窗口。 視圖類視圖類有一些例外,在視圖類的有一些例外,在視圖類的OnPaint函數(shù)中調(diào)用了函數(shù)中調(diào)用了OnDraw函數(shù)函數(shù),實(shí)際的重繪工作由,實(shí)際的重繪工作由OnDraw來(lái)完成。參數(shù)來(lái)完成。參數(shù)bErase為為TRUE時(shí),時(shí),重繪區(qū)域內(nèi)的背景將被擦除,否

11、則,背景將保持不變。重繪區(qū)域內(nèi)的背景將被擦除,否則,背景將保持不變。 Invalidate標(biāo)記一個(gè)需要重繪的無(wú)效區(qū)域,并不意味著調(diào)用該標(biāo)記一個(gè)需要重繪的無(wú)效區(qū)域,并不意味著調(diào)用該函數(shù)后就立刻進(jìn)行重繪。函數(shù)后就立刻進(jìn)行重繪。 Invalidate只是放一個(gè)只是放一個(gè)WM_PAINT消息消息在隊(duì)列里,不做別的,所以只有當(dāng)當(dāng)前函數(shù)返回后,進(jìn)入消息循在隊(duì)列里,不做別的,所以只有當(dāng)當(dāng)前函數(shù)返回后,進(jìn)入消息循環(huán),取出環(huán),取出WM_PAINT,才執(zhí)行,才執(zhí)行PAINT。/CView默認(rèn)的標(biāo)準(zhǔn)的重畫(huà)函數(shù)默認(rèn)的標(biāo)準(zhǔn)的重畫(huà)函數(shù) /見(jiàn)見(jiàn)VIEWCORE.CPP void CView:OnPaint() CPaint

12、DC dc(this); OnPrepareDC(&dc); OnDraw(&dc); /調(diào)用了調(diào)用了OnDraw 第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面InvalidateRect()CWnd:InvalidateRectvoid InvalidateRect( LPCRECT lpRect, BOOLbErase = TRUE );第二個(gè)參數(shù)是指示使矩形區(qū)域無(wú)效時(shí),是否擦除矩形區(qū)域的背景第二個(gè)參數(shù)是指示使矩形區(qū)域無(wú)效時(shí),是否擦除矩形區(qū)域的背景的,的,TRUE就擦除背景,就擦除背景,F(xiàn)ALSE就不擦除,就不擦除,InvalidateRect(NULL,TRUE)表示擦除整個(gè)窗口的背景表示擦除

13、整個(gè)窗口的背景The bErase parameter specifies whether the background within the update area is to be erased when the update region is processed. If bErase is TRUE, the background is erased when the BeginPaint member function is called; if bErase is FALSE, the background remains unchanged. If bErase is TRUE

14、for any part of the update region, the background in the entire region is erased, not just in the given part. Windows sends a WM_PAINT message whenever the CWnd update region is not empty and there are no other messages in the application queue for that window.第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面菜單消息響應(yīng)實(shí)現(xiàn)步驟菜單消息響應(yīng)實(shí)現(xiàn)步驟

15、 在頭文件中在頭文件中聲明消息處理函數(shù)聲明消息處理函數(shù)在實(shí)現(xiàn)文件在實(shí)現(xiàn)文件中中完成消息映射完成消息映射在實(shí)現(xiàn)文件在實(shí)現(xiàn)文件中中加入消息處理函數(shù)加入消息處理函數(shù)第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面void Enable( BOOL bOn = TRUE )禁止或者允許該菜單項(xiàng)禁止或者允許該菜單項(xiàng)void SetCheck( int nCheck = 1 )設(shè)置菜單項(xiàng)設(shè)置菜單項(xiàng)/工具條按鈕的工具條按鈕的check狀態(tài),顯示標(biāo)志為狀態(tài),顯示標(biāo)志為“”void SetRadio( BOOL bOn = TRUE )與與SetCheck功能類似,顯示標(biāo)志為功能類似,顯示標(biāo)志為“ ”void SetTe

16、xt( LPCTSTR lpszText )設(shè)置菜單項(xiàng)的設(shè)置菜單項(xiàng)的Caption屬性屬性CCmdUI類常類常用的方法用的方法2. UPDATE_COMMAND_UI消息的響應(yīng)消息的響應(yīng)第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面2. UPDATE_COMMAND_UI消息的響應(yīng)消息的響應(yīng)為為ID_OPER_SHOW添加添加UPDATE_COMMAND_UI消息。在自動(dòng)生成消息。在自動(dòng)生成消息處理函數(shù)中加入如下代碼:消息處理函數(shù)中加入如下代碼:隨著隨著m_bShow的值的改變,顯示菜單項(xiàng)的狀態(tài)與實(shí)際是否顯示的值的改變,顯示菜單項(xiàng)的狀態(tài)與實(shí)際是否顯示字符串的狀態(tài)一致了,通過(guò)菜單項(xiàng)前面的字符串的狀態(tài)一致

17、了,通過(guò)菜單項(xiàng)前面的“”標(biāo)記來(lái)體現(xiàn)。標(biāo)記來(lái)體現(xiàn)。void CMy_ResView:OnUpdateOperShow(CCmdUI* pCmdUI)pCmdUI-SetCheck(m_bShow); / 顯示選中標(biāo)志顯示選中標(biāo)志void CMy_ResView:OnUpdateColorRed(CCmdUI* pCmdUI) pCmdUI-SetRadio(m_nColor=RGB(255,0,0);void CMy_ResView:OnUpdateColorGreen(CCmdUI* pCmdUI) pCmdUI-SetRadio(m_nColor=RGB(0,255,0);void CMy_

18、ResView:OnUpdateColorBlue(CCmdUI* pCmdUI) pCmdUI-SetRadio(m_nColor=RGB(0,0,255);第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面12.1.2 定義加速鍵定義加速鍵(1) 將項(xiàng)目工作區(qū)切換到資源視圖,選擇將項(xiàng)目工作區(qū)切換到資源視圖,選擇Accelerator資源類資源類型,雙擊型,雙擊IDR_MAINFRAME加速鍵資源,打開(kāi)加速鍵編加速鍵資源,打開(kāi)加速鍵編輯窗口。輯窗口。(2) 編輯加速鍵資源。編輯加速鍵資源。在在ID下拉列表框中選擇下拉列表框中選擇ID_COLOR_RED,在,在Key一欄中一欄中輸入輸入R,選擇,選擇Ct

19、rl復(fù)選框和復(fù)選框和VirtKey單選按鈕,以完成加速單選按鈕,以完成加速鍵設(shè)置。鍵設(shè)置。(3) 關(guān)閉加速鍵編輯窗口。關(guān)閉加速鍵編輯窗口。第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面字符串資源的使用字符串資源的使用 字符串資源主要是用于程序的多語(yǔ)言版本。如果要字符串資源主要是用于程序的多語(yǔ)言版本。如果要?jiǎng)觿?dòng)態(tài)切換界面語(yǔ)言態(tài)切換界面語(yǔ)言,使用字符串資源是很好的選擇。,使用字符串資源是很好的選擇。 在在MFC中,可以通過(guò)中,可以通過(guò)CString類的類的LoadString方法來(lái)方法來(lái)從資源載入字符串。從資源載入字符串。 具體操作具體操作: 打開(kāi)打開(kāi)ResourceViewString Table,在表

20、中,在表中的空白高亮處雙擊,在彈出的的空白高亮處雙擊,在彈出的String Properties對(duì)話對(duì)話框中的框中的ID編輯框中輸入編輯框中輸入IDS_STRING_HELLO,Caption編輯框中輸入編輯框中輸入“Hello VC!”。第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面字符串資源的使用字符串資源的使用 在在My_ResView.cpp文件的構(gòu)造函數(shù)中,將原來(lái)的文件的構(gòu)造函數(shù)中,將原來(lái)的 m_strShow = Hello World!; 改為:改為: m_strShow.LoadString(IDS_STRING_HELLO); 程序的輸出變?yōu)槌绦虻妮敵鲎優(yōu)椤癏ello VC!”使用字

21、符串資源的好處是不需要在整個(gè)使用字符串資源的好處是不需要在整個(gè)程序中去尋找某個(gè)字符串;如果某些字程序中去尋找某個(gè)字符串;如果某些字符串可能在將來(lái)會(huì)發(fā)生變更,那么最好符串可能在將來(lái)會(huì)發(fā)生變更,那么最好將它寫(xiě)在字符串資源中。將它寫(xiě)在字符串資源中。第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面對(duì)話框資源的創(chuàng)建及其應(yīng)用對(duì)話框資源的創(chuàng)建及其應(yīng)用 在上例的基礎(chǔ)上編寫(xiě)一個(gè)對(duì)話框用于接收用戶輸入,然后在上例的基礎(chǔ)上編寫(xiě)一個(gè)對(duì)話框用于接收用戶輸入,然后用此輸入替換主程序原來(lái)顯示的字符串。用此輸入替換主程序原來(lái)顯示的字符串。第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面創(chuàng)建完對(duì)話框資源創(chuàng)建完對(duì)話框資源之后,需要生成一個(gè)之后,需要

22、生成一個(gè)相關(guān)的相關(guān)的對(duì)話框類對(duì)話框類。ViewClassWizard Create a New Class OK,在,在Name中填入中填入“CInputDlg” 。第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面 / Dialog Data/AFX_DATA(CInputDlg)enum IDD = IDD_DIALOG_NEW ;CString m_strInput; /變量聲明變量聲明/AFX_DATA將對(duì)話框上的將對(duì)話框上的IDC_EDIT_INPUT控件與一個(gè)控件與一個(gè)CString類型的類型的m_strInput變量綁定,建立一種映射關(guān)系。變量綁定,建立一種映射關(guān)系。 上面的操作使上面的操作

23、使MFC在幕后做了些什么在幕后做了些什么?(1)在)在InputDlg.h文件中,文件中,MFC加入了如下代碼:加入了如下代碼:第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面 /AFX_DATA_MAP(CInputDlg) DDX_Text(pDX, IDC_EDIT_INPUT, m_strInput); /數(shù)據(jù)交換數(shù)據(jù)交換/AFX_DATA_MAP /AFX_DATA_INIT(CInputDlg) m_strInput = _T(); /對(duì)對(duì)m_strInput初始化初始化/AFX_DATA_INIT(2)在)在InputDlg.cpp的構(gòu)造函數(shù)中,的構(gòu)造函數(shù)中,MFC加入了如下代碼:加入了如

24、下代碼:(3)在)在InputDlg.cpp文件的文件的DoDataExchange函數(shù)中,函數(shù)中,MFC加入了加入了如下代碼:如下代碼:在在DoDataExchange函數(shù)中,完成了控件與變量之間的數(shù)據(jù)交換。函數(shù)中,完成了控件與變量之間的數(shù)據(jù)交換。第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面在在CMy_ResView中使用新創(chuàng)建的對(duì)話框中使用新創(chuàng)建的對(duì)話框 void CMy_ResView:OnOperString() CInputDlg dlgInput; / 聲明對(duì)話框變量聲明對(duì)話框變量 if(dlgInput.DoModal() = IDOK) / 彈出模態(tài)對(duì)話框,若彈出模態(tài)對(duì)話框,若用戶點(diǎn)

25、擊用戶點(diǎn)擊OK按鈕按鈕 m_strShow = dlgInput.m_strInput; / 更改顯示的字符串更改顯示的字符串 Invalidate(); / 強(qiáng)制重繪強(qiáng)制重繪 ( 1 )為為“操作操作”菜單增加菜單項(xiàng)菜單增加菜單項(xiàng)“修改字符串修改字符串”,其,其ID為為ID_OPER_STRING。增加。增加COMMAND消息響應(yīng)函數(shù)消息響應(yīng)函數(shù)OnOperString。( 2 ) 在在My_ResView.cpp文件頭部文件頭部include部分最后加入:部分最后加入: #include InputDlg.h( 3 )在在OnOperString中加入代碼:中加入代碼:第第12章章 設(shè)計(jì)用

26、戶界面設(shè)計(jì)用戶界面非模態(tài)對(duì)話框非模態(tài)對(duì)話框 CInputDlg *pDlg=new CInputDlg; pDlg-Create(IDD_DIALOG2,this); pDlg-ShowWindow(SW_SHOW); 在非模態(tài)對(duì)話框中單擊在非模態(tài)對(duì)話框中單擊OK按鈕后,程序會(huì)調(diào)用基類按鈕后,程序會(huì)調(diào)用基類CDialog的的OnOK函數(shù),這是一個(gè)虛函數(shù),后者又會(huì)調(diào)用函數(shù),這是一個(gè)虛函數(shù),后者又會(huì)調(diào)用EndDialog函數(shù),此函數(shù)用于終止模態(tài)對(duì)話框,但對(duì)于非模態(tài)對(duì)話框,函數(shù),此函數(shù)用于終止模態(tài)對(duì)話框,但對(duì)于非模態(tài)對(duì)話框,此函數(shù)只是使對(duì)話框窗口不可見(jiàn),并不銷毀它。此函數(shù)只是使對(duì)話框窗口不可見(jiàn),并不

27、銷毀它。 因此,對(duì)非模態(tài)對(duì)話框來(lái)說(shuō),如果有一個(gè)因此,對(duì)非模態(tài)對(duì)話框來(lái)說(shuō),如果有一個(gè)ID值為值為IDOK的按的按鈕,就必須重寫(xiě)基類的鈕,就必須重寫(xiě)基類的OnOK虛函數(shù),并在重寫(xiě)的函數(shù)中調(diào)虛函數(shù),并在重寫(xiě)的函數(shù)中調(diào)用用DestroyWindow函數(shù),以完成銷毀對(duì)話框的工作,同時(shí)注函數(shù),以完成銷毀對(duì)話框的工作,同時(shí)注意不要再調(diào)用基類的意不要再調(diào)用基類的OnOK函數(shù)。函數(shù)。 第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面12.2 工具欄工具欄 工具欄對(duì)象是一種窗口,其中包含一些水平排放的圖形按工具欄對(duì)象是一種窗口,其中包含一些水平排放的圖形按鈕。工具欄中的所有按鈕的圖形被存儲(chǔ)在一個(gè)位圖中,而鈕。工具欄中的所有

28、按鈕的圖形被存儲(chǔ)在一個(gè)位圖中,而該位圖被定義在應(yīng)用程序的資源文件中。該位圖被定義在應(yīng)用程序的資源文件中。 工具欄按鈕與菜單選項(xiàng)是類似的。單擊工具欄按鈕將產(chǎn)生工具欄按鈕與菜單選項(xiàng)是類似的。單擊工具欄按鈕將產(chǎn)生相應(yīng)的命令,應(yīng)用程序通過(guò)提供消息處理函數(shù)來(lái)處理產(chǎn)生相應(yīng)的命令,應(yīng)用程序通過(guò)提供消息處理函數(shù)來(lái)處理產(chǎn)生的命令。如果工具欄的某個(gè)按鈕沒(méi)有的命令。如果工具欄的某個(gè)按鈕沒(méi)有COMMAND或或UPDATE_COMMAND_UI處理函數(shù),那么框架自動(dòng)使該處理函數(shù),那么框架自動(dòng)使該按鈕按鈕無(wú)效無(wú)效。 工具欄和狀態(tài)欄工具欄和狀態(tài)欄一般作為一般作為框架窗口類框架窗口類的成員變量聲明,在的成員變量聲明,在創(chuàng)建框

29、架窗口時(shí)自動(dòng)創(chuàng)建它們,在銷毀框架窗口時(shí)自動(dòng)銷創(chuàng)建框架窗口時(shí)自動(dòng)創(chuàng)建它們,在銷毀框架窗口時(shí)自動(dòng)銷毀所創(chuàng)建的控件欄對(duì)象。毀所創(chuàng)建的控件欄對(duì)象。 使用使用AppWizard創(chuàng)建應(yīng)用程序基本框架時(shí),可以得到初始創(chuàng)建應(yīng)用程序基本框架時(shí),可以得到初始的工具欄和狀態(tài)欄。的工具欄和狀態(tài)欄。第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面12.2.1 工具欄類的結(jié)構(gòu)及其方法工具欄類的結(jié)構(gòu)及其方法 CToolBar由由CControlBar類派生。類派生。 CCmdTarget CObject CWnd CControlBar CToolBar第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面 構(gòu)造方法構(gòu)造方法用于建立用于建立Wind

30、ows工具欄工具欄CToolBar對(duì)象,并在運(yùn)對(duì)象,并在運(yùn)行時(shí)將它們附加到框架窗口上。行時(shí)將它們附加到框架窗口上。工具欄的方法工具欄的方法第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面 工具欄按鈕的操作方法工具欄按鈕的操作方法是用來(lái)處理某一工具欄按鈕。是用來(lái)處理某一工具欄按鈕。方方 法法 說(shuō)說(shuō) 明明 CommandToIndex() GetItemID() GetItemRect() GetButtonStyle() SetButtonStyle() GetButtonInfo() SetButtonInfo() GetButtonText() SetButtonText () 返返回回給給定定命命令

31、令的的工工具具欄欄按按鈕鈕索索引引 返返回回指指定定索索引引的的按按鈕鈕或或分分隔隔符符的的 ID 返返回回指指定定索索引引的的按按鈕鈕的的顯顯示示區(qū)區(qū)域域 獲獲得得按按鈕鈕風(fēng)風(fēng)格格 設(shè)設(shè)置置按按鈕鈕風(fēng)風(fēng)格格 獲獲得得按按鈕鈕 ID、風(fēng)風(fēng)格格、圖圖像像號(hào)號(hào) 設(shè)設(shè)置置按按鈕鈕 ID、風(fēng)風(fēng)格格、圖圖像像號(hào)號(hào) 獲獲得得顯顯示示在在按按鈕鈕上上的的文文本本 設(shè)設(shè)置置顯顯示示在在按按鈕鈕上上的的文文本本 第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面工具欄的創(chuàng)建方法工具欄的創(chuàng)建方法(1)創(chuàng)建工具欄資源)創(chuàng)建工具欄資源(2)構(gòu)造)構(gòu)造CToolBar對(duì)象,即在邊框窗口類的聲明中添加聲明:對(duì)象,即在邊框窗口類的聲明

32、中添加聲明:CToolBar m_wndToolBar;(3)調(diào)用)調(diào)用Create或或CreateEx創(chuàng)建工具欄創(chuàng)建工具欄(4)調(diào)用)調(diào)用LoadToolBar裝載工具欄資源:裝載工具欄資源:第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面工具欄按鈕圖像工具欄按鈕圖像 所有工具欄按鈕圖像都保存在一個(gè)位圖文件中,在所有工具欄按鈕圖像都保存在一個(gè)位圖文件中,在AppWizard創(chuàng)建工程過(guò)程中,自動(dòng)創(chuàng)建的工具欄位圖文件創(chuàng)建工程過(guò)程中,自動(dòng)創(chuàng)建的工具欄位圖文件名為名為ResToolBar.bmp,可以在資源編輯器中編輯該位圖。,可以在資源編輯器中編輯該位圖。每個(gè)圖像都有相同的大小,默認(rèn)為每個(gè)圖像都有相同的大小

33、,默認(rèn)為16像素寬,像素寬,15像素高。像素高。 CToolBar對(duì)象根據(jù)被單擊按鈕在工具欄中的位置來(lái)處理工對(duì)象根據(jù)被單擊按鈕在工具欄中的位置來(lái)處理工具欄中的鼠標(biāo)單擊事件,并產(chǎn)生適當(dāng)?shù)拿?。具欄中的鼠?biāo)單擊事件,并產(chǎn)生適當(dāng)?shù)拿睢?按鈕通過(guò)控件按鈕通過(guò)控件ID數(shù)組與按鈕所產(chǎn)生的命令相關(guān),控件數(shù)組與按鈕所產(chǎn)生的命令相關(guān),控件ID在在數(shù)組中的位置與按鈕圖像在工具欄位圖中的位置是一樣的。數(shù)組中的位置與按鈕圖像在工具欄位圖中的位置是一樣的。 數(shù)組中含有分隔符(數(shù)組中含有分隔符(ID_SEPARATOR),用于將按鈕分組。),用于將按鈕分組。在確定按鈕位置時(shí),分隔符是被忽略的。在確定按鈕位置時(shí),分隔符是

34、被忽略的。第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面構(gòu)造方法的功能構(gòu)造方法的功能1 1Create()Create()函數(shù)函數(shù) 作用:創(chuàng)建并初始化工具欄對(duì)象。作用:創(chuàng)建并初始化工具欄對(duì)象。 與其他創(chuàng)建過(guò)程類似,采用兩步法生成:與其他創(chuàng)建過(guò)程類似,采用兩步法生成: 聲明對(duì)象聲明對(duì)象 調(diào)用初始化函數(shù)調(diào)用初始化函數(shù)CToolBar : Create()生成工具欄對(duì)象生成工具欄對(duì)象 函數(shù)原型:函數(shù)原型:BOOL Create( CWnd *pParentWnd, /pParentWnd為指向工具欄所在父窗口的指針為指向工具欄所在父窗口的指針DWORD dwStyle = WS_CHILD|WS_VISIB

35、LE|CBRS_TOP, /dwStyle為工具欄的風(fēng)格,如表為工具欄的風(fēng)格,如表12-3所示所示UINT nIDAFX_IDW_TOOLBAR /nID表示工具欄子窗口的表示工具欄子窗口的ID號(hào)號(hào));第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面構(gòu)造方法的功能構(gòu)造方法的功能1 1CreateEx()CreateEx()函數(shù)函數(shù) CreateEx 創(chuàng)建一個(gè)具有附加風(fēng)格的創(chuàng)建一個(gè)具有附加風(fēng)格的CToolBar對(duì)象。對(duì)象。 函數(shù)原型:函數(shù)原型:BOOL CreateEx(CWnd* pParentWnd, /pParentWnd為指向工具欄所在父窗口的指針為指向工具欄所在父窗口的指針DWORD dwCtr

36、lStyle = TBSTYLE_FLAT, /創(chuàng)建創(chuàng)建CToolBarCtrl對(duì)象時(shí)的應(yīng)用風(fēng)對(duì)象時(shí)的應(yīng)用風(fēng)格格,有默認(rèn)值有默認(rèn)值DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP, CRect rcBorders = CRect(0, 0, 0, 0), UINT nID = AFX_IDW_TOOLBAR /toolbar子窗口子窗口ID);dwStyle為工具欄按鈕為工具欄按鈕顯示時(shí)的適當(dāng)?shù)娘L(fēng)格顯示時(shí)的適當(dāng)?shù)娘L(fēng)格定義了定義了toolbar邊框?qū)挾鹊倪吙驅(qū)挾鹊腃Rect 對(duì)象對(duì)象,默認(rèn)設(shè)置為默認(rèn)設(shè)置為0,0,0,0 (無(wú)邊框)(無(wú)邊

37、框)TBSTYLE_ALTDRAG拖拽拖拽TBSTYLE_CUSTOMERASE定制消息提示定制消息提示TBSTYLE_FLAT平滑平滑TBSTYLE_LIST右位圖的按鈕文本平滑右位圖的按鈕文本平滑TBSTYLE_REGISTERDROP下拉下拉TBSTYLE_TOOLTIPS工具提示工具提示TBSTYLE_TRANSPARENT透明透明TBSTYLE_WRAPABLE 使工具條控制按鈕具有多行排列格式使工具條控制按鈕具有多行排列格式第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面調(diào)用調(diào)用Create時(shí)還可以指定工具欄的風(fēng)格,默認(rèn)風(fēng)格是時(shí)還可以指定工具欄的風(fēng)格,默認(rèn)風(fēng)格是WS_CHILD|WS_VIS

38、IBLE|CBRS_TOPCBRS_TOP 工具欄在邊框窗口頂部工具欄在邊框窗口頂部CBRS_BOTTOM 工具欄在邊框窗口底部工具欄在邊框窗口底部CBRS_NOALIGN 邊框窗口改變大小時(shí),工具欄不重定位邊框窗口改變大小時(shí),工具欄不重定位CBRS_TOOLTIPS 使工具提示有效使工具提示有效CBRS_SIZE_DYNAMIC 工具欄尺寸可變工具欄尺寸可變CBRS_SIZE_FIXED 工具欄尺寸固定工具欄尺寸固定CBRS_FLOATLNG 工具欄是浮動(dòng)的工具欄是浮動(dòng)的CBRS_FLYBY 在狀態(tài)欄中顯示按鈕的有關(guān)信息在狀態(tài)欄中顯示按鈕的有關(guān)信息CBRS_HIDE_INPLANE 不顯示工

39、具欄不顯示工具欄 如果創(chuàng)建后要改變工具欄的風(fēng)格,則調(diào)用如果創(chuàng)建后要改變工具欄的風(fēng)格,則調(diào)用CControlBar:SetBarStyle() 第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面2 2LoadToolBar()LoadToolBar()函數(shù)函數(shù) 作用:裝載工具欄資源作用:裝載工具欄資源先調(diào)用初始化函數(shù)先調(diào)用初始化函數(shù)Create()或或CreateEx()再調(diào)用該函數(shù)裝載資源再調(diào)用該函數(shù)裝載資源 函數(shù)原型函數(shù)原型: :BOOL LoadToolBar(LPCTSTR lpszResourcName);/lpszResourcName為字符串形式定義的資源為字符串形式定義的資源BOOL Loa

40、dToolBar(UINT nIDResource); /nIDResource為整型形式定義的資源為整型形式定義的資源第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面3 3SetBarStyle()SetBarStyle()函數(shù)函數(shù) 作用:設(shè)置工具欄風(fēng)格。作用:設(shè)置工具欄風(fēng)格。 如果在調(diào)用初始化函數(shù)如果在調(diào)用初始化函數(shù)CToolBar:Create時(shí)設(shè)置的工具欄風(fēng)時(shí)設(shè)置的工具欄風(fēng)格不滿足需要時(shí),可以再用該函數(shù)進(jìn)行設(shè)置。格不滿足需要時(shí),可以再用該函數(shù)進(jìn)行設(shè)置。 如下述代碼設(shè)定工具欄的風(fēng)格為:當(dāng)光標(biāo)在按鈕上暫停時(shí),如下述代碼設(shè)定工具欄的風(fēng)格為:當(dāng)光標(biāo)在按鈕上暫停時(shí),將顯示工具提示和命令描述,并設(shè)定工具欄的

41、大小是可變將顯示工具提示和命令描述,并設(shè)定工具欄的大小是可變的。的。m_wndToolBar.SetBarStyle (CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC);第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面4 4LoadBitmap()LoadBitmap()函數(shù)函數(shù) 作用:將儲(chǔ)存在位圖資源中的按鈕映像與程序的工具欄相作用:將儲(chǔ)存在位圖資源中的按鈕映像與程序的工具欄相連接。連接。 函數(shù)原型:函數(shù)原型: 如下述代碼:如下述代碼:ToolBar.LoadBitmap(IDR_TOOLS);BOOL LoadBitmap(LPCTSTR lpszResourc

42、eName);/lpszResourceName為字符串形式定義的資源為字符串形式定義的資源BOOL LoadBitmap(UINT nIDResource);/nIDResource為整型形式定義的資源為整型形式定義的資源第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面工具欄的停靠工具欄的??縱oid EnableDocking(DWORD dwStyle);/參數(shù)參數(shù)dwStyle為工具欄停靠風(fēng)格為工具欄??匡L(fēng)格風(fēng)風(fēng) 格格 意意 義義 0 CBRS_ALIGN_TOP CBRS_ALIGN_BOTTOM CBRS_ALIGN_LEFT CBRS_ALIGN_RIGHT CBRS_ALIGN_ANY

43、CBRS_ALIGN_MULTI 不能停靠不能???工具欄可在客戶區(qū)頂端停靠工具欄可在客戶區(qū)頂端???工具欄可在客戶區(qū)底端停靠工具欄可在客戶區(qū)底端???工具欄可在客戶區(qū)左端停靠工具欄可在客戶區(qū)左端???工具欄可在客戶區(qū)右端??抗ぞ邫诳稍诳蛻魠^(qū)右端???工具欄可在客戶區(qū)任意位置??抗ぞ邫诳稍诳蛻魠^(qū)任意位置停靠 允許在一個(gè)窗口內(nèi)存在多個(gè)可移動(dòng)控制欄,允許在一個(gè)窗口內(nèi)存在多個(gè)可移動(dòng)控制欄, 但對(duì)但對(duì) CFrame 不可用不可用 實(shí)現(xiàn)允許用戶移動(dòng)工具欄的常用代碼:實(shí)現(xiàn)允許用戶移動(dòng)工具欄的常用代碼:m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); /為為m_wndT

44、oolBar啟用??繂⒂猛?縀nableDocking (CBRS_ALIGN_ANY) /為框架窗口啟用停靠為框架窗口啟用??康诘?2章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面工具欄的顯隱控制工具欄的顯隱控制 工具欄是一個(gè)窗口,其顯隱控制可通過(guò)其父類工具欄是一個(gè)窗口,其顯隱控制可通過(guò)其父類CWnd的成員的成員函數(shù)實(shí)現(xiàn)。函數(shù)實(shí)現(xiàn)。DWORD GetStyle( ) const; /函數(shù)返回當(dāng)前控制欄風(fēng)格函數(shù)返回當(dāng)前控制欄風(fēng)格ShowWindow(SW_HIDE); /實(shí)現(xiàn)隱藏實(shí)現(xiàn)隱藏ShowWindow(SW_SHOWNORMAL); /實(shí)現(xiàn)再次顯示實(shí)現(xiàn)再次顯示第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面12.

45、2.2 創(chuàng)建工具欄類實(shí)例創(chuàng)建工具欄類實(shí)例例例12-2 在在Hello應(yīng)用程序框架中添加一個(gè)設(shè)置顏色的工具欄應(yīng)用程序框架中添加一個(gè)設(shè)置顏色的工具欄:(1) 工具條中包含四個(gè)按鈕,分別對(duì)應(yīng)菜單的工具條中包含四個(gè)按鈕,分別對(duì)應(yīng)菜單的“顯示顯示”、“紅紅色色”、“綠色綠色”和和“藍(lán)色藍(lán)色”菜單項(xiàng)。菜單項(xiàng)。(2) 工具條可以在窗口中任意位置??抗ぞ邨l可以在窗口中任意位置停靠(3) 當(dāng)鼠標(biāo)停留在工具條按鈕上時(shí),將顯示該按鈕的功能。當(dāng)鼠標(biāo)停留在工具條按鈕上時(shí),將顯示該按鈕的功能。系統(tǒng)系統(tǒng)工具條工具條用戶定義用戶定義工具條工具條第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面創(chuàng)建一個(gè)工具欄一般需要以下幾個(gè)步驟:創(chuàng)建一個(gè)

46、工具欄一般需要以下幾個(gè)步驟:(1) 在項(xiàng)目中在項(xiàng)目中增加工具欄資源增加工具欄資源。(2) 編輯工具欄。編輯工具欄。(3) 為類為類CMainFrame加入一個(gè)加入一個(gè)CToolBar的的受受保護(hù)保護(hù)的成員的成員變量變量m_colorToolBar。(4) 在在CMainFrame的的OnCreate()函數(shù)中加入設(shè)置工具欄函數(shù)中加入設(shè)置工具欄的特性的代碼。的特性的代碼。第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面1工具欄的設(shè)計(jì)工具欄的設(shè)計(jì)(1) 增加工具欄資源增加工具欄資源1) Resouce View/單擊右鍵單擊右鍵/Insert菜單菜單/ /Resource命令命令/ /顯示顯示Insert

47、Resource對(duì)話框?qū)υ捒? /選擇選擇Toolbar/ /單擊單擊New按鈕,這按鈕,這樣就在資源文件樣就在資源文件ToolBar中增加了一項(xiàng)中增加了一項(xiàng)工具欄工具欄資源。資源。2) 重新定義新增工具欄的重新定義新增工具欄的ID為為IDR_COLORTOOLBAR。 工具欄作為程序的一個(gè)資源一般存放在資源腳本中,在工具欄作為程序的一個(gè)資源一般存放在資源腳本中,在程序運(yùn)行時(shí)才調(diào)用。程序運(yùn)行時(shí)才調(diào)用。 一般來(lái)說(shuō),工具欄的標(biāo)識(shí)符一般來(lái)說(shuō),工具欄的標(biāo)識(shí)符ID在資源的頭文件在資源的頭文件(Resource.h)中定義,例如:中定義,例如:#define IDR_COLORTOOLBAR 132第第1

48、2章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面3) 雙擊雙擊IDR_COLORTOOLBAR,則顯示一個(gè)可編輯的,則顯示一個(gè)可編輯的工具欄。工具欄。第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面(2) 工具欄按鈕的編輯工具欄按鈕的編輯1) 加入工具欄按鈕。加入工具欄按鈕。 2) 刪除工具欄按鈕。刪除工具欄按鈕。 3) 分隔工具欄按鈕。分隔工具欄按鈕。 4) 改變按鈕的屬性。改變按鈕的屬性。 首先選中工具欄上的某個(gè)按鈕首先選中工具欄上的某個(gè)按鈕(如第一個(gè)按鈕如第一個(gè)按鈕) 然后選擇然后選擇View菜單菜單中的中的 Properties命令,將顯示命令,將顯示Toolbar Button Properties對(duì)話框。對(duì)

49、話框。 第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面2添加代碼添加代碼(1) 添加處理添加處理代碼代碼:使工具欄使工具欄ID與菜單與菜單ID一致一致(2) 添加設(shè)置代碼添加設(shè)置代碼1) 在頭文件在頭文件MainFrame中為類中為類CMainFrame加入一個(gè)成員變量加入一個(gè)成員變量2) 加入代碼以加入代碼以實(shí)現(xiàn)工具欄在啟動(dòng)程序時(shí)可見(jiàn)實(shí)現(xiàn)工具欄在啟動(dòng)程序時(shí)可見(jiàn)。protected: / control bar embedded membersCToolBar m_colorToolBar;int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct) i

50、f (!m_colorToolBar.Create(this,TBSTYLE_FLAT,WS_CHILD| WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) |!m_colorToolBar.LoadToolBar(IDR_COLORTOOLBAR)TRACE0(Failed to create status barn); return -1; 父窗口的指針父窗口的指針擴(kuò)展風(fēng)格為扁平風(fēng)格擴(kuò)展風(fēng)格為扁平風(fēng)格工具條風(fēng)格工具條風(fēng)格第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面(3) 添

51、加浮動(dòng)代碼添加浮動(dòng)代碼為了使工具欄成為可為了使工具欄成為可“浮動(dòng)浮動(dòng)”工具欄,即在應(yīng)用程序窗口工具欄,即在應(yīng)用程序窗口中,把它從一個(gè)地方移動(dòng)到另一個(gè)地方,可在中,把它從一個(gè)地方移動(dòng)到另一個(gè)地方,可在CMainFrame的的OnCreate()函數(shù)中修改并加入以下代碼:函數(shù)中修改并加入以下代碼:int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct) if (!m_colorToolBar.Create (this,TBSTYLE_FLAT,WS_CHILD| WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBR

52、S_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) |!m_colorToolBar.LoadToolBar(IDR_COLORTOOLBAR)TRACE0(Failed to create status barn);return -1; / fail to createm_colorToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_colorToolBar);/ 停靠工具欄??抗ぞ邫诘诘?2章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面12.3 狀

53、態(tài)欄狀態(tài)欄 狀態(tài)欄是顯示在框架窗口的多區(qū)域窗口,它由一行輸出狀態(tài)欄是顯示在框架窗口的多區(qū)域窗口,它由一行輸出面板或指示器組成。輸出面板通常用作消息行和狀態(tài)指示面板或指示器組成。輸出面板通常用作消息行和狀態(tài)指示符。符。 大多數(shù)大多數(shù)Windows應(yīng)用程序都包括一個(gè)狀態(tài)欄,在狀態(tài)欄中應(yīng)用程序都包括一個(gè)狀態(tài)欄,在狀態(tài)欄中顯示諸如工具欄按鈕幫助和應(yīng)用程序的特殊信息顯示諸如工具欄按鈕幫助和應(yīng)用程序的特殊信息(如在字如在字處理軟件中的處理軟件中的CapsLock鍵的狀態(tài)鍵的狀態(tài))。 AppWizard創(chuàng)建應(yīng)用程序時(shí),一般自動(dòng)添加狀態(tài)欄,程序創(chuàng)建應(yīng)用程序時(shí),一般自動(dòng)添加狀態(tài)欄,程序員在編程的過(guò)程中只需在原有

54、的狀態(tài)欄的基礎(chǔ)上適當(dāng)修改員在編程的過(guò)程中只需在原有的狀態(tài)欄的基礎(chǔ)上適當(dāng)修改即可。即可。第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面12.3.1 狀態(tài)欄的結(jié)構(gòu)及其方法狀態(tài)欄的結(jié)構(gòu)及其方法 狀態(tài)欄實(shí)際是一個(gè)窗口,一般分為幾個(gè)窗格,每個(gè)窗格顯狀態(tài)欄實(shí)際是一個(gè)窗口,一般分為幾個(gè)窗格,每個(gè)窗格顯示不同的信息。示不同的信息。 VC+在在Afxext.h中定義中定義CStatusBar類的結(jié)構(gòu)類的結(jié)構(gòu) 默認(rèn)狀態(tài)欄包含窗格:默認(rèn)狀態(tài)欄包含窗格: 默認(rèn)顯示狀態(tài)欄提示默認(rèn)顯示狀態(tài)欄提示 CAPS LOCK鍵的狀態(tài)鍵的狀態(tài) NUM LOCK鍵的狀態(tài)鍵的狀態(tài) SCROLL LOCK鍵的狀態(tài)鍵的狀態(tài)第第12章章 設(shè)計(jì)用戶界面

55、設(shè)計(jì)用戶界面創(chuàng)建狀態(tài)欄創(chuàng)建狀態(tài)欄 創(chuàng)建狀態(tài)欄的步驟:創(chuàng)建狀態(tài)欄的步驟: (1)構(gòu)造構(gòu)造CStatusBar對(duì)象。對(duì)象。 (2)調(diào)用調(diào)用Create創(chuàng)建狀態(tài)欄并將其與創(chuàng)建狀態(tài)欄并將其與CStatusBar對(duì)象聯(lián)結(jié)。對(duì)象聯(lián)結(jié)。 (3)調(diào)用成員函數(shù)調(diào)用成員函數(shù)SetIndicators,設(shè)置指示符的標(biāo)識(shí)符為數(shù),設(shè)置指示符的標(biāo)識(shí)符為數(shù)組中相應(yīng)元素指定的值,裝載每個(gè)標(biāo)識(shí)符指定的字符串資組中相應(yīng)元素指定的值,裝載每個(gè)標(biāo)識(shí)符指定的字符串資源并將字符串設(shè)為提示符文本。源并將字符串設(shè)為提示符文本。第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面12.3.2 利用利用AppWizard自動(dòng)創(chuàng)建狀態(tài)欄自動(dòng)創(chuàng)建狀態(tài)欄 利用利用

56、AppWizard生成應(yīng)用程序項(xiàng)目時(shí),只要選擇了初始化生成應(yīng)用程序項(xiàng)目時(shí),只要選擇了初始化狀態(tài)欄選項(xiàng),狀態(tài)欄選項(xiàng),AppWizard便可自動(dòng)生成狀態(tài)欄的內(nèi)容。便可自動(dòng)生成狀態(tài)欄的內(nèi)容。 包括:包括:1 1為為CMainFrameCMainFrame類定義狀態(tài)欄成員類定義狀態(tài)欄成員class CMainFrame : public CFrameWndprotected: / control bar embedded membersCStatusBar m_wndStatusBar;;第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面2定義把狀態(tài)欄分割為窗格的外部靜態(tài)數(shù)組定義把狀態(tài)欄分割為窗格的外部靜態(tài)數(shù)組在

57、在MainFrame.cpp文件中有以下一段代碼:文件中有以下一段代碼:static UINT indicators =ID_SEPARATOR, / status line indicatorID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,;第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面3創(chuàng)建狀態(tài)欄窗口創(chuàng)建狀態(tài)欄窗口狀 態(tài) 欄 窗 口 的 創(chuàng) 建 與 工 具 欄 一 樣 , 也 是 在狀 態(tài) 欄 窗 口 的 創(chuàng) 建 與 工 具 欄 一 樣 , 也 是 在CMainFrame:OnCreate()函數(shù)中完成的。代碼如下:函數(shù)中完成的。代碼如下:

58、int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)if (CFrameWnd:OnCreate(lpCreateStruct) = -1)return -1;if (!m_wndStatusBar.Create(this) |!m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)TRACE0(Failed to create status barn);return -1; / fail to create return 0;第第12章章 設(shè)計(jì)用戶

59、界面設(shè)計(jì)用戶界面Create()函數(shù)函數(shù) Create()函數(shù)用于創(chuàng)建一個(gè)函數(shù)用于創(chuàng)建一個(gè)Windows狀態(tài)欄狀態(tài)欄(子窗口子窗口),并將,并將其連接到其連接到CStatusBar對(duì)象上,同時(shí)設(shè)置初始字體和狀態(tài)欄對(duì)象上,同時(shí)設(shè)置初始字體和狀態(tài)欄的高度,該函數(shù)原型為:的高度,該函數(shù)原型為: BOOL Create(CWnd*pParentWnd, DWORD dwStyle = WS_CHILD | WS_VISIBLE| CBRS_BOTTOM,UINT nID = AFX_IDW_STATUS_BAR); pParentWnd為指向父窗口為指向父窗口CWnd對(duì)象的指針對(duì)象的指針 dwStyl

60、e指定狀態(tài)欄的風(fēng)格,除了標(biāo)準(zhǔn)的指定狀態(tài)欄的風(fēng)格,除了標(biāo)準(zhǔn)的Windows風(fēng)格外,還風(fēng)格外,還可以是可以是CBRS_TOP(狀態(tài)欄位于框架窗口的頂部狀態(tài)欄位于框架窗口的頂部)、CBRS_BOTTOM(狀態(tài)欄位于框架窗口的底部狀態(tài)欄位于框架窗口的底部)、CBRS_NOALIGN(當(dāng)父窗口改變時(shí),狀態(tài)欄不被重新定位當(dāng)父窗口改變時(shí),狀態(tài)欄不被重新定位) 參數(shù)參數(shù)nID表示該狀態(tài)欄的子窗口表示該狀態(tài)欄的子窗口ID 如果函數(shù)調(diào)用成功,則返回一個(gè)非如果函數(shù)調(diào)用成功,則返回一個(gè)非0值,否則返回值,否則返回0。第第12章章 設(shè)計(jì)用戶界面設(shè)計(jì)用戶界面SetIndIcators()函數(shù)函數(shù) 函數(shù)函數(shù)SetIndIc

溫馨提示

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