实验7菜单、工具栏和状态栏_第1页
实验7菜单、工具栏和状态栏_第2页
实验7菜单、工具栏和状态栏_第3页
实验7菜单、工具栏和状态栏_第4页
实验7菜单、工具栏和状态栏_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验7菜单、工具栏和状态栏一. 实验目的:掌握菜单和弹出式菜单制作以及利用菜单触发应用程序的方法掌握动态改变菜单方法掌握工具栏和状态栏的制作和使用方法二. 实验要求:7.1使用菜单编辑器对菜单编辑, 如添加主菜单项和子菜单等, 并掌握使用的方法, 如弹出 一个对话窗口或单击菜单与处理命令中的某个类的成员函数相联系。(例如,利用菜单选择不同宽度的笔,弹出一个颜色选择的对话窗口(利用CColorDialog Class ),选择笔的颜色等)提示:利用开发平台,添加菜单及对应标识(ID),然后利用ClassWizard 在应用程序窗口中响应实现某一功能。7.2掌握菜单的启用、 禁用和复选方法,例如在

2、单文档窗口上连击鼠标左键,将菜单中某项启动和禁用。提示:菜单的启用、禁用和复选分别表示菜单项的使用状态,如当菜单禁用时,该项将会“变灰”用户选择时不会被响应。7.3利用开发平台的多文档创建,观测菜单程序的设计方法,建立起多种不同的窗口并根据窗口动态更新菜单。(如,系统可弹出 3种类型的窗口,其中一个窗口是用鼠标画线,菜单包括笔的宽度,颜色等,一个窗口是在鼠标点击处画园,菜单选择不同半径和颜色,最后一个窗口是在上画正弦波(动态),菜单包括同时有几条,并利用菜单弹出一对话框,然后输入曲线的必要参数(如周期等)提示:在创建时不使用 Docume nt/View architecture suppor

3、t 。观察系统创建的程序框架,分别创建不同功能的窗口类(包括CMDIChildWnd和CWnd类)仔细观测菜单是否随在利用系统菜单,启动用户的不同类型窗口(包括增加菜单变量等), 窗口的不同而改变。在各窗口中编写相应的程序以实现各自的功能。7.5 创建弹出式菜单,在应用程序视图内右击鼠标时,将弹出该浮动菜单。 提示:增加右键单击时的消息处理 在响应函数处增加弹出菜单:CMenu menu;Menu.CreatePopupMenu();添加一个菜单项到该菜单:menu.AppendMenu( 0 , IDC_MY_MSG1,Wzd & 1 ) ; /这里 IDC_MY_MSG是定义的标识,Wzd

4、是菜单显示的内容在鼠标右击处显示该弹出式菜单: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() 销毁弹出式菜单对象。 lpmenu - DestroyMenu( );7.6 掌握使用工具栏编辑器 ( ToolBar

5、 Editor) 修改工具栏,以及创建新的工具栏的方法。7.7 启用和禁用工具栏按钮,根据应用程序的状态,灰化和正常化工具栏按钮。( 禁用的按钮显示灰色 ) 。7.8 为工具栏按钮添加字,在工具栏的按钮上添加文字,这样可表明按钮作用。7.9 非标准工具栏大小讨论改变工具栏按钮大小的方法。7.10 保持工具栏按钮按下讨论保持工具栏按钮按下的方法,以指示该功能正在使用7.11 为工具栏添加非按钮控件添加一个组合框到工具栏。7.12 修改应用程序的状态栏用字符串表编辑器 (String Table Editor) 修改应用程序的状态 栏。7.13 更新状态栏窗格使用 ClassWizard 创建一个

6、类,更新显示状态窗格上的文本消息。7.14 为状态栏添加其他控件添加一个按钮和进度指示控件到一个状态栏。三 实验过程菜单栏71 使用菜单编辑器对菜单编辑目标:掌握使用菜单编辑器对菜单进行编辑步骤:1选择 Resource View 选项卡,其中,节点 Menu 下就是菜单编辑,点击鼠标右键,可以 选择Insert Menu然后可以对菜单进行编辑。改变菜单属性可以选中菜单名称,然后点击 鼠标右键,选择 Properties 命令,显示“菜单属性”对话框,修改菜单属性。2添加一个新的菜单项到菜单中,用鼠标拖动空白焦点矩形到新菜单项的位置,然后,双击或右击该矩形,选择 properties 命令打开

7、属性对话框,在 I D 域定义个人的菜单 I D , 如果用户不输入任何 I D ,则系统自动创建一个 I D ,当单击该菜单项时,该 I D 成为命令 I D 发送到应用程序。 在 C a p t i o n (标题 ) 域输入菜单项的文本,在字符前面添加一个&号表示用户可以通过键盘访问该菜单项,该字符在菜单中显示一个下划线。3修改一个已有的菜单项,只要用鼠标选取它,并打开它的属性对话框;要删除一个菜单 项,用鼠标选中它,然后按键盘上的 Delete 键。4.用ClassWizard添加一个命令处理函数,菜单按钮ID_DIALOG_POPU,P添加一个消息映射函数 OnDialogPopup

8、,在sy715View.cp文件中添加如下代码 void CSy715View:OnDialogPopup()/ TODO: Add your command handler code hereCColorDialog dc ;dc.DoModal();7.2 掌握菜单的启用、禁用和复选方法,例如在单文档窗口上连击鼠标左键,将菜单中某项 启动和禁用。目标:启用、禁用和复选一个菜单项步骤:给对应菜单 ID_APP_ABOUT 用 ClassWizard 选择 UPDAT E_COMMAND_UI 创建一个用户 界面处理函数,定义布尔变量m_bivalue,如果 m_bivalue为TRUE,菜单

9、将变得有效,如果是FA L S E,则无效。使用 SetCheck函数控制函数的复选。添加如下代码void CSy715View:OnUpdateAppAbout(CCmdUI* pCmdUI)/ TODO: Add your command update UI handler code herepCmdUI-Enable(m_bivalue);/ 启用或禁用/pCmdUI-SetCheck(m_bivalue); / 复选添加鼠标左键消息处理函数 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 利用开发平台的多文档创建,观测菜单程序的设计方法,建立起多种不同的窗口并根 据窗口动态更新菜单。目标:掌握窗口动态更新菜单,实现在不同的窗口更新不同的菜单。步骤:1

11、在 split3Doc.h 文件中添加六个不同类型的成员变量,添加代码:public:CPoint p1,p2;COLORREF m_linecolor;int m_lineWidth,m_lineTYPE,m_circle_raidus;并且在 split3Doc.cpp 文件的构造函数 CSplit3Doc 中进行初始化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 函数,用于实现画图,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);同时添加鼠标的消息响应函数 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);初始点选择。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);目的点选择。对应在 Menu 下添加

