實(shí)驗(yàn)7菜單、工具欄和狀態(tài)欄_第1頁(yè)
實(shí)驗(yàn)7菜單、工具欄和狀態(tài)欄_第2頁(yè)
實(shí)驗(yàn)7菜單、工具欄和狀態(tài)欄_第3頁(yè)
實(shí)驗(yàn)7菜單、工具欄和狀態(tài)欄_第4頁(yè)
實(shí)驗(yàn)7菜單、工具欄和狀態(tài)欄_第5頁(yè)
已閱讀5頁(yè),還剩35頁(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、實(shí)驗(yàn)7菜單、工具欄和狀態(tài)欄一. 實(shí)驗(yàn)?zāi)康模赫莆詹藛魏蛷棾鍪讲藛沃谱饕约袄貌藛斡|發(fā)應(yīng)用程序的方法掌握動(dòng)態(tài)改變菜單方法掌握工具欄和狀態(tài)欄的制作和使用方法二. 實(shí)驗(yàn)要求:7.1使用菜單編輯器對(duì)菜單編輯, 如添加主菜單項(xiàng)和子菜單等, 并掌握使用的方法, 如彈出 一個(gè)對(duì)話窗口或單擊菜單與處理命令中的某個(gè)類的成員函數(shù)相聯(lián)系。(例如,利用菜單選擇不同寬度的筆,彈出一個(gè)顏色選擇的對(duì)話窗口(利用CColorDialog Class ),選擇筆的顏色等)提示:利用開(kāi)發(fā)平臺(tái),添加菜單及對(duì)應(yīng)標(biāo)識(shí)(ID),然后利用ClassWizard 在應(yīng)用程序窗口中響應(yīng)實(shí)現(xiàn)某一功能。7.2掌握菜單的啟用、 禁用和復(fù)選方法,例如在

2、單文檔窗口上連擊鼠標(biāo)左鍵,將菜單中某項(xiàng)啟動(dòng)和禁用。提示:菜單的啟用、禁用和復(fù)選分別表示菜單項(xiàng)的使用狀態(tài),如當(dāng)菜單禁用時(shí),該項(xiàng)將會(huì)“變灰”用戶選擇時(shí)不會(huì)被響應(yīng)。7.3利用開(kāi)發(fā)平臺(tái)的多文檔創(chuàng)建,觀測(cè)菜單程序的設(shè)計(jì)方法,建立起多種不同的窗口并根據(jù)窗口動(dòng)態(tài)更新菜單。(如,系統(tǒng)可彈出 3種類型的窗口,其中一個(gè)窗口是用鼠標(biāo)畫(huà)線,菜單包括筆的寬度,顏色等,一個(gè)窗口是在鼠標(biāo)點(diǎn)擊處畫(huà)園,菜單選擇不同半徑和顏色,最后一個(gè)窗口是在上畫(huà)正弦波(動(dòng)態(tài)),菜單包括同時(shí)有幾條,并利用菜單彈出一對(duì)話框,然后輸入曲線的必要參數(shù)(如周期等)提示:在創(chuàng)建時(shí)不使用 Docume nt/View architecture suppor

3、t 。觀察系統(tǒng)創(chuàng)建的程序框架,分別創(chuàng)建不同功能的窗口類(包括CMDIChildWnd和CWnd類)仔細(xì)觀測(cè)菜單是否隨在利用系統(tǒng)菜單,啟動(dòng)用戶的不同類型窗口(包括增加菜單變量等), 窗口的不同而改變。在各窗口中編寫(xiě)相應(yīng)的程序以實(shí)現(xiàn)各自的功能。7.5 創(chuàng)建彈出式菜單,在應(yīng)用程序視圖內(nèi)右擊鼠標(biāo)時(shí),將彈出該浮動(dòng)菜單。 提示:增加右鍵單擊時(shí)的消息處理 在響應(yīng)函數(shù)處增加彈出菜單:CMenu menu;Menu.CreatePopupMenu();添加一個(gè)菜單項(xiàng)到該菜單:menu.AppendMenu( 0 , IDC_MY_MSG1,Wzd & 1 ) ; /這里 IDC_MY_MSG是定義的標(biāo)識(shí),Wzd

4、是菜單顯示的內(nèi)容在鼠標(biāo)右擊處顯示該彈出式菜單:CMenu menu ;menu.LoadMenu( ID_MENU_MY );CMenu * lpmenu ;lpmenu = menu.GetSubMenu(0);CPoint pt;GetCursorPos( & pt ) ;lpmenu - TrackPopupMenu( TPM_RIGHTBUTTON,pt.x,pt.y,this);在使用了 TrackPopupMenu() 命令后,必須使用 DestroyMenu() 銷毀彈出式菜單對(duì)象。 lpmenu - DestroyMenu( );7.6 掌握使用工具欄編輯器 ( ToolBar

5、 Editor) 修改工具欄,以及創(chuàng)建新的工具欄的方法。7.7 啟用和禁用工具欄按鈕,根據(jù)應(yīng)用程序的狀態(tài),灰化和正?;ぞ邫诎粹o。( 禁用的按鈕顯示灰色 ) 。7.8 為工具欄按鈕添加字,在工具欄的按鈕上添加文字,這樣可表明按鈕作用。7.9 非標(biāo)準(zhǔn)工具欄大小討論改變工具欄按鈕大小的方法。7.10 保持工具欄按鈕按下討論保持工具欄按鈕按下的方法,以指示該功能正在使用7.11 為工具欄添加非按鈕控件添加一個(gè)組合框到工具欄。7.12 修改應(yīng)用程序的狀態(tài)欄用字符串表編輯器 (String Table Editor) 修改應(yīng)用程序的狀態(tài) 欄。7.13 更新?tīng)顟B(tài)欄窗格使用 ClassWizard 創(chuàng)建一個(gè)

