MFC Windows应用程序设计习题解答及上机实验_第1页
MFC Windows应用程序设计习题解答及上机实验_第2页
MFC Windows应用程序设计习题解答及上机实验_第3页
MFC Windows应用程序设计习题解答及上机实验_第4页
MFC Windows应用程序设计习题解答及上机实验_第5页
已阅读5页,还剩200页未读 继续免费阅读

下载本文档

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

文档简介

普通高校本科计算机专业特色教材精选MFCWindows应用程序设计习题解答及上机实验任哲李益民车进辉编著IM…Ⅱ①任…②李…③车…Ⅲ①C语言-程序设计-高等学校-教学参考资料②窗口软印刷者:装订者:版次:2004年6月第1版2004年6月第1次印刷 朱庆生吴功宜张为群余雪丽孟祥旭孟小峰胡金初姚放吾原福永黄刘生薛永生我国高等教育逐步实现大众化后,越来越多的高等学校将会面向在民经济发展的第一线,为行业、企业培养各级各类高级应用型门人才。为此,教育部已经启动了“高等学校教学质量和教学改革工”,强调要以信息技术为手段,深化教学改革和人才培养模式改革。何根据社会的实际需要,根据各行各业的具体人才需求,培养具有特显著的人才,是我们共同面临的重大问题。具体地,培养具有一定专特色的和特定能力强的计算机专业应用型人才则是计算机教育要解决为了适应21世纪人才培养的需要,培养具有特色的计算机人才,急机专业教学和教材改革方面已经做了大量工作,许多教师在计算机专教学和科研方面已经积累了许多宝贵经验。将他们的教研成果转化为材的形式,向全国其他学校推广,对于深化我国高等学校的教学改革一件十分有意义的事。清华大学出版社在经过大量调查研究的基础上,决定编写出版一套普通高校本科计算机专业特色教材精选”。本套教材是针对当前高等育改革的新形势,以社会对人才的需求为导向,主要以培养应用型计机人才为目标,立足课程改革和教材创新,广泛吸纳全国各地的高等校计算机优秀教师参与编写,从中精选出版确实反映计算机专业教学向的特色教材,供普通高等院校计算机专业学生使用。1编写目的明确本套教材是深入研究各地各学校办学特色的基础上,面向普通高校计算机专业学生编写的。学生通过本套教材,主要学习计算机科学与术专业的基本理论和基本知识,接受利用计算机解决实际问题的基本练,培养研究和开发计算机系统,特别是应用系统的基本能力。4MRCWindows应用程序设计习题解答及上机实验2理论知识与实践训练相结合根据计算学科的三个学科形态及其关系,本套教材力求突出学科的论与实践紧密合的特征,结合实例讲解理论,使理论来源于实践,又进一步指导实践,学生通过实深化对理论的理解,更重要的是使学生学会理论方法的实际运用。在编写教材时突实用性,并做到通俗易懂,易教易学,使学生不仅知其然,知其所以然,还要会其如3注意培养学生的动手能力每种教材都增加了能力训练部分的内容,学生通过学习和练习,能比较熟练地应用算机知识解决实际问题。既注重培养学生分析问题的能力,也注重培养学生解决问的能力,以适应新经济时代对人才的需要,满足就业要求。4注重教材的立体化配套大多数教材都将陆续配套教师用课件、习题及其解答提示,学生上机实验指导等辅教学资源,有些教材还提供能用于网上下载的文件,以方便教学。由于各地区各学校的培养目标、教学要求和办学特色均有所不同,所以对特色教学理解也不尽一致,我们恳切希望大家在使用教材的过程中,及时地给我们提出批评和进意见,以便我们做好教材的修订改版工作,使其日趋完善。我们相信经过大家的共同努力,这套教材一定能成为特色鲜明、质量上乘的优秀教,同时,我们也希望通过本套教材的编写出版,为“高等学校教学质量和教学改革工”作出贡献。清华大学出版社2004年4月 必要的练习可以较快地了解MFC的框架并掌握使用MFC类库来进行作者普通高校本科计算机专业第1章Windows应用程序基础知识习题解答及上机实验 1.1习题解答 112上机实验 2第2章Windows应用程序的类封装习题解答及上机实验 2.1习题解答 722上机实验 7第3章MFC应用程序框架习题解答及上机实验 3.1习题解答 32上机实验 第4章图形习题解答及上机实验 4.1习题解答 42上机实验 第5章MFC的通用类习题解答及上机实验 5.1习题解答 52上机实验 24第6章Windows应用程序界面的设计习题解答及上机实验 6.1习题解答 62上机实验 第7章鼠标和键盘习题解答及上机实验 7.1习题解答 338MFCWindows应用程序设计习题解答及上机实验72上机实验 44第8章资源习题解答及上机实验 8.1习题解答 4982上机实验 第9章MFC的文件处理机制习题解答 第10章控件习题解答 第11章对话框习题解答及上机实验 6511.1习题解答 65112上机实验 第12章进程与线程的管理习题解答 第13章动态链接库习题解答 第14章组件对象模型基础习题解答 第15章用MFC开发ActiveX应用习题解答 第16章用MFC设计数据库应用程序习题解答 1.什么是WindowsSDK程序?答:使用软件开发工具包(SoftwareDevelopmentKit)开发出来的2.什么是WindowsAPI函数?5.什么是事件?试举例说明。6.如何显示和更新窗口?2MFCWindows应用程序设计习题解答及上机实验7.什么是消息循环?答:在创建了窗口的应用程序中,应用程序将要不断地从消息队列中获取消息,并将消息指派给指定的窗口处理函数来处理,然后再回来从消息队列中获取消息,这个不断重复的工作过程叫做消息循环。8.Windows应用程序的主函数有哪3个主要任务?答:注册窗口类、创建应用程序的窗口和建立消息循环。9.说明Windows应用程序的主函数、窗口函数与Windows系统之间的关系。答:Windows应用程序的主函数和窗口函数都是系统调用的函数,主函数是在应用程序启动时由系统首先调用的函数,而窗口函数是主函数在消息循环中获得消息并把消息派送给系统之后,由系统调用的用来处理消息的函数。①熟悉在VisualC++60中创建Win32Application的过程。②熟悉VisualC++60可以创建的3种Win32Application。③在VisualC++60中查看帮助文件。60】命令启动VisualC++60,见图1+。②选择VisualC+60的菜单File|New命令打开New对话框,在这个③在左侧的列表框中选中Win32Application选项;在Projectname编辑框中填写工程名称(例如MyPrj);在Location编辑框中选择存放工程文件的路径;其余使用默认图13。④在图13所示的对话框中,有3种工程类型可以供选择:Anemptyproject、A工程中添加所需要的文件。3第1章Windows应用程序基础知识习题解答及上机实验3Netknts注销H:Q).q..马开图1+启动VisualC++60图1-2New对话框的Projects选项卡选择AsimpleWin32application选项,可以创建一个由系统自动生成必要代码的工程。4MFCWindows应用程序设计习题解答及上机实验同选择Atypical"HelloWorld!?application选项,可以创建一个完整的Win32示例程序,这个程序在启动运行后会在窗口的用户区显示一个字符串"HelloWorld!"。⑤现在选择Anemptyproject选项,创建一个空Win32工程。⑥选择菜单FileINew选项打开New对话框,在这个对话框中选中Files选项卡,在选项卡中左侧的窗口中选中C++SourceFile,在确认Addtoproject选项被选中且在它下面的下拉列表框中的工程名为当前工程名后,在File编辑框中填写要创建文件的名称(例如MyPrj)。最后按下OK按钮,打开文件。见图1-4。⑦在打开的空文件中输入如下代码:LRESULTCALLBACKWndProcHWNDUINTWP5第1章Windows应用程序基础知识习题解答及上机实验5区区FilesProjectsWorkspacw…图1-4New对话框的Files选项卡MSGmsg;//定义一个用来存储消息的变量charlpszClassName[]="窗口";WNDCLASSwc;1/定义一个窗口类变量wehlconLoadIconNULLIDIAPwehCursorLoadCursorNULLIDCARwehbrBackgroundHBRUSHGetStockObjectWHITEBRUweIpszClassNameIpszClRegisterClass(&we);/注册窗口类hwnd=CreateWindow(IpszClassName,1/创建窗口_NULL,NULL,NULL);6MFCWindows应用程序设计习题解答及上机实验 ⑧按下Ctrl+F7键编译这个程序。⑨如果程序编译通过,则按下Ctrl+F5功能键运行这个应用程序。1按下F11功能键单步运行这个程序。2参照上述步骤创建一个AsimpleWin32application类型的Win32工程,在分析了自动生成的代码后,对程序进行修改使它能实现与前面工程一样的功能。AtypicalHelloWorldapplicat程,在分析了自动生成的代码后,对程序进行修改使它能实现与前面工程一样的功能。的WNDCLASS位置上按下F1功能键看看会出现什么情况。Windows应用程序的类封装习题解答及上机实验88MFCWindows应用程序设计习题解答及上机实验实验目的:①理解Windows应用程序的类封装过程,体会类封装给应用程序设计所带来的好处。②在创建Win32工程中使用MFC类库。①选择菜单FileINew选项打开New对话框。②在New对话框的Projects选项卡中选中Win32Application选项创建一个Win32Application工程。③在Win32Application-Step1of1对话框中选择创建空工程选项Anemptyproject。④选择菜单FilelNew打开New对话框并选中Files选项卡,在选项卡中选择C++SourceFile选项,创建源文件。⑤选择菜单Project|Settings打开图2+所示的ProjectSettings对话框。⑥在ProjectSettings对话框的General选项卡中的MicrosoftFoundationClasses下拉列表框中选择UseMFCinaStaticLibrary选项。其余使用默认选项,然后按下OK按钮。这样在创建的应用程序中就可以使用MFC类库了。⑦在源文件中输入教科书中第2章的例2-5的源代码: 9第2章Windows应用程序的类封装习题解答及上机实验 9)pMainWnd—>Create(0,"MFC"pMainWnd—>UpdateWindow(//定义CMyApp的对象MyApp----------------------------⑧按下Ctrl+F7键编译这个程序。⑨如果程序编译通过,则按下F7功能键运行这个应用程序。①按下F11功能键单步运行这个程序。第第MFC应用程序框架习题解答及上机实验1.使用VisualC++的帮助文件了解CObject类。①选择菜单HelplContents选项打开帮助文件并选择【索引页,在【键入要查找的关键字】框内输入CObject(大小写均可),见图34。文件C)编辑()查看(①规转Q目录心6.0版本.Library的新内容cohjnditydletingallobjectsIfinfrfuctisn原①②按下【显示】按钮,则可打开如图3-2所示的【已找到的主题】对12MFCWindows应用程序设计习题解答及上机实验MicrosoftFoundationClassesMicrosoftFoundationClassLibrMicrosoftFoundationClassLiSsSsLibrwyViudStudis5.0文件①满情(2)查看()凯材帮助隐款定应上一步下一步后退前进停止t显示①CobjectistheprincipalbaseclassfortheMicrosoftFoundationClassLibraryItservesNotethatCObjectdoesnotsupportmultipleinheritanceYourderive3.简述构成文档视图结构应用程序框架的4个MFC派生类,并说出它们的功能。答:假如工程名称为MyPrj,则MFCAppWizard会自动创建以下4个派生类来构成应用程序的框架:CFrame类的派生CMainFrameCWinAppCMyPrjAppCDocument类的派生类CMyPrjDoc和CView类的派生类CMyPrjView。第3章MFC应用程序框架习题解答及上机实验其中,CMyPrjDoc类对象用来存储和管理应用程序中的数据;CMainFrame对象与CMyPrjView对象构成了应用程序的界面,CMainFrame对象只是CMyPrjView对象的容器,而CMyPrjView类的对象是用来显示文档与接收用户事件的;CMyPrjApp类的对象是应用程序的全局对象,它是应用程序中各对象的容器,负责创建应用程序界面和消息4.在文档视图结构的应用程序中,视图类的对象是如何来获取文档类对象中的数据的?答:是依靠视图类的成员函数GetDocument来返回文档对象指针,然后再通过该指针来访问文档类的数据成员或函数成员的。①学习并熟悉使用MFCAppWizard创建单文档界面的MFCWindows应用程序的②用Workspace工程管理窗口的ClassView选项卡了解MFC应用程序框架类。①阅读本书附录A,按附录的指导用MFCAppWizard创建一个单文档界面文档视图结构的应用程序框架(例如程序名称为MyPrj)。②使用Workspace窗口的ClassView选项卡观察应用程序中的框架类,见图3-4。③用鼠标单击某个类名称前面的带有“+”的小方框,即可以树状图的方式展现该类14MFCWindows应用程序设计习题解答及上机实验④在某个类的名称上双击,可以打开该类的声明文件,在声明文件中观察这个类的结构。⑤选择ClassView选项卡,用鼠标右击某个类的名称,在出现的菜单中选择BaseClasses选项,在出现的对话框中观察类与其基类之间的关系(例如图3-6)。CWinThread白白CCmdTargetCobjectPublic:CMyPrjApp::CMyPrjApplvoid]n.n修改后的mfc教机教材例题代码第四修改后的mfc教材教材例题代码(第四章⑥用上述方法打开CMyPrjApp-BaseClassesandMembers对话框,沿着类的继承顺序寻找数据成员mpMainWnd,找到后双击它打开它的定义并观察它的数据类型。⑦按步骤③所说的方法展开视图类CMyPrjView,并用鼠标双击成员函数GetDocument的位置,在打开的代码中观察这个函数的实现代码,见图37。⑨双击文档类CMyPrjDoc的名称,在打开的类声明中用如下代码声明一个字符指第3章MFC应用程序框架习题解答及上机实验voidChyPrjviewDunpCDunpContex●AssertValid0ASSERT(R-PDocunentIsKindOfRUNTIMECLASSChyPrjDocdif'nfme《区⑩在ClassView选项卡中展开文档类CMyPrjDoc后,用鼠标双击它的构造函数名称,在打开的函数实现中初始化字符指针mpText:1在ClassView选项卡中展开视图类CMyPrjView结构后,用鼠标双击视图类的成员函数名称OnDraw,在打开的函数中书写如下代码:voidCMyPrjViewOnDrawCpDC->TextOut(10,10,pDoc->mpText2按下Ctrl+F5键编译并运行该程序,观察其结果。_WMLBUTTONDOWN消息响应函数OnLButtonDown,然后在其中书写如下代码:_voidCMyPrjViewOnLButtonDownUINTnFlpDoc—>mpText=HeLLoCWorldCViewOnLButtonDownnFlagspo4按下Ctrl+F5键编译并运行该程序,并体会视图类的成员函数GetDocument的作用及使用方法。 1.为什么要使用DC?答:为了屏蔽硬件输出设备的多样性(显示器、打印机、绘图仪等),Windows系统为程序员提供了一个可以操作这些硬件却与硬件无关的接口,于是就可以把对不同设备的操作方法统一起来。2.MFC中CDC的派生类有哪几个?试说出它们的作用。答:MFC中CDC的派生类有4个,它们的作用说明如下。 ①CClientDC:应用在除WMPAINT消息之外的消息处理函数中, 提供窗口客户区的设备描述环境。②CMetaFileDC:代表Windows图元文件的设备描述环境。在创建与设备无关的并且可以回放的图像时使用这个类型的DC。③CPaintDC:在WMPAINT消息的处理函数OnDraw中使用的窗_口用户区的设备描述环境。④CWindowDC:提供在整个窗口内(不只是用户区)绘图的设备描述3.如何把绘图工具载入设备描述环境?答:使用CDC的成员函数SelectObject把绘图工具载入设备描述4.如何使用CDC类提供的绘图方法来绘图?答:首先使用语句CDC*pDC创建一个CDC类对象的指针,然后用下面格式的语句来调用CDC类提供的各种方法:MFCWindows应用程序设计习题解答及上机实验5.编写一个应用程序,使用CDC类的TextOut函数输出一字符串。答:在OnDraw函数中写入如下代码:6.编写一个单文档应用程序,程序启动后在用户区显示一个方形,当用鼠标左键单击用户区后,该方形会变为圆形,如果再单击则又变回方形。答:设置一个开关变量mbKey,当其值为FALSE时,在OnDraw函数中使用函数Rectangle绘制方形;而当其值为TRUE时,使用函数Ellipse绘制圆形。再定义一个成员变量mrectRec存储方形和圆形的尺寸。程序代码如下:_CViewOnLButtonDownnFlagsp第4章图形习题解答及上机实验pDC-RectanglemrectRec7.编写一个应用程序,该程序在运行后在用户区绘制一个圆形,每单击鼠标左键一次则圆的颜色会变化一次。①在视图类声明中定义3个数据成员以描述颜色:___②在视图类的鼠标按下消息响应函数中用下面代码改变颜色: CViewOnLButtonDownnFlagspo③在视图类的OnDraw函数中定义画刷和绘制圆形:voidCColorViewOnDrawCBrusholdBrushpDCSelepDC->Ellipse(20,20,220,220)pDC->SelectObjectoldBrush实验内容:实验目的:①理解GDI函数。③使用断点观察程序中变量的变化情况。①按本章习题5创建应用程序。20MFCWindows应用程序设计习题解答及上机实验②程序运行无误后,把原来显示圆形改为显示方形,即把OnDraw中的原来绘制圆形的代码改为:pDC->Rectangle(20,20,220,220③修改应用程序代码使显示图形的边框与填充色一致,即把OnDraw函数改为:voidCColorViewOnDrawCBrusholdBrushpDCSelepDC->Rectangle(20,20,220,220pDC->SelectObjectoldBrushpDC->SelectObject(oldPen④在鼠标按下消息响应函数的代码行的位置设置断点,观察成员变量mclr1的变化。 ①构造一个长度为0的字符串对象。②构造一个名称为s的字符串对象,并把字符串初始化为:Hello,③构造一个名称为s的字符串对象,s字符串的内容是100个A。④构造一个名称为s的字符串对象,s字符串的内容是buffer的头anotherCString字符串的内容相同。2.执行+CString("VisualC++Right语句后,s字符串中的内容是什么?3.现有语句CStrings("My,name,is,C++");,若想将s字符串中的22MFCWindows应用程序设计习题解答及上机实验4.创建CString时只分配128B的缓冲区,如何分配更大的缓冲区?答:使用GetBuffer()函数。5.编写一个满足下面要求的单文档界面应用程序。①单击左键显示"您已经单击左键了"。②单击右键显示"您已经单击右键了"。①为添加的消息响应函数编写如下代码:②用同样的方法添加右键消息响应函数,代码如下:6.编写一个单文档界面应用程序,该程序可以测试在鼠标左键按下时鼠标光标的位置是否处在某规定的矩形框内,如果不在该矩形框内,则计算机的扬声器会发出“叮”的声音,反之则会在用户区显示光标的位置。①用MFCAppWizard创建一个名称为MusInRec的单文档应用程序框架。②在视图类的声明中定义一个CRect类的对象来描述矩形,再定义一个POINT结构来存储鼠标在按下时的位置,即在视图类的声明中添加如下代码: ③在视图类的构造函数中初始化数据成员:CMusInRecView::CMusInRecView():mrRct(50④在视图类的OnDraw函数中写入如下代码:第5章MFC的通用类习题解答及上机实验voidCMusInReeViewOnDrawwsprintfdYpointxmpoin⑤在视图类的鼠标左键按下消息响应函数OnLButtonDown中写入如下代码:)CViewOnLButtonDownnFlagspo说明:本题用到了一个wsprintf函数,它的作用是把数字转换为字符,该函数的原型为:7.编写一个单文档界面应用程序,该程序在用户区能以两个矩形的相交矩形为外接矩形画一个椭圆。①用MFCAppWizard创建一个名称为RecRec的单文档应用程序框架。②在视图类的声明中声明两个描述矩形的成员变量: ③在视图类的构造函数中初始化数据成员:24MFCWindows应用程序设计习题解答及上机实验:mrRecl(50,50,250,200),mrRec2(④在视图类的OnDraw函数中写入如下代码://pDC-RectanglemrRecl//pDC->Rectangle(mrRec__pDC->Ellipse(x1,y1,x2,y2)说明:该程序还有一些缺陷,它对两个矩形不相交的情况没有进行处理,请读者将应该有的代码补全。实验内容:通用类的应用。第5章MFC的通用类习题解答及上机实验实验目的:①通过对CRect类对象的应用,了解该类的成员函数。②通过对CPoint类对象的应用,了解该类的成员函数。①用MFCAppWizard创建一个名称为Cls的单文档界面应用程序框架。②在视图类的声明中声明成员变量:mpoint,mofpoint__③在视图类的构造函数中对成员变量进行初始化:CClsView::CClsView():mrRct1(10,10,40,20),mrRet2mofpoint.y=10;④在视图类的鼠标按下消息响应函数中添加如下代码:voidCClsViewOnLButtonDownUINTnFl}OffsetRect(mpoint+mofpoint);CViewOnLButtonDownnFlagsp⑤在视图类的OnDraw函数中添加如下代码:26MFCWindows应用程序设计习题解答及上机实验⑥按下Ctrl+F7键编译并运行程序。⑦查阅VisualC++的帮助文件,了CPointCRect程序中用合适的方式运用这些成员函数。通过对CRect类对象的应用,了解该类的①用MFCAppWizard创建一个名称为DrawLine的单文档界面应用程序框架。②在应用程序的头文件StdAfx.h中包含头文件:③在工程中声明一个类: ④在类的构造函数中初始化成员:⑤在视图类的声明文件中包含头文件:⑥在视图类的声明中定义两个成员:第5章MFC的通用类习题解答及上机实验 ⑦在视图类的鼠标按下消息响应函数OnLButtonDown中写入如下代码:voidCDrawLineViewOnLButtonDownUINTnF_CViewOnLButtonDownnFlagsp⑧在视图类的OnDraw函数中写入如下代码:voidCDrawLineViewOnDraw⑨输入代码无误后,按下Ctrl+F5键编译并运行程序,然后在用户区按下鼠标左键观察程序运行结果。⑩结合程序代码和程序运行结果,分析这个应用程序,体会群体类对象的使用。1把上面实验程序视图类中的数据定义都改在文档类,试编写程序使之仍然可以实现原程序的功能。第第Windows应用程序界面的设计习题解答及上机实验1.应用程序的界面有哪3种方式?①单文档界面。②多文档界面。③基于对话框的界面。2.分别说明什么是SDI界面的程序和什么是MDI界面的程序。答:用户使用应用程序时,如果该程序一次只能打开一个文档,那么这种程序就叫做SDI界面的程序,反之就叫做MDI界面的程序。3.在使用VisualC++提供的应用程序向导MFCAppWizard生成程序框架时,有哪几个机会允许程序员选择应用程序窗口的样式?答:一是在MFCAppWizard-Step1时,选择SDI、MDI和基于对话框界面的窗口样式。二是在MFCAppWizard-Step2时,可以确定窗口上诸如工具条、状态条、外观等一些选择。三是在MFCAppWizard-Step2中选择Advanced按钮后弹出的对话框中,选择窗口的样式。4.使用框架窗口类PreCreateWindow函数用坐标(200,200)、(400,400)设计一个应用程序的窗口。答:代码为:ifCFrameWndPreCreateWindow30MFCWindows应用程序设计习题解答及上机实验5.如何用MFC提供的程序设计向导实现具有可拆分窗口的界面程序?答:在MFC提供的程序设计向导MFCAppWizard的第四步中,即在MFCAppWizard-Step4of6对话框中按下Advanced按钮,在随后打开的AdvancedOptions对话框中选择WindowStyles选项卡,并在选项卡中选择Usesplitwindow选项,见图64。这样,由向导生成的程序就会具有可拆分窗口的界面了。选中该项后,向导即可生成可拆分窗口的程序界面6.文档类的成员函数UpdateAllViews的作用是什么?答:通知文档所对应的所有窗口同时进行重绘。7.为什么拆分窗口的显示更新必须要同步?答:因为应用程序的所有拆分窗口显示的应该是同一个文档,所以当文档发生变化时,该文档所对应的窗口当然要同时更新显示以正确地反映文档的内容。8.什么是无效显示区?答:无效显示区一般定义为窗口用户区上的一个矩形区域,这个区域应覆盖所有因文档发生变化而需要重绘的部分。当程序需要重新绘制一个图形时,只要重新绘制该矩第6章Windows应用程序界面的设计习题解答及上机实验形内部的图形就可以了。9.如何提高拆分窗口同步更新的效率?使用显示无效区提高同步更新效率。①带有拆分窗口界面的应用程序的设计方法。②理解显示无效区的概念。③掌握以CObject类为基类派生类的方法。①按教科书例6-3创建应用程序。②修改应用程序使其在运行后,当在窗口用户区按下鼠标左键时会同时绘制一个圆③设计并修改无效显示区。增强视图类的应用。了解增强视图类与基本视图类的区别。①用MFCAppWizard创建一个名称为ExView的单文档界面应用程序,但要在MFCAppWizardStep6of6中对应用程序的视图类进行选择,这个对话框的选项②在上面的编辑框中选择视图类,然后打开MFCAppWizard-Step6of6对话框下部的下拉Baseclass列表框(见图6-3),在其中选中需要的视图基类。本实验选择③按下Ctrl+F5键编译并运行程序。MFCWindows应用程序设计习题解答及上机实验图6-2MFCAppWizard-Step6of6对话框CTreeView ____ 34MFCWindows应用程序设计习题解答及上机实验所以如果用户想接收应用程序窗口之外的鼠标消息的话,则必须设法捕获鼠标消息。在旦被调用,则所有的鼠标消息都将发往应用程序的窗口中。在捕获鼠标消息,并完成了所应该做的工作之后,应用程序应该及时释放鼠标,以使鼠标可以按系统预定的正常方式发送消息,否则将使鼠标的一些正常作用失效。释放鼠标要使用BOOLReleaseCapture;5.什么样的窗口才能接收键盘消息?答:在Windows中,有时会同时打开多个窗口。在这些窗口中只有一个是活动窗口,这个窗口一般是屏幕上位置最靠前的窗口,它的特征是其标题栏是被点亮的,而不是灰色的。只有活动窗口才具有输入焦点,而Windows中规定只有具有输入焦点的窗口才6.为什么在Windows应用程序中不直接使用键盘的扫描码,而使用与键盘无关的虚拟码?怎样理解Windows中设备无关性这个概念?设备无关性对编写应用程序有什么作用?答:键盘的扫描码是当用户直接敲击键盘上的按键时,由键盘的接口直接产生的与该键对应的一种编码。由于市面上的键盘种类很多,所以不同类型的键盘产生的扫描码有可能是不同的,也就是说,这种扫描码是与具体的键盘相关的。这样在编写程序时会有很大的不便,例如在编写程序时使用了一种键盘的扫描码,但用户PC机中使用的键盘扫描码与程序中使用的键盘扫描码是不相同的,那么对于用户来说这个程序是不实用的,对于程序员来说这个程序是不通用的,是失败的。所以在Windows编程中提出了设备无关性这个概念,它是基于通用性来设计的,基于这种方法设计出来的程序是不依赖于具体的硬件的,甚至不依赖于软件。它不单单是针对键盘的,前面所学到的GDI就是一个很好的例子,另外它还应用在网络通信等方面。因此,设备无关性为我们编写程序带来了很大7.键盘消息分为哪几类?哪些键只产生按键消息,不产生字符消息?答:键盘消息可以分成两类:按键消息和字符消息。按键消息分为系统按键消息(WMKEYDOWN,WMKEYUP)和非系统按键消息(WMSYSKEYDOWN,WM消息只能产生系统字符消息,非系统按键消息只能产生非系统字符消息。在Windows中8.在程序中如何确定窗口何时具有了输入焦点,何时失去了输入焦点?第7章鼠标和键盘习题解答及上机实验去输入焦点时,会发出WMKILLFOCUS用键盘对这个窗口进行操作。消息。如果一个窗口获得了输入焦点,便可以9.编写一个Windows应用程序,要求在窗口的用户区中绘制一个圆,当单击鼠标左键时,该圆放大,单击鼠标右键时,该圆缩小,按下Ctrl键的同时移动鼠标,则该圆会随鼠标的移动而移动。①创建一个名称为My79的SDI程序框架。②在文档类中添加一个数据成员:③在其文档类的构造函数中添加如下初始化代码:tagRectright=tagRectbottom④在其视图类的鼠标右键按下消息响应函数中写入如下代码:InvalidateRectNULLTRCViewOnRButtonDownnFlagspo⑤在视图类的鼠标左键按下消息响应函数中写入如下代码:CViewOnLButtonDownnFlagspo⑥在视图类的鼠标移动消息响应函数中写入如下代码:36MFCWindows应用程序设计习题解答及上机实验voidCMyViewOnMouseMoveUINTnFlagintrpDoctagRectrightppDoctagRectbottompointyCViewOnMouseMovenFlagspo⑦在视图类的OnDraw函数中编写如下代码:pDC->Ellipse(pDoc-tagRect编译运行该程序,结果如图7+所示。第7章鼠标和键盘习题解答及上机实验10.编写一个Windows应用程序,将应用程序窗口的客户区均分为16个不同的区域,当鼠标光标移动到不同的区域中会出现不同的形状。①创建一个名称为My710的单文档应用程序框架。②在视图类声明中定义一个成员变量:_③在视图类的构造函数中编写如下代码: _ mhCursor[i]=::LoadCursor(NULLszCursor④为视图类添加一个成员函数GetCursorRegion,代码如下:)38MFCWindows应用程序设计习题解答及上机实验⑤⑤在视图类的WMSETCURSOR消息响应函数中编写如下代码:⑥在视图类的鼠标移动消息响应函数中编写如下代码:strInfoCursorstrCursornCurClientDCTextOutstrInfostrInfo⑦编译运行程序。11.试编写一个能满足如下要求的Windows应用程序:①在窗口中绘制一个像OICQ中的表情符号那样的小人脸,当用户在窗口用户区中按下鼠标左键时,小人的脸会变为黑色的哭泣的脸,而当释放左键时,小人的脸又变为红②当在窗口用户区中按下鼠标左键并拖动鼠标将其移出窗口以外时,释放鼠标左①首先创建一个名称为My711的SDI程序,为其文档类声明添加一个数据成员:第7章鼠标和键盘习题解答及上机实验②在其文档类的构造函数中添加如下初始化代码: ③在视图类的WMLBUTTONDOWN消息响应函数中编写如下代码: CViewOnLButtonDownnFlagspo ④在视图类的WMLBUTTONUP消息响应函数中编写如下代码: CViewOnLButtonUpnFlagspo⑤编写视图类的OnDraw函数,代码如下:penpenpDC->SelectObject(&penpDC->Ellipse(275,170,425,320)pDC->Are(290,215,340,240,340,225,290,225)pDC->Are(360,215,410,240,410,225,360,225)pDC->Are(320,240,380,300,320,270,380,270)pDC->Arc(320,270,380,310,380,290,320,290)pDC->SelectObject(oldpen⑥编译运行该程序。12.编写一个Windows应用程序,在窗口用户区中绘制一个矩形,用键盘上的上下左右光标键可以使该矩形分别向这4个方向移动,当按下键盘上的Home键时该矩形会从左上角方向增大,当按下键盘上的End键时该矩形会从右下角方向缩小,当单击鼠标左键时该矩形会恢复到原始尺寸。①首先创建一个名称为My712的SDI应用程序框架。②为其文档类添加一个数据成员:③在文档类的构造函数中添加如下初始化代码:④在视图类的WMKEYDOWN消息响应函数中编写如下代码:_voidCMyViewOnKeyDownright-=5; pDoc->tagRectright+=5;第7章鼠标和键盘习题解答及上机实验 pDoc->tagRectbottom+= _InvalidateRectNULLTRCViewOnKeyDownnCharnRepCntnF ⑤在视图类的WMLBUTTONDOWN消息响应函数中编写如下代码: InvalidateRectNULLTRCViewOnLButtonDownnFlagspo⑥编写视图类的OnDraw函数,代码如下:pDC->Rectangle(pDoc-tagRect13.编写一个可以实现下述功能的Windows应用程序。①按下Ctrl键时,在窗口中输出“你按下了Ctrl键,该键只产生按键消息不产生字42MFCWindows应用程序设计习题解答及上机实验符消息!"②按下Shift键时,在窗口中输出“你按下了Shift键,该键只产生按键消息不产生字符消息!。③按下小写r键时,弹出对话框,内容为:“你按下一个字符键r,该键既产生按键消息又产生字符消息!。④按下Esc键时,弹出对话框,内容为:“你按下了Esc键,该键既产生按键消息又产生字符消息!"。⑤按下Ctrl+a键时,弹出对话框,内容为:“你按下了键Ctrl+a,Ctrl键只产生按键消息,a键产生字符消息?。⑥按下Shift+b键时,弹出对话框,内容为:"你按下了键Shift+b,Shift键只产生按键消息,b键产生字符消息!。①首先创建一个名称为My713的SDI应用程序框架。②在其文档类声明中添加如下数据成员:CStringtexttexttexttexttexttexttext③在其文档类的构造函数中添加如下初始化代码: ④在视图类的WMKEYDOWN消息响应函数中编写如下代码: voidCMyViewOnKeyDown_ 第7章鼠标和键盘习题解答及上机实验InvalidateRectNULLTRCViewOnKeyDownnCharnRepCntnFl⑤在视图类的WMCHAR消息响应函数中编写如下代码:__pDoc->text=pDoc->textpDoc->text=pDoc->textCViewOnCharnCharnRepCntnFl⑥在视图类的OnDraw函数中编写如下代码:pDC->TextOut(150,150,pDoc->text⑦按下Ctrl+F5键编译运行该程序。实验内容:简单文本编辑器。①键盘消息综合运用。②学习插入符的使用。实验步骤:这是一个简单的文本编辑器,其功能如下:窗口中具有光标插入符,在插入符位置可以输入英文字符;按下Enter键可以换行,按下BackSpace键可以删除字符;当回退到行首时,弹出对话框,内容为"当前位置是文本的起始位置不能回退",利用上下左右光标键可以移动光标插入符,光标插入符的作用范围是整个客户①创建一个名称为MyEditer的SDI应用程序框架。②在其文档类声明中添加两个数据成员:③在文档类的构造函数中对num进行初始化,代码如下:④在视图类消息WMKILLFOCUS的消息响应函数中编写如下代码:_第7章鼠标和键盘习题解答及上机实验 ⑤在视图类消息WMSETFOCUS的消息响应函数中编写如下代码: py=0;CreateSolidCaretnLnH⑥在视图类消息WMCHAR的消息响应函数中编写如下代码:voidCMyEditerViewOnCharUINTnCharUINTnRepC_MFCWindows应用程序设计习题解答及上机实验pDoc->str+=(LPCTSTR)nCharClientDCTextOutptxptypDocstrpDocnum}CViewOnCharnCharnRepCntnFla⑦在视图类消息WMKEYDOWN的消息响应函数中编写如下代码:_voidCMyEditerViewOnKeyDownUINTnCharUINTnRepCntGetTextMetricsClientD_ CViewOnKeyDownnCharnRepCntnF⑧按下Ctrl+F5键编译运行该程序。从程序的运行结果可以看出,这是一个极不完善的文本编辑器,有兴趣的话,读者可以自行完善它。 4.在程序中如何使用图标资源?①使用LoadBitmap函数把位图资源载入位图对象。②用GetBitmap获得位图信息。③用以下代码把位图选入内存环境变量:④用BitBlt函数显示位图。6.创建一个具有菜单的Windows应用程序,用编辑MFCAppWizard提供的现有菜①本菜单资源的文本文件为: POPUP"文件(&F)"MENUITEM"新建(&N)\tCtrl+N",MENUITEM”打开(&O)..MtCtrl+0”,MENUITEM"退出(&X)",POPUP"编辑(&E)"剪切(&T)\tCtrl+X",复制(&C)\tCtrl+C",______POPUP"帮助(&H)"MENUITEM"帮助目录(&H)….",__②由于增加了一个菜单选项【帮助目录】的标识IDAPPHELP,故还需要在程序资__源的头文件Resourceh增加如下定义语句:第8章资源习题解答及上机实验7.创建一个单文档应用程序,试用VisualC++的资源编辑器修改原菜单,在主菜单中添加一个选项【标词】。【标记的子菜单中有【标记】、【标记2】和【标记3】等菜单选项。要求选中其中的一项后在菜单项前面设置一个标记,而再次选中时则去掉标记。①用MFCAppWizard创建一个名称为My87的应用程序框架。②在Workspace窗口中选择ResourceView选项卡,用鼠标双击菜单资源图标打开资源文件的可视方式,见图8+。Mv.7-Mv.7-创天中文VC+NyIDRMAINFRACEMenmu文件编错查看插入工程译工具口帮助文件(E)编辑②帮助IDRMAINFRAMEVersion可编译人调试入查找文件1入查执文件2入结果/③用鼠标把主菜单上的空白项拖到图84所示的位置。④用鼠标双击空白选项,在打开的MenuItemProperties对话框中选择适当的选项并在【标题】编辑框中添入菜单项的文本,见图8-2。⑤连续用第④步的方法对【标记】子菜单的各行编辑。编辑的内容主要是标题和ID,编辑后的结果见图8-3,最后把文件存盘。⑥在视图类的声明中添加成员变量:凶52MFCWindows应用程序设计习题解答及上机实验⑦在视图类的构造函数中为上面的成员变量进行初始化:⑧在Workspace窗口的ClassView选项卡中,用鼠标右击一个类的名称,在打开的中选中添加的各选项的标识,然后在左边的文本框中选择要使用的消息宏(本题需要进行两次选择,既要选用命令消息宏COMMAND又要选用UPDATECOMMANDUI),见图8-4。①菜单项【标记4的响应函数如下:第8章资源习题解答及上机实验__图8-4用来为类添加窗口消息的对话框voidCMyViewOnUpdateSignCCmdpCmdUI->SetCheck(mbSign2voidCMyViewOnUpdateSignCCmdpCmdUI->SetCheck(mbSign38.创建一个单文档界面应用程序,并创建一个新的图标来替换应用程序原来的框架。②在Workspace窗口ResourceView选项卡上IDRMAINFRAME的位置双击打开图标资源编辑器,见图8-5。这时显示的是系统默认的图标。文件编辑查看插入工程遍译Imsge工具官口帮助____----configurat:88-Win32③在Workspace窗口ResourceView选项卡上IDRMAINFRAME的位置右击,在打开的菜单中选中InsertIcon选项,这时在图标资源编辑器中显示一个空白图标,使用编辑器提供的绘图工具设计一个自己的图标,见图8-6。然后保存该资源文件。④以文本方式打开资源文件,把原图标的资源文件 __ 标了。"res\\My88Docico""res\\icon₁ico"ICONDISCARDABLEICONDISCARDABLE"res\My88Docico'键编译并运行程序,可以看到应用程序的图标已经变为自己的图9.为单文档程序添加一个【绘图】菜单项,在该项的子菜单中有【正方形】、【椭圆】、第8章资源习题解答及上机实验文件偏辑查看插入工程编译工具口薪助DIICONI IDRMY88T-------Conigura:88-Vin32congiig小编译简试火盖较支祥1入查技文件2入结果7【三角形】、【平行四边形】等菜单选项。选中一菜单项会在应用程序窗口的用户区中画出相应的图形,同时清除原有图形。①用MFCAppWizard创建一个名称为My89的单文档界面应用程序框架。②在系统生成的程序主菜单上添加如下子菜单:③在视图类声明中定义一个成员变量:④在视图类的OnDraw函数中编写如下代码:56MFCWindows应用程序设计习题解答及上机实验pDC->Rectangle(20,20,200,200pDC->Ellipse(20,20,350,300)pDC->MoveTo(140,200)pDC->LineTo(300,200)pDC->LineTo(220,100)pDC->LineTo(140,200)pDC->MoveTo(150,150)pDC->LineTo(300,150)pDC->LineTo(250,300)pDC->LineTo(100,300)pDC->LineTo(150,150)⑤在视图类中添加如下菜单命令消息响应函数:InvalidateRectNULLTRInvalidateRectNULLTRInvalidateRectNULLTR第8章资源习题解答及上机实验InvalidateRectNULLTR⑥按下Ctrl+F5键编译并运行程序。10.阅读VisualC++的帮助文档,了解一个名称为StretchBlt的函数,该函数与BitBlt函数一样可以把内存中的位图显示在显示器的屏幕上,但它与BitBlt不同的是可以把位图拉伸或缩小。请用这个函数编制一个可以对位图放大和缩小的应用程序。①用MFCAppWizard创建一个名称为My810的单文档界面应用程序框架。②用Windows附件提供的画图应用程序制作一个位图,把它命名为“位图”后存放在My810的资源文件夹res中。位图资源的文本文件为:_将在Resource.h头文件中的标识定义为:_③在应用程序的菜单中添加一项【缩放】,在【缩放】的子菜单中添加放大】、【缩小】和【复原3个选项。其资源文本文件为: _④在应用程序的文档类声明中定义位图对象等成员: ⑤在文档类的构造函数中添入初始化代码: MFCWindows应用程序设计习题解答及上机实验__⑦在3个菜单选项中编写如下代码: _⑧在视图类的OnDraw函数中,显示位图:MemDCCreateCompatibleDCNUpDoc->mnWidth,pDocmnHeightMemDCpDocmnHeightmdHrateSRCC⑨按下Ctrl+F5键编译并运行应用程序。第8章资源习题解答及上机实验实验内容:编写一个应用程序,在应用程序的菜单中有一个具有两个标题的选项,一个标题为【显示图形】,另一个标题为隐藏图形】。当标题为显示图形】时,用户选择了该菜单命令会在用户区显示一个圆形并且该菜单的标题会变为【隐藏图形。当用户再选择该选项后,在

温馨提示

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

评论

0/150

提交评论