实验7菜单工具栏和状态栏.docx

上传人:b****0 文档编号:18246125 上传时间:2023-08-14 格式:DOCX 页数:41 大小:557.25KB
下载 相关 举报
实验7菜单工具栏和状态栏.docx_第1页
第1页 / 共41页
实验7菜单工具栏和状态栏.docx_第2页
第2页 / 共41页
实验7菜单工具栏和状态栏.docx_第3页
第3页 / 共41页
实验7菜单工具栏和状态栏.docx_第4页
第4页 / 共41页
实验7菜单工具栏和状态栏.docx_第5页
第5页 / 共41页
实验7菜单工具栏和状态栏.docx_第6页
第6页 / 共41页
实验7菜单工具栏和状态栏.docx_第7页
第7页 / 共41页
实验7菜单工具栏和状态栏.docx_第8页
第8页 / 共41页
实验7菜单工具栏和状态栏.docx_第9页
第9页 / 共41页
实验7菜单工具栏和状态栏.docx_第10页
第10页 / 共41页
实验7菜单工具栏和状态栏.docx_第11页
第11页 / 共41页
实验7菜单工具栏和状态栏.docx_第12页
第12页 / 共41页
实验7菜单工具栏和状态栏.docx_第13页
第13页 / 共41页
实验7菜单工具栏和状态栏.docx_第14页
第14页 / 共41页
实验7菜单工具栏和状态栏.docx_第15页
第15页 / 共41页
实验7菜单工具栏和状态栏.docx_第16页
第16页 / 共41页
实验7菜单工具栏和状态栏.docx_第17页
第17页 / 共41页
实验7菜单工具栏和状态栏.docx_第18页
第18页 / 共41页
实验7菜单工具栏和状态栏.docx_第19页
第19页 / 共41页
实验7菜单工具栏和状态栏.docx_第20页
第20页 / 共41页
亲,该文档总共41页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

实验7菜单工具栏和状态栏.docx

《实验7菜单工具栏和状态栏.docx》由会员分享,可在线阅读,更多相关《实验7菜单工具栏和状态栏.docx(41页珍藏版)》请在冰点文库上搜索。

实验7菜单工具栏和状态栏.docx

实验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_

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2