6、類,更新顯示狀態(tài)窗格上的文本消息。7.14 為狀態(tài)欄添加其他控件添加一個(gè)按鈕和進(jìn)度指示控件到一個(gè)狀態(tài)欄。三 實(shí)驗(yàn)過(guò)程菜單欄71 使用菜單編輯器對(duì)菜單編輯目標(biāo):掌握使用菜單編輯器對(duì)菜單進(jìn)行編輯步驟:1選擇 Resource View 選項(xiàng)卡,其中,節(jié)點(diǎn) Menu 下就是菜單編輯,點(diǎn)擊鼠標(biāo)右鍵,可以 選擇Insert Menu然后可以對(duì)菜單進(jìn)行編輯。改變菜單屬性可以選中菜單名稱,然后點(diǎn)擊 鼠標(biāo)右鍵,選擇 Properties 命令,顯示“菜單屬性”對(duì)話框,修改菜單屬性。2添加一個(gè)新的菜單項(xiàng)到菜單中,用鼠標(biāo)拖動(dòng)空白焦點(diǎn)矩形到新菜單項(xiàng)的位置,然后,雙擊或右擊該矩形,選擇 properties 命令打開(kāi)

7、屬性對(duì)話框,在 I D 域定義個(gè)人的菜單 I D , 如果用戶不輸入任何 I D ,則系統(tǒng)自動(dòng)創(chuàng)建一個(gè) I D ,當(dāng)單擊該菜單項(xiàng)時(shí),該 I D 成為命令 I D 發(fā)送到應(yīng)用程序。 在 C a p t i o n (標(biāo)題 ) 域輸入菜單項(xiàng)的文本,在字符前面添加一個(gè)&號(hào)表示用戶可以通過(guò)鍵盤訪問(wèn)該菜單項(xiàng),該字符在菜單中顯示一個(gè)下劃線。3修改一個(gè)已有的菜單項(xiàng),只要用鼠標(biāo)選取它,并打開(kāi)它的屬性對(duì)話框;要?jiǎng)h除一個(gè)菜單 項(xiàng),用鼠標(biāo)選中它,然后按鍵盤上的 Delete 鍵。4.用ClassWizard添加一個(gè)命令處理函數(shù),菜單按鈕ID_DIALOG_POPU,P添加一個(gè)消息映射函數(shù) OnDialogPopup