15、菜单 IDR_SPLIT3TYPE ,并且修改菜单 line 选项,添加三个功能选项 LineColor , LineWidth , LineType ,并且在 split3View.cpp 文件添加三个消息响应函数,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 变量 具体值见 MSDNCSplit3Doc *pDoc = (CSplit3Doc*) GetD

17、ocument();pDoc-m_lineTYPE=PS_DASH;3同样的方法,添加两个基于CFormView 的新视图类 CircleView 和 CSplit3View ,对应的程序清单如下:#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;/画周期正弦,实事上有更好的差分办法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;/修改周期数的对话框/#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); /把这个换成修改 pDoc-m_circle_raidu

40、s 的对话框 75 创建弹出式菜单,在应用程序视图内右击鼠标时,将弹出该浮动菜单。1添加鼠标右键按下消息函数 OnRButtonDown ,在函数中设置对应浮动菜单的内容,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添加鼠标右键释放的消息映射函数OnRButtonUp ,添加如下代码,使得浮动菜单能够在视图内显示,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、及创建新的工具栏的方法。 目标:使用工具栏编辑器编辑应用程序的状态栏,或添加附加的工具栏到应用程序中。 注意:给应用程序添加的任何新的工具栏按钮,初始时显示灰色并且是无效的,直到添加 一个处理该按钮的命令处理函数为止。步骤:1. 应用 Developer Studio 创建一个新的工具栏要创建一个新的工具栏,单击Developer Studio 的 I n s e r t / R e s o u r c e 菜单命令,打开I n s e r t / R e s o u r c e对话框,然后从列表中选取 To o l B a r,并单击N e w,添加新工具 栏栏名称 IDR_TOOLBAR1

