实验7 菜单工具栏和状态栏.docx
- 文档编号:7725415
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:34
- 大小:557.31KB
实验7 菜单工具栏和状态栏.docx
《实验7 菜单工具栏和状态栏.docx》由会员分享,可在线阅读,更多相关《实验7 菜单工具栏和状态栏.docx(34页珍藏版)》请在冰豆网上搜索。
实验7菜单工具栏和状态栏
实验7菜单、工具栏和状态栏
一.实验目的:
∙掌握菜单和弹出式菜单制作以及利用菜单触发应用程序的方法
∙掌握动态改变菜单方法
∙掌握工具栏和状态栏的制作和使用方法
二.实验要求:
7.1使用菜单编辑器对菜单编辑,如添加主菜单项和子菜单等,并掌握使用的方法,如弹出一个对话窗口或单击菜单与处理命令中的某个类的成员函数相联系。
(例如,利用菜单选择不同宽度的笔,弹出一个颜色选择的对话窗口(利用CColorDialogClass),选择笔的颜色等)
提示:
利用开发平台,添加菜单及对应标识(ID),然后利用ClassWizard在应用程序窗口中响应实现某一功能。
7.2掌握菜单的启用、禁用和复选方法,例如在单文档窗口上连击鼠标左键,将菜单中某项启动和禁用。
提示:
菜单的启用、禁用和复选分别表示菜单项的使用状态,如当菜单禁用时,该项将会“变灰”用户选择时不会被响应。
7.3利用开发平台的多文档创建,观测菜单程序的设计方法,建立起多种不同的窗口并根据窗口动态更新菜单。
(如,系统可弹出3种类型的窗口,其中一个窗口是用鼠标画线,菜单包括笔的宽度,颜色等,一个窗口是在鼠标点击处画园,菜单选择不同半径和颜色,最后一个窗口是在上画正弦波(动态),菜单包括同时有几条,并利用菜单弹出一对话框,然后输入曲线的必要参数(如周期等))
提示:
在创建时不使用Document/Viewarchitecturesupport。
观察系统创建的程序框架,分别创建不同功能的窗口类(包括CMDIChildWnd和CWnd类)
在利用系统菜单,启动用户的不同类型窗口(包括增加菜单变量等),仔细观测菜单是否随窗口的不同而改变。
在各窗口中编写相应的程序以实现各自的功能。
7.5创建弹出式菜单,在应用程序视图内右击鼠标时,将弹出该浮动菜单。
提示:
增加右键单击时的消息处理
在响应函数处增加弹出菜单:
CMenumenu;
Menu.CreatePopupMenu();
添加一个菜单项到该菜单:
menu.AppendMenu(0,IDC_MY_MSG1,"Wzd&1");//这里IDC_MY_MSG1是定义的标识,‘Wzd’是菜单显示的内容
在鼠标右击处显示该弹出式菜单:
CMenumenu;
menu.LoadMenu(ID_MENU_MY);
CMenu*lpmenu;
lpmenu=menu.GetSubMenu(0);
CPointpt;
GetCursorPos(&pt);
lpmenu->TrackPopupMenu(TPM_RIGHTBUTTON,pt.x,pt.y,this);
在使用了TrackPopupMenu()命令后,必须使用DestroyMenu()销毁弹出式菜单对象。
lpmenu->DestroyMenu();
7.6掌握使用工具栏编辑器(ToolBarEditor)修改工具栏,以及创建新的工具栏的方法。
7.7启用和禁用工具栏按钮,根据应用程序的状态,灰化和正常化工具栏按钮。
(禁用的按钮显示灰色)。
7.8为工具栏按钮添加字,在工具栏的按钮上添加文字,这样可表明按钮作用。
7.9非标准工具栏大小讨论改变工具栏按钮大小的方法。
7.10保持工具栏按钮按下讨论保持工具栏按钮按下的方法,以指示该功能正在使用
7.11为工具栏添加非按钮控件添加一个组合框到工具栏。
7.12修改应用程序的状态栏用字符串表编辑器(StringTableEditor)修改应用程序的状态栏。
7.13更新状态栏窗格使用ClassWizard创建一个类,更新显示状态窗格上的文本消息。
7.14为状态栏添加其他控件添加一个按钮和进度指示控件到一个状态栏。
三.实验过程
菜单栏
7.1使用菜单编辑器对菜单编辑
目标:
掌握使用菜单编辑器对菜单进行编辑
步骤:
1.选择ResourceView选项卡,其中,节点Menu下就是菜单编辑,点击鼠标右键,可以选择InsertMenu,然后可以对菜单进行编辑。
改变菜单属性可以选中菜单名称,然后点击鼠标右键,选择Properties命令,显示“菜单属性”对话框,修改菜单属性。
2.添加一个新的菜单项到菜单中,用鼠标拖动空白焦点矩形到新菜单项的位置,然后,双击或右击该矩形,选择properties命令打开属性对话框,在ID域定义个人的菜单ID,如果用户不输入任何ID,则系统自动创建一个ID,当单击该菜单项时,该ID成为命令ID发送到应用程序。
在Caption(标题)域输入菜单项的文本,在字符前面添加一个&号表示用户可以通过键盘访问该菜单项,该字符在菜单中显示一个下划线。
3.修改一个已有的菜单项,只要用鼠标选取它,并打开它的属性对话框;要删除一个菜单项,用鼠标选中它,然后按键盘上的Delete键。
4.用ClassWizard添加一个命令处理函数,菜单按钮ID_DIALOG_POPUP,添加一个消息映射函数OnDialogPopup,在sy715View.cp文件中添加如下代码
voidCSy715View:
:
OnDialogPopup()
{
//TODO:
Addyourcommandhandlercodehere
CColorDialogdc;
dc.DoModal();
}
7.2掌握菜单的启用、禁用和复选方法,例如在单文档窗口上连击鼠标左键,将菜单中某项启动和禁用。
目标:
启用、禁用和复选一个菜单项
步骤:
给对应菜单ID_APP_ABOUT用ClassWizard选择UPDATE_COMMAND_UI创建一个用户界面处理函数,定义布尔变量m_bivalue,如果m_bivalue为TRUE,菜单将变得有效,如果是FALSE,则无效。
使用SetCheck函数控制函数的复选。
添加如下代码
voidCSy715View:
:
OnUpdateAppAbout(CCmdUI*pCmdUI)
{
//TODO:
AddyourcommandupdateUIhandlercodehere
pCmdUI->Enable(m_bivalue);//启用或禁用
//pCmdUI->SetCheck(m_bivalue);//复选
}
添加鼠标左键消息处理函数OnLButtonDown,双击启用或者禁用菜单功能,添加代码如下:
voidCSy715View:
:
OnLButtonDown(UINTnFlags,CPointpoint)
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
m_bicaptured=true;
if(m_bicaptured)
{
count++;
if(count%2==0&&count!
=0)
{
m_bivalue=true;
}
else
{
m_bivalue=false;
}
}
CView:
:
OnLButtonDown(nFlags,point);
}
7.3利用开发平台的多文档创建,观测菜单程序的设计方法,建立起多种不同的窗口并根据窗口动态更新菜单。
目标:
掌握窗口动态更新菜单,实现在不同的窗口更新不同的菜单。
步骤:
1.在split3Doc.h文件中添加六个不同类型的成员变量,添加代码:
public:
CPointp1,p2;
COLORREFm_linecolor;
intm_lineWidth,m_lineTYPE,m_circle_raidus;
并且在split3Doc.cpp文件的构造函数CSplit3Doc中进行初始化
CSplit3Doc:
:
CSplit3Doc()
{
//TODO:
addone-timeconstructioncodehere
p2=p1=CPoint(0,0);
m_lineWidth=3;
m_lineTYPE=PS_SOLID;
m_circle_raidus=10;
}
2.在split3View.cpp文件的修改OnDraw函数,用于实现画图,
voidCSplit3View:
:
OnDraw(CDC*pDC)
{
//TODO:
Addyourspecializedcodehereand/orcallthebaseclass
CSplit3Doc*pDoc=(CSplit3Doc*)GetDocument();
CPen*newpen=newCPen(pDoc->m_lineTYPE,pDoc->m_lineWidth,pDoc->m_linecolor);
CPen*oldpen=pDC->SelectObject(newpen);
pDC->MoveTo(pDoc->p1);
pDC->LineTo(pDoc->p2);
pDC->SelectObject(oldpen);
}
同时添加鼠标的消息响应函数OnLButtonDown和OnLButtonDown,添加代码,
voidCSplit3View:
:
OnLButtonDown(UINTnFlags,CPointpoint)
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
CSplit3Doc*pDoc=(CSplit3Doc*)GetDocument();
pDoc->p1=point;
CFormView:
:
OnLButtonDown(nFlags,point);
}
初始点选择。
voidCSplit3View:
:
OnLButtonUp(UINTnFlags,CPointpoint)
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
CSplit3Doc*pDoc=(CSplit3Doc*)GetDocument();
pDoc->p2=point;
Invalidate();
CFormView:
:
OnLButtonUp(nFlags,point);
}
目的点选择。
对应在Menu下添加菜单IDR_SPLIT3TYPE,并且修改菜单line选项,添加三个功能选项LineColor,LineWidth,LineType,并且在split3View.cpp文件添加三个消息响应函数,
voidCSplit3View:
:
OnLinePara()
{
CColorDialogcdig;
if(cdig.DoModal()==IDOK)
{
CSplit3Doc*pDoc=(CSplit3Doc*)GetDocument();
pDoc->m_linecolor=cdig.GetColor();
}
}
voidCSplit3View:
:
OnLineWidth()
{
//TODO:
Addyourcommandhandlercodehere
//修改CSplit3Doc的m_lineWidth变量
CSplit3Doc*pDoc=(CSplit3Doc*)GetDocument();
pDoc->m_lineWidth=3+3*(rand()%3);
}
voidCSplit3View:
:
OnLineType()
{
//TODO:
Addyourcommandhandlercodehere
//修改CSplit3Doc的m_lineTYPE变量具体值见MSDN
CSplit3Doc*pDoc=(CSplit3Doc*)GetDocument();
pDoc->m_lineTYPE=PS_DASH;
}
3.同样的方法,添加两个基于CFormView的新视图类CircleView和CSplit3View,对应的程序清单如下:
#if!
defined(AFX_SINEVIEW_H__FEF0D315_F3F7_4447_9F75_C0B263FFF1D8__INCLUDED_)
#defineAFX_SINEVIEW_H__FEF0D315_F3F7_4447_9F75_C0B263FFF1D8__INCLUDED_
#if_MSC_VER>1000
#pragmaonce
#endif//_MSC_VER>1000
//SineView.h:
headerfile
/////////////////////////////////////////////////////////////////////////////
//SineViewformview
#ifndef__AFXEXT_H__
#include
#endif
classSineView:
publicCFormView
{
protected:
SineView();//protectedconstructorusedbydynamiccreation
DECLARE_DYNCREATE(SineView)
//FormData
public:
//{{AFX_DATA(SineView)
enum{IDD=IDD_SINEVIEW_FORM};
//NOTE:
theClassWizardwilladddatamembershere
//}}AFX_DATA
//Attributes
public:
//Operations
private:
intm_sine_time;
//Overrides
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(SineView)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport
virtualvoidOnDraw(CDC*pDC);
//}}AFX_VIRTUAL
//Implementation
protected:
virtual~SineView();
#ifdef_DEBUG
virtualvoidAssertValid()const;
virtualvoidDump(CDumpContext&dc)const;
#endif
//Generatedmessagemapfunctions
//{{AFX_MSG(SineView)
afx_msgvoidOnSinePara();
afx_msgvoidOnLButtonDown(UINTnFlags,CPointpoint);
afx_msgvoidOnLButtonUp(UINTnFlags,CPointpoint);
afx_msgvoidOnSineTime();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
//MicrosoftVisualC++willinsertadditionaldeclarationsimmediatelybeforethepreviousline.
#endif//!
defined(AFX_SINEVIEW_H__FEF0D315_F3F7_4447_9F75_C0B263FFF1D8__INCLUDED_)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//SineView.cpp:
implementationfile
#include"stdafx.h"
#include"split3.h"
#include"SineView.h"
#include"Split3DOc.h"
#include
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//SineView
IMPLEMENT_DYNCREATE(SineView,CFormView)
SineView:
:
SineView()
:
CFormView(SineView:
:
IDD)
{
//{{AFX_DATA_INIT(SineView)
//NOTE:
theClassWizardwilladdmemberinitializationhere
//}}AFX_DATA_INIT
m_sine_time=6;
}
SineView:
:
~SineView()
{
}
voidSineView:
:
DoDataExchange(CDataExchange*pDX)
{
CFormView:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(SineView)
//NOTE:
theClassWizardwilladdDDXandDDVcallshere
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(SineView,CFormView)
//{{AFX_MSG_MAP(SineView)
ON_COMMAND(ID_SINE_PARA,OnSinePara)
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_COMMAND(ID_SINE_TIME,OnSineTime)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//SineViewdiagnostics
#ifdef_DEBUG
voidSineView:
:
AssertValid()const
{
CFormView:
:
AssertValid();
}
voidSineView:
:
Dump(CDumpContext&dc)const
{
CFormView:
:
Dump(dc);
}
#endif//_DEBUG
/////////////////////////////////////////////////////////////////////////////
//SineViewmessagehandlers
voidSineView:
:
OnSinePara()
{
CColorDialogcdig;
if(cdig.DoModal()==IDOK)
{
CSplit3Doc*pDoc=(CSplit3Doc*)GetDocument();
pDoc->m_linecolor=cdig.GetColor();
}
}
voidSineView:
:
OnDraw(CDC*pDC)
{
CSplit3Doc*pDoc=(CSplit3Doc*)GetDocument();
CPen*newpen=newCPen(pDoc->m_lineTYPE,pDoc->m_lineWidth,pDoc->m_linecolor);
CPen*oldpen=pDC->SelectObject(newpen);
intlen=pDoc->p1.x-pDoc->p2.x;
intamp=pDoc->p1.y-pDoc->p2.y;
inti,x,y;
//画周期正弦,实事上有更好的差分办法
for(i=0;i { x=pDoc->p1.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->SelectObject(oldpen); } voidSineView: : OnLButtonDown(UINTnFlags,CPointpoint) { CSplit3Doc*pDoc=(CSplit3Doc*)GetDocument(); pDoc->p1=point; CFormView: : OnLButtonDown(nFlags,point); } voidSineView: : OnLButtonUp(UINTnFlags,CPointpoint) { CSplit3Doc*pDoc=(CSplit3Doc*)GetDocument(); pDoc->p2=point; Invalidate(); CFormView: : OnLButtonUp(nFlags,point); } voidSineView: : OnSineTime() { //TODO: Addyourcommandhandlercodehere m_sine_time=(++m_sine_time)%10; //修改周期数的对话框 } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #if! defined(AFX_IRCLEVIEW_H__F9D0731A
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验7 菜单工具栏和状态栏 实验 菜单 工具栏 状态栏