8、,在sy715View.cp文件中添加如下代碼 void CSy715View:OnDialogPopup()/ TODO: Add your command handler code hereCColorDialog dc ;dc.DoModal();7.2 掌握菜單的啟用、禁用和復(fù)選方法,例如在單文檔窗口上連擊鼠標(biāo)左鍵,將菜單中某項(xiàng) 啟動(dòng)和禁用。目標(biāo):?jiǎn)⒂谩⒔煤蛷?fù)選一個(gè)菜單項(xiàng)步驟:給對(duì)應(yīng)菜單 ID_APP_ABOUT 用 ClassWizard 選擇 UPDAT E_COMMAND_UI 創(chuàng)建一個(gè)用戶 界面處理函數(shù),定義布爾變量m_bivalue,如果 m_bivalue為TRUE,菜單

9、將變得有效,如果是FA L S E,則無(wú)效。使用 SetCheck函數(shù)控制函數(shù)的復(fù)選。添加如下代碼void CSy715View:OnUpdateAppAbout(CCmdUI* pCmdUI)/ TODO: Add your command update UI handler code herepCmdUI-Enable(m_bivalue);/ 啟用或禁用/pCmdUI-SetCheck(m_bivalue); / 復(fù)選添加鼠標(biāo)左鍵消息處理函數(shù) OnLButtonDown ,雙擊啟用或者禁用菜單功能,添加代碼如 下:void CSy715View:OnLButtonDown(UINT nF

10、lags, CPoint point)/ TODO: Add your message handler code here and/or call defaultm_bicaptured=true;if(m_bicaptured)count+;if(count%2=0&count!=0)m_bivalue=true;elsem_bivalue=false;CView:OnLButtonDown(nFlags, point);7 3 利用開(kāi)發(fā)平臺(tái)的多文檔創(chuàng)建,觀測(cè)菜單程序的設(shè)計(jì)方法,建立起多種不同的窗口并根 據(jù)窗口動(dòng)態(tài)更新菜單。目標(biāo):掌握窗口動(dòng)態(tài)更新菜單,實(shí)現(xiàn)在不同的窗口更新不同的菜單。步驟:1

11、在 split3Doc.h 文件中添加六個(gè)不同類型的成員變量,添加代碼:public:CPoint p1,p2;COLORREF m_linecolor;int m_lineWidth,m_lineTYPE,m_circle_raidus;并且在 split3Doc.cpp 文件的構(gòu)造函數(shù) CSplit3Doc 中進(jìn)行初始化CSplit3Doc:CSplit3Doc()/ TODO: add one-time construction code herep2 = p1 = CPoint(0,0);m_lineWidth = 3;m_lineTYPE = PS_SOLID;m_circle_ra

12、idus =10;2在 split3View.cpp 文件的修改 OnDraw 函數(shù),用于實(shí)現(xiàn)畫(huà)圖,void CSplit3View:OnDraw(CDC* pDC)/ TODO: Add your specialized code here and/or call the base classCSplit3Doc *pDoc = (CSplit3Doc*) GetDocument();CPen *newpen = new CPen(pDoc-m_lineTYPE,pDoc-m_lineWidth,pDoc-m_linecolor);CPen *oldpen = pDC-SelectObjec

13、t(newpen);pDC-MoveTo(pDoc-p1);pDC-LineTo(pDoc-p2);pDC-SelectObject(oldpen);同時(shí)添加鼠標(biāo)的消息響應(yīng)函數(shù) OnLButtonDown 和 OnLButtonDown ,添加代碼,void CSplit3View:OnLButtonDown(UINT nFlags, CPoint point)/ TODO: Add your message handler code here and/or call defaultCSplit3Doc *pDoc = (CSplit3Doc*) GetDocument();pDoc-p1 =

