VC++实验可视化.docx
- 文档编号:8675405
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:60
- 大小:624.19KB
VC++实验可视化.docx
《VC++实验可视化.docx》由会员分享,可在线阅读,更多相关《VC++实验可视化.docx(60页珍藏版)》请在冰豆网上搜索。
VC++实验可视化
《可视化程序设计》上机指导书
目录
实验一构造应用程序框架1
实验二菜单、工具栏与状态栏4
实验三 绘图12
实验四对话框18
实验五常用控件应用22
实验六基于文档/视图结构的程序30
实验七数据库编程37
实验一构造应用程序框架
一、实验目的:
1.学习使用类向导创建单文档应用程序,多文档应用程序,基于对话框的应用程序三种不同类型的应用程序框架。
2.学习三种不同类型程序之间的联系及其区别。
二、实验内容:
创建出一个单文档应用程序,能在视图窗口中输出"Hello,WelcometoVisualC++6.0!
";创建出一个多文档文档应用程序,能在视图窗口中输出"Hello,WelcometoVisualC++6.0!
";创建出一个基于对话框的应用,能在对话框中输出“Hello,WelcometoVisualC++!
”。
三、实验步骤:
1 单文档应用程序
创建过程:
(1)在VisualC++6.0的启动界面中,选择“File|New”,在弹出的“New”对话框中单击“Projects”选项卡。
(2)选择“MFCAppWizard(exe)”,在“Location”编辑框中输入要建立的工程所在的目录。
(3)在右上方的“Project name”编辑框中输入工程名称Eg3_1,单击OK按钮,弹出MFCAppWizard向导对话框。
(4)在第一步中选择Singledocument,建立一个单文档界面应用程序SDI。
(5)取其默认值,直到第六步结束。
(6)添加自己的代码:
扩充Eg3_1View.cpp中的OnDraw成员函数:
voidCEg3_1View:
:
OnDraw(CDC*pDC)
{
CEg3_1Doc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
//TODO:
adddrawcodefornativedatahere
pDC->TextOut(60,100,"Hello,WelcometoVisualC++6.0!
");
}
(7)更改应用程序的标题:
▪选择工作区中ResourceViews标签,展开Eg3_1Resources|StringTable,双击StringTable,弹出字符串资源表。
▪双击IDR_MAINFRAME项,弹出StringProperties对话框。
▪在Caption编辑框中将标题修改为“单文档应用程序\nEg3_1”。
(8)编译、链接并运行,结果如图1.1。
图1.1单文档的运行结果
2 多文档应用程序
多文档(MDI)接口应用程序是指一个应用程序可以同时打开多个文件进行处理。
在MDI程序中许多程序的细节是与SDI程序是相同的。
在MDI程序中使用了CMultiDocTemplate模板,以便程序能够处理多个文档,同时也将视图和文档类连接到该模板及CChildFrame类,CChildFrame类支持出现在主窗口内部的MDI子窗口。
按照上述创建单文档应用程序的步骤创建一个名为Eg3_2多文档应用程序,不同的是在创建工程的第一步中选择multipledocument。
编译、链接并运行后,结果如图1.2:
图1.2多文档的运行结果
3基于对话框的应用框程序
基于对话框的应用程序,是以对话框为形式的应用程序,它对于那些涉及文档较少,主要是交互式操作的应用程序来说比较合适。
基于对话框的应用框架和前面介绍的基于文档的应用框架有很大的区别。
创建过程
(1)在AppWizard的第一步,即MFCAppWizard--Step1中,选中“Dialogbased”单选框按钮。
(2)在第四步,AppWizard会显示出它将帮助用户创建的类及属性。
在这个基于对话框的应用中只有两个类被创建。
一个是应用类CEg3_3App,另一个是对话框类CEg3_3Dlg。
(3)修改对话框资源:
在Textproperties对话框中,将Caption框中的“TODO:
在这里设置对话控制。
”删除,改成为“Hello,WelcometoVisualC++!
”。
(4)编译、链接、运行,结果如图1.3:
图1.3基于对话框的运行结果
注意:
基于对话框的应用框架和基于文档的应用框架的区别在于实现对话框的第一步是创建一个对话框对象dlg,然后通过调用对话类的成员函数DoModal()来显示对话框。
四、问题讨论
1、比较应用程序向导能够生成的三种应用程序之间的异同。
2、了解基于文档/视图结构的框架程序中各个类的结构及各自的功能。
实验二菜单、工具栏与状态栏
一、实验目的:
(1)学习如何创建菜单。
(1)学习为应用程序创建适合自己的状态条和工具条。
(2)学习在工具条中加自己的图形按钮以及如何控制它的外形、如何来禁止状态条显示正常的菜单提示和键盘状态指示,使得可以把状态条另作它用。
二、实验内容
(一):
通过创建不同的菜单来显示不同风格的对话框,并该菜单添加加速键,可以通过键盘直接操作。
这里的对话框可以使用MessageBox()函数调用不同的消息框。
三、实验步骤:
1 菜单的编辑
步骤1:
运行AppWizard创建单文档工程Eg5_1
步骤2:
使用资源编辑器添加菜单资源
2 使用ClassWizard添加消息处理函数
操作步骤:
(1).确定打开了Eg5_1工作空间Eg5_1.dsw。
(2).选择View|ClassWizard菜单项,弹出MFC ClassWizard对话框。
(3).在Classname下拉式列表中选择视图类CEg5_1View,在ObjectIDs列表框中选择ID_MESSAGE_DISPLAY。
(4).在Messages列表框中的COMMAND上双击鼠标左键,或者在其上单击左键,然后按AddFunction按钮,在弹出的AddMemberFunction对话框中直接按OK按钮。
(5).按EditCode按钮,或在Memberfunctions列表框中双击新添的函数,退出ClassWizard转入到文本编辑,为该函数添加执行代码。
代码如下:
voidCEg5_1View:
:
OnMessageDisplay()
{
//TODO:
Addyourcommandhandlercodehere
MessageBox("这是一个简单的对话框");
}
voidCEg5_1View:
:
OnMessageStyleOkcancel()
{
//TODO:
Addyourcommandhandlercodehere
MessageBox("这是一个有确定和取消按钮的对话框",
"OKCANCEL对话框",MB_OKCANCEL);
}
voidCEg5_1View:
:
OnMessageChange()
{
//TODO:
Addyourcommandhandlercodehere
MessageBox("这个对话框的标题已经改变了","新对话框");
}
voidCEg5_1View:
:
OnMessageStyleYesno()
{
//TODO:
Addyourcommandhandlercodehere
MessageBox("这是一个有Yes和No按钮的消息框","YESNO消息框",MB_YESNO);
}
3加入键盘加速键
添加键盘加速键的操作步骤:
(1)在工作区中选择ResourceView标签,展开Menu项,双击IDR_MAINFRAME,修改菜单项的属性。
如图2.1所示:
图2.1菜单属性对话框
(2)在工作区中单击ResourceView标签,展开Accelerator项,在IDR_MAINFRAME上双击左键,启动AppStudio之加速键资源编辑器,客户区中打开一个用于编辑加速键的窗口,如图2.2所示:
图2.2加速键编辑窗口
(3)在最后的虚框上双击鼠标左键,或者单击右键并在弹出的菜单中选择NewAccelerator菜单项,弹出如图所示的加速键属性(AccelProperties)对话框,如图2.3。
图2.3加速键属性对话框
4.编译、链接、运行。
实验内容
(二):
在前面程序的基础上为应用程序创建适合自己的状态条和工具条,在工具条中加自己的图形按钮并控制它的外形、禁止状态条显示正常的菜单提示和键盘状态指示,使得可以把状态条另作它用。
实验步骤:
1用MFC创建工具栏的一般方法
使用MFC建立工具栏的基本步骤如下:
(1)先使用VisualC++6.0工作平台中的资源编辑器中打开资源,打开Toolbar中工具条的位图资源,然后根据自己的需要建立和修改工具栏。
(2)在程序中建立一个CToolBar对象。
//修改主框架MainFrm.h文件,增加工具栏对象数据成员说明
classCMainFrm:
publicCMDIFrameWnd
{
…
protected:
CToolBarm_wndToolVar;//工具栏对象
…
}
(3)调用CToolBar类的Create()成员函数建立窗口的工具栏,该函数同时会将工具栏子窗口与CToolBar对象连结在一起。
(4)调用CToolBar类的LoadBitmap()成员函数装入工具栏命令按钮组的图形位图资源。
(5)调用CToolBar类的SetButtons()成员函数设定工具栏中的命令按钮风格,并赋予每个命令按钮在位图资源中的图形。
2创建菜单项及新的工具栏按钮。
(1)运行AppWizard创建单文档工程Eg5_2
(2)使用资源编辑器添加菜单资源。
首先添加一个“画图”菜单项。
其ID值,标题和提示见表2.1。
表2.1“画图”菜单资源
菜单
标题
命令ID
提示
画图
画图(&D)
圆
圆(&C)
ID_DRAW_CIRCLE
画一个圆\n圆
矩形
矩形(&R)
ID_DRAW_RECT
画一个矩形\n矩形
(3)为视图类添加成员变量如下:
intm_y; //图形中心的y坐标
intm_x; //图形中心的x坐标
intm_Shape; //设置图形的形状 0:
圆 1:
矩形
并在构造函数中初始化如下:
m_Shape=0; //圆
m_x=0; //x的坐标为0
m_y=0; //y的坐标为0
(4)在OnDraw函数中添加画图的操作代码如下:
if(m_Shape==0) //圆
{
rect.left=m_x-50; //设置圆的大小
rect.right=m_x+50;
rect.top=m_y-50;
rect.bottom=m_y+50;
pDC->Ellipse(&rect);
}
else //矩形
{ //设置矩形的大小
rect.left=m_x-50;
rect.right=m_x+50;
rect.top=m_y-30;
rect.bottom=m_y+30;
pDC->Rectangle(&rect);
}
(5)为菜单项添加对应的消息处理函数。
对于“圆”,其ID号ID_DRAW_CIRCLE,使用ClassWizard添加命令函数OnDrawCircle(),如图2.4所示。
图2.4ClassWizard对话框
同时使用ClassWizard添加更新用户界面的消息函数OnUpdateDrawCircle(CCmdUI*pCmdUI);使用同样的方法为ID号为ID_DRAW_RECT的菜单项“矩形”添加命令函数OnDrawRect()和更新用户界面的消息函数OnUpdateDrawRect(CCmdUI*pCmdUI)。
最后使用ClassWizard为应用程序添加一个响应鼠标左键按下的消息的函数OnLButtonDown。
为各个函数添加代码如下:
voidCEg5_2View:
:
OnDrawCircle()
{
//TODO:
Addyourcommandhandlercodehere
m_Shape=0; //设置为圆
}
voidCEg5_2View:
:
OnUpdateDrawCircle(CCmdUI*pCmdUI)
{
//TODO:
AddyourcommandupdateUIhandlercodehere
//如果为圆,则将圆按钮压下,在圆菜单前显示一个对钩号
if(m_Shape==0)
pCmdUI->SetCheck
(1);
else
pCmdUI->SetCheck(0);
}
voidCEg5_2View:
:
OnDrawRect()
{
//TODO:
Addyourcommandhandlercodehe
m_Shape=1; //设置为圆
}
voidCEg5_2View:
:
OnUpdateDrawRect(CCmdUI*pCmdUI)
{
//TODO:
AddyourcommandupdateUIhandlercodehere
//如果为矩形,则将矩形按钮压下,在矩形菜单前显示一个对钩号
if(m_Shape==1)
pCmdUI->SetCheck
(1);
else
pCmdUI->SetCheck(0);
}
voidCEg5_2View:
:
OnLButtonDown(UINTnFlags,CPointpoint)
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
//设置x,y坐标
m_x=point.x;
m_y=point.y;
//更新视图
Invalidate();
CView:
:
OnLButtonDown(nFlags,point);
}
(6)在资源浏览器中双击名为IDR_MAINFRAME的工具栏,此时工具栏在编辑窗口中打开。
首先,使用画圆的工具在最后一个空白按钮上画一个圆,然后在工具栏中双击该按钮,弹出其属性对话框,在其ID号的选项中选择ID_EDIT_CLEAR值,如图2.5所示。
图2.5按钮编辑及其属性对话框
同理创建一个矩形的工具按钮,其ID号选择位ID_DRAW_RECT,与菜单中的矩形菜单项相对应。
3为应用程序添加状态栏
为应用程序添加状态栏的基本步骤如下:
步骤1:
定位到文件MainFrm.cpp文件,添加如下代码:
staticUINTindicators[]=
{
ID_SEPARATOR, //statuslineindicator
ID_SEPARATOR, //显示x坐标信息
ID_SEPARATOR, //显示x坐标信息
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
步骤2:
为状态栏添加标识号。
通过菜单View|ResourceSymbols打开ResourceSymbols对话框,单击New按钮,添加名为IDC_STATUSBAR的标识号,数值取默认值。
步骤3:
定位到函数CMainFrame:
:
OnCreate,在其中添加状态栏的设置代码:
intCMainFrame:
:
OnCreate(LPCREATESTRUCTlpCreateStruct)
{…
//TODO:
Deletethesethreelinesifyoudon'twantthetoolbarto
// bedockable
//设置状态信息行的宽度
//x坐标信息窗口
m_wndStatusBar.SetPaneInfo(1,IDC_STATUSBAR,SBPS_POPOUT,50);
//y坐标信息窗口
m_wndStatusBar.SetPaneInfo(2,IDC_STATUSBAR,SBPS_POPOUT,50);
…
}
步骤4:
定位到文件MainFrm.h中类的定义处,将成员变量m_wndStatusBar和m_wndToolBar的保护类型(protected)改为公用类型(public)。
步骤5:
通过ClassWizard在类CEg5_2View中添加WM_MOUSEMOVE消息的响应函数(在标识号ObjectIDs项中选中CEg5_2View),并添加代码如下:
voidCEg5_2View:
:
OnMouseMove(UINTnFlags,CPointpoint)
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
charPositionString[50];
//获取主框架指针
CMainFrame*MFrame=(CMainFrame*)AfxGetMainWnd();
//在状态信息行1中显示X坐标
sprintf(PositionString,"X:
%d",point.x);
MFrame->m_wndStatusBar.SetPaneText(1,PositionString);
//在状态信息行2中显示Y坐标
sprintf(PositionString,"Y:
%d",point.y);
MFrame->m_wndStatusBar.SetPaneText(2,PositionString);
CView:
:
OnMouseMove(nFlags,point);
}
步骤6:
在文件CEg5_2View.cpp前部的其他包含语句(#include)后面添加包含语句:
#include"MainFrm.h“
最后,编译、链接和运行程序。
四、问题讨论
1、讨论菜单类CMenu中常用成员函数的使用方法。
2、讨论快捷菜单的使用方法。
3、讨论更新命令用户界面消息处理函数的实现机制。
实验三 绘图
一、实验目的:
1.学习如何使用设备环境类CDC绘制任意图形。
2.学习通过选择各种各样的画图工具,在视图中画出相应的图形。
二、实验内容:
创建绘图实例Eg9_2。
这个程序将允许用户方便地创建新的图形图象,通过选择各种各样的画图工具,如线、矩形及椭圆,可以在任意位置画出任意大小的图形,也可以手工任意绘制图画,并能对任意的封闭区域进行填图。
实验步骤:
步骤一:
● 使用AppWizard创建一个单文档(SDI)应用程序Eg9_2。
步骤二:
● 在工作区中选择ClassView标签,展开Eg9_2classes|CEg9_2View。
右键单击CEg9_2View,在弹出的快键菜单中选择AddMemberVariable,为视图类添加如下成员变量,并选择所加的变量为保护的。
也可以直接在Eg9_2View.h文件中的构造函数段直接输入如下代码:
classCEg9_2View:
publicCView
{ …
protected:
CPointm_ptStart; //用于定义开始的点坐标
CPointm_ptEnd; //用于定义结束的点坐标
CPointm_ptOld; //用于保存点的坐标
BOOLm_bDrawFlag; //是否手工绘制图形
BOOLm_bLineFlag; //是否画线
BOOLm_bFillFlag; //是否填充图形
BOOLm_bRectFlag; //是否画一个矩形
BOOLm_bEllipseFlag; //是否画椭圆
…
}
步骤三:
● 在构造函数中添加新的对象方法SetFlagsFalse(),将所有的标志设置为False:
在工作区中选择ClassView标签,右键单击CEg9_2View,在弹出的快键菜单中选择AddMemberFunction,在弹出的对话框中输入方法的名称及类型。
● 单击OK按钮,在Eg9_2View.cpp文件中的新方法中添加如下代码:
voidCEg9_2View:
:
SetFlagsFalse()
{
m_bDrawFlag=false;
m_bLineFlag=false;
m_bEllipseFlag=false;
m_bRectFlag=false;
m_bFillFlag=false;
}
● 并在视图类的构造函数中调用这个新对象方法:
CEg9_2View:
:
CEg9_2View()
{
//TODO:
addconstructioncodehere
SetFlagsFalse();
}
步骤四:
创建菜单资源:
菜单资源如表3.1所示。
表3.1菜单资源
创建好的菜单如图3.1:
图3.1菜单
●
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC 实验 可视化