




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VC+ 程序设计实验指导书VC+程序设计实验指导书李贵荣计算机技术实验中心前 言一、上机实验目的 上机实验的目的是提高学生的分析问题、解决问题的能力和动手能力,通过实践环节理解 Visual C+ 面向对象与可视化开发工具的基本功能和用法,掌握MFC的类框架结构,学会使用Visual C+ 编写Windows应用程序。二、实验基本内容 为了使学生在上机实验时目标明确,本实验指导书针对课程内容编写了4个必做实验。学生可以在课内机时先完成指导书中给出的程序,理解所学的知识,在此基础上再编写其他应用程序。指导书中的4个实验如下。 1基本Windows程序设计(2H,必做)。 2简单图形界面程序设计(2H,必做)。3多文档程序设计(2H,必做)。4综合性程序设计(4H,必做)。三、实验任务与时间安排 Visual C+ 程序设计是一门实践性很强的课程,除了在课内安排的实验外,鼓励同学在课外用相关技术进行编程练习。Visual C+ 程序设计上机实验时间为10学时,与教学内容同时进行上机实验。10 个上机学时分为4个必做实验。目 录实验一 简单Windows程序设计3实验二 简单界面设计7实验三 多文档程序设计14实验四 综合设计实验1819实验一 简单Windows程序设计【实验目的】1学会创建Visual C+ 6.0 Win32应用程序工程文件。2掌握Windows应用程序的基本结构。3理解Windows编程中的窗口、句柄、消息传递等概念及其作用。4理解Windows图形设备接口的概念及了解常用Windows绘图函数。5学会在Visual C+ 6.0中编译、调试、发布应用程序。【实验性质】验证性实验(学时数:2H)【实验要求】1在Windows下启动Visual C+ 6.0,创建工程文件。2编写一个简单的 Windows应用程序,并在程序中创建句柄,学会使用句柄。3分析上面的程序,在程序中使用注释语句标识出Windows程序的基本构成部分,并在注释语句中注明各部分的作用。4在上面程序中添加消息处理函数,使用程序完成如下功能:(1)定义一只红色的画笔,绘制一个等边五边形;(2)用不同颜色的线条连接互不想念的两个点;(3)用不同颜色的画笔填充用上述方法所形成的图形中的每一个区域。 【参考程序】#include #include #include #include #define Pi 3.1415926long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam);/消息处理函数声明.BOOL InitWindowsClass(HINSTANCE hInstance);/初始化窗口类声明BOOL InitWindows(HINSTANCE hInstance, int nCmdShow);/初始化窗口声明.HWND hWndMain;int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)/主函数MSG Message;if(!InitWindowsClass(hInstance)/初始化窗口类.return FALSE;if(!InitWindows(hInstance,nCmdShow)/初始化窗口.return FALSE;while(GetMessage(&Message,0,0,0)TranslateMessage(&Message);/消息循环.DispatchMessage(&Message);return Message.wParam;long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)/消息处理函数.HDC hDC;/定义设备环境句柄.HBRUSH hBrush;/定义画刷句柄HPEN hPen;/定义画笔句柄PAINTSTRUCT PtStr;/定义包含绘图信息的结构体变量double dfRadious0=200.0,dfRadious1;/定义外部和内部正五边形外接圆半径.POINT lpOuterPoints5,lpInnerPoints5;/定义外,内正五边形点结构数组.POINT lpTriangle3; /定义三角形点结构数组.dfRadious1=dfRadious0*sin(0.1*Pi)/sin(126.0/180*Pi);/根据外圆半径计算内园半径./计算内外正五边形的点坐标.for(int i=0;i5;i+)lpOuterPointsi.x=(long)(dfRadious0*cos(i*72.0/180*Pi)+200;lpOuterPointsi.y=(long)(dfRadious0*sin(i*72.0/180*Pi)+200;lpInnerPointsi.x=(long)(dfRadious1*cos(i*72.0/180*Pi+36.0/180*Pi)+200;lpInnerPointsi.y=(long)(dfRadious1*sin(i*72.0/180*Pi+36.0/180*Pi)+200;switch(iMessage)case WM_PAINT:/处理绘图消息.hDC=BeginPaint(hWnd,&PtStr);/得到设备环境句柄SetMapMode(hDC,MM_ANISOTROPIC);/设置映射模式.SetWindowOrgEx(hDC,-100,-100,NULL);/设置坐标原点.hPen=CreatePen(PS_SOLID,1,RGB(255,0,0);/创新红色画笔.SelectObject(hDC,hPen);/将画笔选入.Polygon(hDC,lpOuterPoints,5);/画正五边形./填充正五边形的不同区域.for(i=0;i5;i+)lpTriangle0=lpOuterPointsi%5;/生成图形中的三角形区域的坐标.lpTriangle1=lpInnerPointsi%5;lpTriangle2=lpOuterPoints(i+1)%5;/创新新画刷.hBrush=CreateSolidBrush(RGB(i*10,i*20,i*30);SelectObject(hDC,hBrush);/选入新画刷.Polygon(hDC,lpTriangle,3);/画三角形区域.lpTriangle2=lpInnerPoints(i+4)%5;/生成图形中的三角形区域的坐标.hBrush=CreateSolidBrush(RGB(i*40,i*30,i*20);/创新画刷.SelectObject(hDC,hBrush);/选入画刷.Polygon(hDC,lpTriangle,3);/画三角形区域.hBrush=CreateSolidBrush(RGB(255,255,255);/创新白画刷.SelectObject(hDC,hBrush);/选入画刷.Polygon(hDC,lpInnerPoints,5);/画中心的五边形./用不同种颜色的画笔来绘制五角星.MoveToEx(hDC,lpOuterPoints0.x,lpOuterPoints0.y,NULL);for(i=1;iLoadIcon(IDR_MAINFRAME);void CMy11_4Dlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CMy11_4Dlg)DDX_Control(pDX, IDC_ITEM1_EDIT, m_Item1_Edit);DDX_Control(pDX, IDC_ITEM2_EDIT, m_Item2_Edit);DDX_Text(pDX, IDC_RESULT_EDIT, m_sResult_Edit);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CMy11_4Dlg, CDialog)/AFX_MSG_MAP(CMy11_4Dlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_DEVIDE_BUTTON, OnDevideButton)ON_BN_CLICKED(IDC_DIFFERENCE_BUTTON, OnDifferenceButton)ON_BN_CLICKED(IDC_EXIT_BUTTON, OnExitButton)ON_BN_CLICKED(IDC_MULTIPLE_BUTTON, OnMultipleButton)ON_BN_CLICKED(IDC_ADD_BUTTON, OnAddButton)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CMy11_4Dlg message handlersBOOL CMy11_4Dlg:OnInitDialog()CDialog:OnInitDialog();/ Add About. menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization herereturn TRUE; / return TRUE unless you set the focus to a controlvoid CMy11_4Dlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);void CMy11_4Dlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CMy11_4Dlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CMy11_4Dlg:OnDifferenceButton() / TODO: Add your control notification handler code here/开始加入代码char cstrItem110,cstrItem210;/定义编辑框中的字符串对象.double dfItem1,dfItem2,dfResult;/定义编辑框中的数字.char cBuffer10;/定义存储转换结构的字符串.m_Item1_Edit.GetWindowText(cstrItem1,10);/得到Item1编辑框中的字符串.m_Item2_Edit.GetWindowText(cstrItem2,10);/得到Item2编辑框中的字符串.dfItem1=atof(LPCTSTR)cstrItem1);/将Item1编辑框中的字符串转换为数字.dfItem2=atof(LPCTSTR)cstrItem2);/将Item2编辑框中的字符串转换为数字.dfResult=dfItem1-dfItem2;/求差_gcvt(dfResult,10,cBuffer);/将差转化为字符串.存储在cbuffer中.m_sResult_Edit=(LPCTSTR)cBuffer;/将结果字符串输出到Result编辑框中UpdateData(FALSE);/刷新屏幕./结束代码.void CMy11_4Dlg:OnAddButton() /单击Add按钮./开始加入代码.char cstrItem110,cstrItem210;/定义编辑框中的字符串对象.double dfItem1,dfItem2,dfResult;/定义编辑框中的数字.char cBuffer50;/定义存储转换结构的字符串.m_Item1_Edit.GetWindowText(cstrItem1,10);/得到Item1编辑框中的字符串.m_Item2_Edit.GetWindowText(cstrItem2,10);/得到Item2编辑框中的字符串.dfItem1=atof(LPCTSTR)cstrItem1);/将Item1编辑框中的字符串转换为数字.dfItem2=atof(LPCTSTR)cstrItem2);/将Item2编辑框中的字符串转换为数字.dfResult=dfItem1+dfItem2;/求和_gcvt(dfResult,10,cBuffer);/将和转化为字符串.存储在cbuffer中.m_sResult_Edit=(LPCTSTR)cBuffer;/将结果字符串输出到Result编辑框中UpdateData(FALSE);/刷新屏幕./结束代码.void CMy11_4Dlg:OnMultipleButton() /单击Multiple按钮./开始加入代码.char cstrItem110,cstrItem210;/定义编辑框中的字符串对象.double dfItem1,dfItem2,dfResult;/定义编辑框中的数字.char cBuffer10;/定义存储转换结构的字符串.m_Item1_Edit.GetWindowText(cstrItem1,10);/得到Item1编辑框中的字符串.m_Item2_Edit.GetWindowText(cstrItem2,10);/得到Item2编辑框中的字符串.dfItem1=atof(LPCTSTR)cstrItem1);/将Item1编辑框中的字符串转换为数字.dfItem2=atof(LPCTSTR)cstrItem2);/将Item2编辑框中的字符串转换为数字.dfResult=dfItem1*dfItem2;/求积_gcvt(dfResult,10,cBuffer);/将积转化为字符串.存储在cbuffer中.m_sResult_Edit=(LPCTSTR)cBuffer;/将结果字符串输出到Result编辑框中UpdateData(FALSE);/刷新屏幕./结束代码.void CMy11_4Dlg:OnDevideButton() /单击Devide按钮./ 加入代码.char cstrItem110,cstrItem210;/定义编辑框中的字符串对象.double dfItem1,dfItem2,dfResult;/定义编辑框中的数字.char cBuffer10;/定义存储转换结构的字符串.m_Item1_Edit.GetWindowText(cstrItem1,10);/得到Item1编辑框中的字符串.m_Item2_Edit.GetWindowText(cstrItem2,10);/得到Item2编辑框中的字符串.dfItem1=atof(LPCTSTR)cstrItem1);/将Item1编辑框中的字符串转换为数字.dfItem2=atof(LPCTSTR)cstrItem2);/将Item2编辑框中的字符串转换为数字.dfResult=dfItem1/dfItem2;/求商_gcvt(dfResult,10,cBuffer);/将商转化为字符串.存储在cbuffer中.m_sResult_Edit=(LPCTSTR)cBuffer;/将结果字符串输出到Result编辑框中UpdateData(FALSE);/刷新屏幕./结束代码.void CMy11_4Dlg:OnExitButton() /单击Exit按钮./加入代码.OnOK();/退出.实验三 多文档程序设计【实验目的】了解Windows程序的文档、视图结构的基本概念,学会使用AppWizard创建基于文档/视图结构的框架应用程序以及文档类、视图类和文档模板类的应用。【实验性质】验证性实验(学时数:2H)【实验要求】1掌握Microsoft MFC中支持的文档/视图结构的基本概念,学会通过应用程序向导生成单文档(SDI)和多文档应用程序(MDI)。2编写简单单文档界面应用程序。3编写简单多文档界面应用程序。【实验内容】(一)单文档界面程序设计创建一个应用程序,其界面的标题为MySdi。在应用程序的主窗口中显示一行文本“您好,单文档界面的例程!”,并始终出现在窗口的中央。在“编辑”菜单上有一个菜单项“改变显示文本”,单该项可以弹出一个对话框,通过这个对话框可以改变主窗口中的显示文本。(1) 创建工程文件首先创建一个MFC AppWizard(exe)工程文件,并取名为MySdi。建立MySdi应用程序工程文件时选择Single Document(单文档)选项,其他的都是默认选项。(2) 添加资源为程序添加一个简单对话框CDlgInput,其中有一个文本输入控件IDC_EDIT1,关联的成员变量为m_input,类型为CString。操作过程如前面对话框实验。(3) 为CMysdiDoc类添加成员变量为CMysdiDoc类添加成员变量可以有两种方法。第一种方法是利用VC的可视化编程工具。在Workspace窗口的ClassView选项卡中展开Mysdi Classes,可以看到AppWizard为Mysdi程序生成的所有类。右击CMysdiDoc类,在弹出菜单中单击Add Member Variable选项,在Variable Type框中输入成员变量的类型CString,在Variable Declaration框中输入成员变量名m_str。由于希望其他类的对象可以访问该成员变量,因此访问类型设置为public。单击OK将该成员变量的定义添加到类的定义中。第二种方法是手动的在CMysdiDoc的定义(MysdiDoc.h)中添加,直接为其添加一个成员变量。public : CString m_str;(4) 文档变量初始化为了测试该程序,我们在CMsdiDoc的OnNewDocument成员变量中为公有成员m_str赋以“您好,单文档界面的例程!”,方法是使用下面的代码替换OnNewDocument的实现代码中的“/TODO”注释。BOOL CMysdiDoc:OnNewDocument( )if(!CDocument:OnNewDocument( ) return FALSE;m_str = “您好,单文档界面的例程!”; return TRUE;(5) 视图的输出在MFC应用程序中,文档类是和视图类一起协作完成应用程序功能的。下面我们将为Mysdi程序的视图类CMysdiView类的OnDraw成员函数添加一些代码,以将文档类的m_str成员变量的内容显示到视图的框架窗口中。void CMysdiView:OnDraw(CDC * pDC)CMysdiDoc * pDoc = GetDocument( );ASSERT VALID(pDoc);/TODO: add draw code for native data hereCRect rectClient;GetClientRect( rectClient); /获取当前客户区的指针CSize sizeClient = rectClient.Size(); /获取当前客户区的大小CString str = pDoc - m_str; /从文件中读取数据CSize sizeTextExtent = pDC - GetTextExtent(str); /用新选定的字体绘制字符串pDC - TextOut (sizeClient.cx-sizeTextExtent.cx)/2 , (sizeClient.cy-sizeTextExtent.cy)/2 , str);(6) 串行化(参见教材)(二)多文档界面程序设计 设计一个多文档应用程序,理解文档/视图结构模型中文档与视图的作用。(1)创建MDI项目文件创建步骤同(一),应用程序类型选项卡为:多文档。(2)通过ClassView向导创建第二个文档类CMyMdiDoc2,其基类为CDocument。(3)创建资源。打开资源文件 resource.h,在文件中加入下列代码:#define IDR_MYMDITYPE2 135这样就定义了第二个文档类的资源ID,以后定义的菜单、文档模板等资源均可以使用这个ID。文档模板的资源:资源模式参见教材相关内容,现在手工加入第二个资源模板字符串。用记事本或其它编辑器打开MyMdi.rc资源文件,找到下面的代码:IDR_MYMDITYPE nMymdinMymdinMymdi 文件 (*.mmd)n.mmdnMymdi.DocumentnMymdi Document这是第一个文档类的的资源字符串,在后面加入:IDR_MYMDITYPE2 nMymdi2nMymdi2nMymdi2 文件 (*.mm2)n.mm2nMymdi.DocumentnMymdi2 Document这是第二个文档类的资源字符串。(4)菜单、对话框资源单击Workplace窗口中的Resource View选项卡,展开MyMdi resources | Menu,在“编辑”子菜单中添加一个新的菜单项“改变显示文本”,并将此菜单项的ID设置为ID_EDIT_CHANGETEXT。 使用对话框实验中的方法,生成对话框类CDlgInput,并添加Edit Box控件及其相关联的成员变量m_input,类型为CString。(5)代码编辑创建文档模板类,因为本应用程序支持多种文档,所以在应用程序的InitInstance()函数中,需要定义新的文档模板的对象,打开MyMdi.cpp文件,查找如下代码:BOOL CMymdiApp:InitInstance()AfxEnableControlContainer();.CMultiDocTemplate* pDocTemplate;pDocTemplate = new CMultiDocTemplate(IDR_MYMDITYPE,RUNTIME_CLASS(CMymdiDoc),RUNTIME_CLASS(CChildFrame), / custom MDI child frameRUNTIME_CLASS(CMymdiView);AddDocTemplate(pDocTemplate);.上面是第一个文档的模板,下面在它的后面添加第二个文档的模板,代码如下:CMultiDocTemplate* pDocTemplate;pDocTemplate = new CMultiDocTemplate(IDR_MYMDITYPE,RUNTIME_CLASS(CMymdiDoc),RUNTIME_CLASS(CChildFrame), / custom MDI child frameRUNTIME_CLASS(CMymdiView);AddDocTemplate(pDocTemplate);CMultiDocTemplate* pDocTemplate2;pDocTemplate2 = new CMultiDocTemplate(IDR_MYMDITYPE2,RUNTIME_CLASS(CMymdiDoc2), /MDI派生文档类的CRuntimeClass对象的指针RUNTIME_CLASS(CChildFrame), / MDI派生子框架类的CRuntimeClass对象的指针RUNTIME_CLASS(CMymdiView2); /创建文档模板的对象AddDocTemplate(pDocTemplate2); /将新模板添加到应用程序的文档模板列表中为了使CMyMdiApp类能够访问第二个文档/视图,需要在MyMdiApp.h中加入它们的头文件。 #include mymdiDoc2.h#include mymdiView2.h完善CMyMdiDoc2类,部分代码如下:BOOL CMymdiDoc2:OnNewDocument()if (!CDocument:OnNewDocument()return FALSE;m_str=您好, 多文档界面的例程!;return TRUE;void CMymd
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人入股协议书
- 航拍服务协议书
- 课题一就业指导教学方案教案
- 安全知识培训与演习课件
- 安全知识及安全操作培训app课
- 安全知识产权培训方案课件
- 海南旅游安全培训内容课件
- 结构图教学设计
- 海南乐高机器人课件
- 安全目标培训方案模板课件
- 2025建筑二次结构木工劳务合同范本
- GB/T 46105-2025陆地生态系统碳汇核算指南
- 第一讲-决胜十四五奋发向前行-2025秋形势与政策版本-第二讲-携手周边国家共创美好未来-2025秋形势与政策版本
- 学堂在线 现代生活美学-花香茶之道 章节测试答案
- 2025年川教版(2024)小学信息科技三年级(上册)教学设计及反思(附目录P118)
- TD/T 1065-2021 国土空间规划城市设计指南(正式版)
- 信息组织与信息构建课件
- 应急管理学院成立可行性方案
- 视频监控调取记录表
- 质量控制计划QCP
- 七田真1000图记忆
评论
0/150
提交评论