14、 point;CFormView:OnLButtonDown(nFlags, point);初始點(diǎn)選擇。void CSplit3View:OnLButtonUp(UINT nFlags, CPoint point)/ TODO: Add your message handler code here and/or call defaultCSplit3Doc *pDoc = (CSplit3Doc*) GetDocument();pDoc-p2 = point;Invalidate();CFormView:OnLButtonUp(nFlags, point);目的點(diǎn)選擇。對(duì)應(yīng)在 Menu 下添加

15、菜單 IDR_SPLIT3TYPE ,并且修改菜單 line 選項(xiàng),添加三個(gè)功能選項(xiàng) LineColor , LineWidth , LineType ,并且在 split3View.cpp 文件添加三個(gè)消息響應(yīng)函數(shù),void CSplit3View:OnLinePara()CColorDialog cdig;if(cdig.DoModal() = IDOK)CSplit3Doc *pDoc = (CSplit3Doc*) GetDocument(); pDoc-m_linecolor = cdig.GetColor();void CSplit3View:OnLineWidth()/ TODO

16、: Add your command handler code here/ 修改 CSplit3Doc 的 m_lineWidth 變量CSplit3Doc *pDoc = (CSplit3Doc*) GetDocument();pDoc-m_lineWidth=3+3 * (rand() % 3);void CSplit3View:OnLineType()/ TODO: Add your command handler code here/ 修改 CSplit3Doc 的 m_lineTYPE 變量 具體值見(jiàn) MSDNCSplit3Doc *pDoc = (CSplit3Doc*) GetD

17、ocument();pDoc-m_lineTYPE=PS_DASH;3同樣的方法,添加兩個(gè)基于CFormView 的新視圖類 CircleView 和 CSplit3View ,對(duì)應(yīng)的程序清單如下:#if !defined(AFX_SINEVIEW_H_FEF0D315_F3F7_4447_9F75_C0B263FFF1D8_INCLUDE D_)#define AFX_SINEVIEW_H_FEF0D315_F3F7_4447_9F75_C0B263FFF1D8_INCLUDED_#if _MSC_VER 1000#pragma once#endif / _MSC_VER 1000/ Sin

18、eView.h : header file/ SineView form view#ifndef _AFXEXT_H_#include #endifclass SineView : public CFormViewprotected:SineView();/ protected constructor used by dynamic creation/ Form DataDECLARE_DYNCREATE(SineView)public:/AFX_DATA(SineView)enum IDD = IDD_SINEVIEW_FORM ;/ NOTE: the ClassWizard will a

19、dd data members here/AFX_DATA/ Attributespublic:/ Operationsprivate:int m_sine_time;/ Overrides/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(SineView)protected:/ DDX/DDV supportvirtual void DoDataExchange(CDataExchange* pDX);virtual void OnDraw(CDC* pDC);/AFX_VIRTUAL/ Implementation

20、protected:#ifdef _DEBUGvirtual SineView();virtual void AssertValid() const;virtual void Dump(CDumpContext& dc) const;#endif/ Generated message map functions/AFX_MSG(SineView)afx_msg void OnSinePara();afx_msg void OnLButtonDown(UINT nFlags, CPoint point);afx_msg void OnLButtonUp(UINT nFlags, CPoint p

21、oint);afx_msg void OnSineTime();/AFX_MSGDECLARE_MESSAGE_MAP();/AFX_INSERT_LOCA TION/ Microsoft Visual C+ will insert additional declarations immediately before the previous line.#endif/ !defined(AFX_SINEVIEW_H_FEF0D315_F3F7_4447_9F75_C0B263FFF1D8_INCLUDED _)/#include stdafx.h #include split3.h#inclu

22、de SineView.h#include Split3DOc.h#include #ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ SineViewIMPLEMENT_DYNCREATE(SineView, CFormView)SineView:SineView(): CFormView(SineView:IDD)/AFX_DATA_INIT(SineView)/ NOTE: the ClassWizard will add member initializatio