45、 。2. 应用工具栏编辑器编辑一个工具栏1) 编辑一个已有的工具栏,在应用程序资源的工具栏文件夹中找到它的I D ,并双击它,这将打开 ToolBar Editor 。2) 用工具栏编辑器添加一个新的按钮到工具栏,先用鼠标拖动工具栏末尾的空白工具栏按钮,放到新按钮的位置,然后用位图编辑器添加一个图像到该按钮上。要打开该按钮的属 性对话框,双击它在窗口上方的图像即可(见图 7 - 1 )。拖动工具栏尾部曲空H按钮到新匚H栏按钮的位置双击按钮打开它的K Propertiesw 对话框用位图编辑器创建按 顿的位图图7用匸具栏编辑器添加按钮3) 添加一个间隔(s p a c e r )到该工具栏(按钮

46、间的空白区)。首先,确定当前哪个按钮正好在放置间隔的位置处,并用鼠标抓住它;然后稍微往右拖动该按钮,并放开它,此时应该出现一个空白间隔。要删除一个间隔,稍微拖动当前在它右边的按钮,并覆盖它。要删除一个按钮,只要把它拖离工具栏即可。如果出现误操作,则用Developer Studio的u n d o命令取消误操作。4) 每个按钮的属性对话框显示与菜单项的属性框相同的I D和P r o m p t编辑框。尺寸编辑框(size edit box)不仅允许改变该按钮的大小,而且可以改变每个按钮的大小,参见例7.9关于创建非标准工具栏按钮。5) 为工具栏按钮添加一个命令处理函数,与添加一个菜单命令处理函

47、数相同(参见例7.1 )。实际上,工具栏按钮是一个菜单命令的图形表示,没有相应菜单的工具栏按钮几乎不存在,尽管这是传统意义上的规定。技术上可以添加一个没有相应菜单的工具栏按钮。3. 添加一个新的工具栏到应用程序1) 使用Developer Studio和工具栏编辑器创建一个新的工具栏后,在CMainFrame添加一个CToolBar派生的类 m_wndToolBar1 ,同时必须添加下面的代码到 CMainFrame类的Create() 函数中,正好在添加原始工具栏的代码后面。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); / 设置工具栏类型 m _wn dToolBar1.E nableDocki ng (CBRS_ ALIGN_ANY);2) 新的工具栏一排接一排地垂直添加到应用程序的窗口中,如果使工具栏一个接一个水 平地

49、添加到窗口中,可以用下面的代码:DockControlBarLeftOf(&m_wndToolBar1, & m_wndToolBar) ;(禁用的按7.7 启用和禁用工具栏按钮,根据应用程序的状态,灰化和正常化工具栏按钮。 钮显示灰色 )。目标:启用或禁用一个工具栏按钮 (禁用的按钮显示灰色 )。步骤:在实验 7.6 基础上,给工具栏按钮添加一个用户见面函数1)打开 class wizard 找到对应工具栏按钮 ID ,选用 UPDATE_COMMAND_UI 添加新的函数 2)添加下面的代码到新的处理函数中,如果启用工具栏按钮,则m_bWzd 为 TRUE 。void CWzdView :

50、 : OnUpdateWzdType(CCmdUI* pCmdUI)pCmd UI - Enable ( m_bWzd ) ;7.8 为工具栏按钮添加字,在工具栏的按钮上添加文字,这样可表明按钮作用。 目标:熟悉在工具栏按钮上添加文字步骤:在 MainFrm.cpp 文件中, OnCreate 函数添加如下代码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 参数TRACE0(Failed to create toolbarn);return -1;/ fail to create m_wndToolBar.LoadToolBar(IDR_MAINFRAME);/这

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论