23、n here/AFX_DATA_INITm_sine_time = 6;/ SineView diagnosticsSineView:SineView()void SineView:DoDataExchange(CDataExchange* pDX)CFormView:DoDataExchange(pDX);/AFX_DATA_MAP(SineView)/ NOTE: the ClassWizard will add DDX and DDV calls here/AFX_DATA_MAPBEGIN_MESSAGE_MAP(SineView, CFormView)/AFX_MSG_MAP(Sin

24、eView)ON_COMMAND(ID_SINE_PARA, OnSinePara)ON_WM_LBUTTONDOWN()ON_WM_LBUTTONUP()ON_COMMAND(ID_SINE_TIME, OnSineTime)/AFX_MSG_MAPEND_MESSAGE_MAP()/#ifdef _DEBUGvoid SineView:AssertValid() constCFormView:AssertValid();void SineView:Dump(CDumpContext& dc) constCFormView:Dump(dc);#endif /_DEBUG/ SineView

25、message handlersvoid SineView:OnSinePara()CColorDialog cdig;if(cdig.DoModal() = IDOK)CSplit3Doc *pDoc = (CSplit3Doc*) GetDocument();pDoc-m_linecolor = cdig.GetColor();void SineView:OnDraw(CDC* pDC)CSplit3Doc *pDoc = (CSplit3Doc*) GetDocument();CPen *newpen = new CPen(pDoc-m_lineTYPE,pDoc-m_lineWidth

26、,pDoc-m_linecolor);CPen *oldpen = pDC-SelectObject(newpen);int len = pDoc-p1.x - pDoc-p2.x;int amp = pDoc-p1.y - pDoc-p2.y;int i,x,y;/畫(huà)周期正弦,實(shí)事上有更好的差分辦法for(i=0;ip1.x - abs(len)/len* i;y = (pDoc-p1.y + pDoc-p2.y) /2 +amp/2 * sin(i*m_sine_time*6.18/len);pDC-SetPixel(x,y,pDoc-m_linecolor);pDC-SelectObje

27、ct(oldpen);void SineView:OnLButtonDown(UINT nFlags, CPoint point)CSplit3Doc *pDoc = (CSplit3Doc*) GetDocument();pDoc-p1 = point;CFormView:OnLButtonDown(nFlags, point);void SineView:OnLButtonUp(UINT nFlags, CPoint point)CSplit3Doc *pDoc = (CSplit3Doc*) GetDocument();pDoc-p2 = point;Invalidate();CForm

28、View:OnLButtonUp(nFlags, point);void SineView:OnSineTime()/ TODO: Add your command handler code herem_sine_time = (+m_sine_time) % 10;/修改周期數(shù)的對(duì)話框/#if !defined(AFX_IRCLEVIEW_H_F9D0731A_5005_4474_A822_3B408CB84C06_INCLUD ED_)#define AFX_IRCLEVIEW_H_F9D0731A_5005_4474_A822_3B408CB84C06_INCLUDED_#if _MSC

29、_VER 1000#pragma once #endif / _MSC_VER 1000/ ircleView.h : header file/ CircleView form view#ifndef _AFXEXT_H_#include #endifclass CircleView : public CFormViewprotected:CircleView();/ protected constructor used by dynamic creationDECLARE_DYNCREATE(CircleView)/ Form Datapublic:/AFX_DATA(CircleView)

30、enum IDD = IDD_IRCLEVIEW_FORM ;/ NOTE: the ClassWizard will add data members here/AFX_DATA / Attributespublic: / Operationspublic:/ Overrides/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CircleView)protected:/ DDX/DDV supportvirtual void DoDataExchange(CDataExchange* pDX);virtual vo

31、id OnDraw(CDC* pDC);/AFX_VIRTUAL/ Implementationprotected:virtual CircleView();#ifdef _DEBUGvirtual void AssertValid() const;virtual void Dump(CDumpContext& dc) const;#endif/ Generated message map functions/AFX_MSG(CircleView)afx_msg void OnLButtonUp(UINT nFlags, CPoint point);afx_msg void OnLButton

32、Down(UINT nFlags, CPoint point);afx_msg void OnCircleColor();afx_msg void OnCircleRaidus();/AFX_MSGDECLARE_MESSAGE_MAP();/AFX_INSERT_LOCA TION/ Microsoft Visual C+ will insert additional declarations immediately before the previous line.#endif/ !defined(AFX_IRCLEVIEW_H_F9D0731A_5005_4474_A822_3B408C

33、B84C06_INCLUDE D_)/ ircleView.cpp : implementation file#include stdafx.h#include split3.h#include ircleView.h#include Split3doc.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ / CircleViewIMPLEMENT_DYNCREATE(CircleView, CFormView)CircleView:CircleView(): CFo

34、rmView(CircleView:IDD)/AFX_DATA_INIT(CircleView)/ NOTE: the ClassWizard will add member initialization here/AFX_DATA_INITCircleView:CircleView()void CircleView:DoDataExchange(CDataExchange* pDX)CFormView:DoDataExchange(pDX);/AFX_DATA_MAP(CircleView)/ NOTE: the ClassWizard will add DDX and DDV calls

35、here/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CircleView, CFormView)/AFX_MSG_MAP(CircleView)ON_WM_LBUTTONUP()ON_WM_LBUTTONDOWN()ON_COMMAND(ID_CIRCLE_COLOR, OnCircleColor)ON_COMMAND(ID_CIRCLE_RAIDUS, OnCircleRaidus)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CircleView diagnostics#ifdef _DEBUGvoid CircleView:AssertValid() c

36、onstCFormView:AssertValid();void CircleView:Dump(CDumpContext& dc) constCFormView:Dump(dc);#endif /_DEBUG/ / CircleView message handlersvoid CircleView:OnDraw(CDC* pDC)CSplit3Doc *pDoc = (CSplit3Doc*) GetDocument();CPen *newpen = new CPen(pDoc-m_lineTYPE,pDoc-m_lineWidth,pDoc-m_linecolor);CPen *oldp

37、en = pDC-SelectObject(newpen);pDC-MoveTo(pDoc-p1);pDC-Ellipse(pDoc-p1.x - pDoc-m_circle_raidus,pDoc-p1.y - pDoc-m_circle_raidus,pDoc-p1.x + pDoc-m_circle_raidus,pDoc-p1.y + pDoc-m_circle_raidus);pDC-SelectObject(oldpen);void CircleView:OnLButtonUp(UINT nFlags, CPoint point)CSplit3Doc *pDoc = (CSplit

38、3Doc*) GetDocument();pDoc-p2 = point;Invalidate();CFormView:OnLButtonUp(nFlags, point);void CircleView:OnLButtonDown(UINT nFlags, CPoint point)CSplit3Doc *pDoc = (CSplit3Doc*) GetDocument();pDoc-p1 = point;CFormView:OnLButtonDown(nFlags, point);void CircleView:OnCircleColor()CColorDialog cdig;if(cdi

39、g.DoModal() = IDOK)CSplit3Doc *pDoc = (CSplit3Doc*) GetDocument(); pDoc-m_linecolor = cdig.GetColor();void CircleView:OnCircleRaidus()/ TODO: Add your command handler code hereCSplit3Doc *pDoc = (CSplit3Doc*) GetDocument(); pDoc-m_circle_raidus = 10 + 10 * (rand() % 10); /把這個(gè)換成修改 pDoc-m_circle_raidu

40、s 的對(duì)話框 75 創(chuàng)建彈出式菜單,在應(yīng)用程序視圖內(nèi)右擊鼠標(biāo)時(shí),將彈出該浮動(dòng)菜單。1添加鼠標(biāo)右鍵按下消息函數(shù) OnRButtonDown ,在函數(shù)中設(shè)置對(duì)應(yīng)浮動(dòng)菜單的內(nèi)容,void CSy715View:OnRButtonDown(UINT nFlags, CPoint point)/ TODO: Add your message handler code here and/or call defaultCMenu menu;menu.CreatePopupMenu( );menu.AppendMenu(0,IDC_WZD1_TYPE, Wzd&1) ; menu.AppendMenu(MF_

41、CHECKED,IDC_WZD2_TYPE, Wzd&2) ;menu.AppendMenu(MF_SEPARATOR,0) ;menu.AppendMenu(MF_GRAYED,IDC_WZD3_TYPE, Wzd&3) ;menu.AppendMenu(0,IDC_WZD4_TYPE, Wzd&4) ; menu.CheckMenuRadioItem(IDC_WZD3_TYPE,IDC_WZD4_TYPE,IDC_WZD4_TYPE,MF_BYCOMMAND) ;:SetMenuDefaultItem(menu.m_hMenu, IDC_WZD4_TYPE,MF_BYCOMMAND);Ge

42、tCursorPos(&point); menu.TrackPopupMenu(TPM_RIGHTBUTTON,point.x,point.y,this); menu.DestroyMenu();CView:OnRButtonDown(nFlags, point);2添加鼠標(biāo)右鍵釋放的消息映射函數(shù)OnRButtonUp ,添加如下代碼,使得浮動(dòng)菜單能夠在視圖內(nèi)顯示,void CSy715View:OnRButtonUp(UINT nFlags, CPoint point)/ TODO: Add your message handler code here and/or call default

43、CPoint PopupPoint=point;ClientToScreen(&PopupPoint);m_PopupMenu.LoadMenu(IDR_MENU1);m_PopupMenu.GetSubMenu(0)-TrackPopupMenu(TPM_RIGHTBUTTON|TPM_LEFTBUTTON,PopupPoint.x,PopupPoint.y,AfxGetMainWnd();m_PopupMenu.DestroyMenu();CView:OnRButtonUp(nFlags, point);工具欄7.6 掌握使用工具欄編輯器 ( ToolBar Editor) 修改工具欄,以

44、及創(chuàng)建新的工具欄的方法。 目標(biāo):使用工具欄編輯器編輯應(yīng)用程序的狀態(tài)欄,或添加附加的工具欄到應(yīng)用程序中。 注意:給應(yīng)用程序添加的任何新的工具欄按鈕,初始時(shí)顯示灰色并且是無(wú)效的,直到添加 一個(gè)處理該按鈕的命令處理函數(shù)為止。步驟:1. 應(yīng)用 Developer Studio 創(chuàng)建一個(gè)新的工具欄要?jiǎng)?chuàng)建一個(gè)新的工具欄,單擊Developer Studio 的 I n s e r t / R e s o u r c e 菜單命令,打開(kāi)I n s e r t / R e s o u r c e對(duì)話框,然后從列表中選取 To o l B a r,并單擊N e w,添加新工具 欄欄名稱 IDR_TOOLBAR1

45、 。2. 應(yīng)用工具欄編輯器編輯一個(gè)工具欄1) 編輯一個(gè)已有的工具欄,在應(yīng)用程序資源的工具欄文件夾中找到它的I D ,并雙擊它,這將打開(kāi) ToolBar Editor 。2) 用工具欄編輯器添加一個(gè)新的按鈕到工具欄,先用鼠標(biāo)拖動(dòng)工具欄末尾的空白工具欄按鈕,放到新按鈕的位置,然后用位圖編輯器添加一個(gè)圖像到該按鈕上。要打開(kāi)該按鈕的屬 性對(duì)話框,雙擊它在窗口上方的圖像即可(見(jiàn)圖 7 - 1 )。拖動(dòng)工具欄尾部曲空H按鈕到新匚H欄按鈕的位置雙擊按鈕打開(kāi)它的K Propertiesw 對(duì)話框用位圖編輯器創(chuàng)建按 頓的位圖圖7用匸具欄編輯器添加按鈕3) 添加一個(gè)間隔(s p a c e r )到該工具欄(按鈕

46、間的空白區(qū))。首先,確定當(dāng)前哪個(gè)按鈕正好在放置間隔的位置處,并用鼠標(biāo)抓住它;然后稍微往右拖動(dòng)該按鈕,并放開(kāi)它,此時(shí)應(yīng)該出現(xiàn)一個(gè)空白間隔。要?jiǎng)h除一個(gè)間隔,稍微拖動(dòng)當(dāng)前在它右邊的按鈕,并覆蓋它。要?jiǎng)h除一個(gè)按鈕,只要把它拖離工具欄即可。如果出現(xiàn)誤操作,則用Developer Studio的u n d o命令取消誤操作。4) 每個(gè)按鈕的屬性對(duì)話框顯示與菜單項(xiàng)的屬性框相同的I D和P r o m p t編輯框。尺寸編輯框(size edit box)不僅允許改變?cè)摪粹o的大小,而且可以改變每個(gè)按鈕的大小,參見(jiàn)例7.9關(guān)于創(chuàng)建非標(biāo)準(zhǔn)工具欄按鈕。5) 為工具欄按鈕添加一個(gè)命令處理函數(shù),與添加一個(gè)菜單命令處理函

47、數(shù)相同(參見(jiàn)例7.1 )。實(shí)際上,工具欄按鈕是一個(gè)菜單命令的圖形表示,沒(méi)有相應(yīng)菜單的工具欄按鈕幾乎不存在,盡管這是傳統(tǒng)意義上的規(guī)定。技術(shù)上可以添加一個(gè)沒(méi)有相應(yīng)菜單的工具欄按鈕。3. 添加一個(gè)新的工具欄到應(yīng)用程序1) 使用Developer Studio和工具欄編輯器創(chuàng)建一個(gè)新的工具欄后,在CMainFrame添加一個(gè)CToolBar派生的類 m_wndToolBar1 ,同時(shí)必須添加下面的代碼到 CMainFrame類的Create() 函數(shù)中,正好在添加原始工具欄的代碼后面。if (!m_w ndToolBar1.Create(this) |!m_wn dToolBar1.LoadToolB

48、arEX(IDR_TOOLBAR1)TRACE0(Failed to create status barn ”);return -1;/ fail to create/建立工具欄m _wn dToolBar1.SetBarStyle(m _wn dToolBar1.GetBarStyle() | CBRS_TOOLTIPS|CBRS_FL YBY | CBRS_SIZE_DYNAMIC); / 設(shè)置工具欄類型 m _wn dToolBar1.E nableDocki ng (CBRS_ ALIGN_ANY);2) 新的工具欄一排接一排地垂直添加到應(yīng)用程序的窗口中,如果使工具欄一個(gè)接一個(gè)水 平地

49、添加到窗口中,可以用下面的代碼:DockControlBarLeftOf(&m_wndToolBar1, & m_wndToolBar) ;(禁用的按7.7 啟用和禁用工具欄按鈕,根據(jù)應(yīng)用程序的狀態(tài),灰化和正?;ぞ邫诎粹o。 鈕顯示灰色 )。目標(biāo):?jiǎn)⒂没蚪靡粋€(gè)工具欄按鈕 (禁用的按鈕顯示灰色 )。步驟:在實(shí)驗(yàn) 7.6 基礎(chǔ)上,給工具欄按鈕添加一個(gè)用戶見(jiàn)面函數(shù)1)打開(kāi) class wizard 找到對(duì)應(yīng)工具欄按鈕 ID ,選用 UPDATE_COMMAND_UI 添加新的函數(shù) 2)添加下面的代碼到新的處理函數(shù)中,如果啟用工具欄按鈕,則m_bWzd 為 TRUE 。void CWzdView :

50、 : OnUpdateWzdType(CCmdUI* pCmdUI)pCmd UI - Enable ( m_bWzd ) ;7.8 為工具欄按鈕添加字,在工具欄的按鈕上添加文字,這樣可表明按鈕作用。 目標(biāo):熟悉在工具欄按鈕上添加文字步驟:在 MainFrm.cpp 文件中, OnCreate 函數(shù)添加如下代碼int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)if (CFrameWnd:OnCreate(lpCreateStruct) = -1)return -1;if(!m_wndToolBar.CreateEx(this,TBSTYLE_TRANSPARENT|TBSTYLE_LIST|TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FL YBY |CBRS_SIZE_DYNAMIC|CCS_ADJUSTABLE )/需要 TBSTYLE_LIST 參數(shù)TRACE0(Failed to create toolbarn);return -1;/ fail to create m_wndToolBar.LoadToolBar(IDR_MAINFRAME);/這

溫馨提示

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