收藏 分享(赏)

mfc复习题ppt(改了下).ppt

上传人:yjrm16270 文档编号:5908565 上传时间:2019-03-21 格式:PPT 页数:27 大小:248.50KB
下载 相关 举报
mfc复习题ppt(改了下).ppt_第1页
第1页 / 共27页
mfc复习题ppt(改了下).ppt_第2页
第2页 / 共27页
mfc复习题ppt(改了下).ppt_第3页
第3页 / 共27页
mfc复习题ppt(改了下).ppt_第4页
第4页 / 共27页
mfc复习题ppt(改了下).ppt_第5页
第5页 / 共27页
点击查看更多>>
资源描述

1、1、简述作用域标识符:的作用 用来解决局部变量与全局变量的重名问题。即在局部变量的作用域内,可用“:”对被隐藏的同名全局变量进行访问。 2、内联函数的作用及适用范围 设置内联函数的目的是为了消除函数调用时的系统开销,以提高运行速度,但这是一种用空间换时间的措施,故仅适合一些小函数。 3、请解释int i和int& ri = i的意义 表示变量ri引用了变量i,这时ri就可看作是i的别名,即它们指向同一个内存单元。 4、掌握派生类对基类成员的继承关系 基类成员 作为派生类成员公有派生 私有派生 private成员 不可直接访问成员 不可直接访问成员 protected成员 protected成员

2、 private成员 public成员 public成员 private成员 5、掌握联编的概念与作用编译时的多态是通过静态联编来实现的。所谓联编(binding。亦称束定),就是把函数名与其函数体的程序代码连接(联系)在一起。静态联编时,系统用实参与形参进行匹配,对于同名的重载函数便根据参数上的差异进行区分,然后进行联编。从而实现了多态性。运行时的多态是用动态联编实现的。动态联编(也称晚联编)是程序运行时才进行的联编。即当程序调用到某一函数(过程)名时,才去寻找和连接其程序代码,对面向对象程序而言,就是当对象接收到某一消息时,才去寻找和连接相应的方法。,6、可视化开发系统往往集成了一系列系统

3、可用资源和开发工具,主要是指哪些? 程序调试工具,包括源程序语法检查、可执行程序修改和运行监视等;可选择并构成具体语句或源程序结构的例程库及Help;资源管理器,包括图形化窗口及组成元素的多种对象的编辑器;应用程序Help和Setup开发工具包;源程序编辑器和编译器;系统函数库和系统函数开发工具。 7、API函数有哪些的功能? 窗口管理函数实现窗口的创建、移动和修改功能;系统服务函数:实现与操作系统有关的多种功能;图形设备(GDI)函数:实现与设备无关的图形操作功能。 8、API、Win系统和Win应用程序之间的相互关系 API为应用程序提供Win系统各种特殊函数及数据结构定义;API是Win

4、系统与Win应用程序间的标准程序接口;Win应用程序可以利用上千个标准API函数调用系统功能。 9、一个应用程序的窗口一般包含哪些成分? 控制菜单框;下拉菜单;标题栏;工作区;窗口边界;最大化按钮;最小化按钮;垂直滚动条;水平滚动条。 填空: 10、编写一个Windows应用程序首先应创建一个或多个窗口,随后应用程序的运行过程即是窗口内部、窗口与窗口之间、窗口与系统之间进行数据处理与数据交换的过程。 11、在动态库的情况下,有两个文件,一个是引入库(.LIB)文件,一个是DLL文件,引入库文件包含被DLL导出的函数的名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到所需要使用

5、的DLL文件,库中的函数和数据并不复制到可执行文件中。 12、Visual C+支持三种DLL,它们分别是非MFC动态库、常规DLL、扩展DLL。 13、Windows程序的执行顺序取决于事件发生的顺序,程序的执行顺序是由顺序产生的消息驱动的,但是消息的产生往往并不要求有次序之分。 14、填空:Windows应用程序利用Windows消息(Message)与应用程序及系统进行信息交换。 15、一个完整的Windows应用程序通常由哪五种类型的文件组成? (1) C语言源程序文件;(2) 头文件;(3) 模块定义文件;(4) 资源描述文件;(5) 项目文件,16、简述复选框、单选按钮、下压式按钮

6、的用途 常用于只有两种完全相反状态的情况下;适用于同一组属性相同的数据中选一个数据;适用于消息的发送。 17、对话框用于处理哪两类消息? 对话框只处理两类消息,一类是创建窗口的消息,另一类是控件的消息。在普通窗口中接受wm_create消息,而在对话框中接受wm_initdialog消息。 18、对话框分为哪几类?它们有什么不同? 对话框分为模式对话框和非模式对话框。模式对话框要求用户在继续执行前回答对话框,否则不能进行。非模式对话框可以不回答对话框,继续进行。 19、用AppWizard创建SDI和MDI界面的应用程序的过程几乎完全一样,而其主要差别在哪些方面? 在创建SDI界面的应用程序时

7、,不生成CChildFrame类,CMainFrame类的基类为CframeWnd;在创建MDI界面的应用程序时,CMainFrame类的基类为CMDIFrameWnd。 20、视图是如何在文档和用户之间起中介作用的? 视图可以直接或间接的访问文档类中的成员变量,它从文档类中(而不是从存储介质中)将文档中的数据取出来,然后在屏幕上显示文档的数据;它可以接收用户的输入,并接受用户的修改。 21、命令消息与Windows消息和控件控制消息有和不同? 命令消息可以被多种对象处理,这些对象除了窗口和视图外,还可以是文档、文档模板或应用程序本身。而Windows消息和控件通知消息就只能被窗口和视图处理。

8、 22、文档类是如何将数据保存到磁盘文件或数据库中呢? 文档类通过串行化的过程将数据保存到磁盘文件或数据库中 23、请简述从CDocument类派生自己的文档类的典型步骤。 (1) 每一个文档类型从CDocument类(当然也可以是其它CDocument类的派生类)派生一个相应的文档类。(2) 为文档类添加成员变量。这些成员变量用来保存文档的数据,其它对象(如与文档相关联的视图)直接或间接的访问这些成员变量来读取或更新文档的数据。(3) 重载Serialize成员函数,实现文档数据的串行化。 24、简述文档、框架窗口和视图的创建过程之间的先后顺序: 创建文档 创建框架窗口 创建视图,25、简述

9、设备上下文的绘图原理 (1) 绘图程序不是寻址硬件,而是调用GDI函数,这些函数引用设备环境的数据结构,Windows把该设备环境结构映射到物理设备,并发出适当的输入输出指令。(2) 在编程过程中,不必关心硬件的具体实现,可以直接进行抽象的操作。(3) 利用GDI,只要把相关的GDI对象选入设备上下文,然后用设备上下文对象提供的有关方法就可以绘制出各种图形,当我们需要在显示器或打印机上绘图时,就需要调用GDI函数。 26、如何解决擦除问题? 在应用程序运行中,很多操作可能会破坏窗口内容,移动覆盖在窗口上的窗口或对话框、菜单拉下后又放开以及改变窗口的大小等,此时Windows都会发出WM_PAI

10、NT消息告知客户区的变动,同时发出WM_NCPAINT消息告知非客户区的变动。通常我们要在WM_PAINT消息的响应函数OnPaint()中进行客户区的画面重画工作,而非客户区的重画工作是由系统自己完成的。我们也可以使用Invalidate()函数、ValidateRgn()函数和ValidateRect()函数强制窗口重画。 27、简述使用画笔的主要步骤 创建新的画笔类对象,可以调用CPen类的构造函数CPen:CPen()来初始化新画笔;也可以调用CPen类的成员函数CreatePen()来实现。 (2) 保存原来的旧画笔,并将新创建的画笔对象选入设备对象中。 (3)开始实际绘图工作,调用

11、CDC类的各种绘图函数进行绘图。 (4) 恢复原来的旧画笔,同样调用SelectObject()函数来实现。 28、MFC支持哪两种线程 用户界面线程和工作者线程。 29、简述线程的创建原理 为了使用MFC创建一个线程,你所做的就是编写一个你希望的和程序的其它部分同时运行的函数,然后调用AfxBeginThread()来启动一个用以执行你的函数的线程。只要线程的函数在运行,线程就存活着,当线程函数结束时,线程就被销毁。,30、有哪三种使多线程更安全的方法? 三种使多线程程序更安全的线程同步对象临界区(critical section)、互斥对象(mutex)、信号量(semaphore)。 3

12、1、简述DLL的优点 在Windows操作系统中使用DLL有很多优点,最主要的一点是多个应用程序、甚至是不同语言编写的应用程序可以共享一个DLL文件,真正实现了资源“共享”,大大缩小了应用程序的执行代码,更加有效的利用了内存;使用DLL的另一个优点是DLL文件作为一个单独的程序模块,封装性、独立性好,在软件需要升级的时候,开发人员只需要修改相应的DLL文件就可以了,而且,当DLL中的函数改变后,只要不是参数的改变,程序代码并不需要重新编译。这在编程时十分有用,大大提高了软件开发和维护的效率。 32、利用ODBC创建数据库应用程序的步骤 (1) 建立数据源;(2) 用Appwizard创建程序框

13、架;(3) 显示数据库信息; 33、使用画笔的主要步骤 创建新画笔,保存旧画笔,并使用新画笔取代旧画笔,最后再恢复原来的旧画笔。 34、使用画刷的主要步骤 创建新画刷,保存旧画刷,并使用新画刷取代旧画刷,最后再恢复原来的旧画刷 。 35、简述两种创建自定义字体的方法 第一种是间接创建法,通过调用CFont类的函数CreateFontIndirect来实现;第二种是直接创建法,通过调用CFont类的函数CreateFont来实现。 36、指出下面代码中哪几行代码是创建新画笔,并保存旧画笔?哪行代码是恢复就画笔? void CDrawAppView:OnDraw(CDC* pDC ) CDrawA

14、ppDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); CPen pen(PS_SOLID, 2, RGB(0, 0, 255); CPen* pOldPen = pDC-SelectObject( ,答案: 创建新画笔和保存旧画笔的代码行为: CPen pen(PS_SOLID, 2, RGB(0, 0, 255); CPen* pOldPen = pDC-SelectObject(,37、void CDrawAppView:OnDraw(CDC* pDC ) CDrawAppDoc* pDoc = GetDocument(); ASSERT_VAL

15、ID(pDoc); CBrush* brush;brush = new CBrush(RGB(255, 0, 0); CBrush* pOldBrush = pDC-SelectObject(brush); pDC-Rectangle(20, 20, 60, 60); pDC-SelectObject(pOldBrush); ,答案: 创建新画刷: brush = new CBrush(RGB(255, 0, 0); 保存旧画刷并选择新画刷: CBrush* pOldBrush = pDC-SelectObject(brush); 执行绘图操作: pDC-Rectangle(20, 20, 6

16、0, 60); 恢复旧画笔: pDC-SelectObject(pOldBrush);,38、void CDrawAppView:OnDraw(CDC* pDC) char myStr100; CFont font; font.CreateFont(8, 0, 0, 0, FW_NORMAL, 1,0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, VARIABLE_PITCH|FF_ROMAN, “Times New Roman”); CFont* pOldFont = font.Sele

17、ctObject( ,创建新字体: font.CreateFont(8, 0, 0, 0, FW_NORMAL, 1, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, VARIABLE_PITCH|FF_ROMAN, “Times New Roman”); 选择新字体和保存旧字体: CFont* pOldFont = font.SelectObject(,1.在C+中,函数原型不能标识( D )A.函数的返回类型 B.函数参数的个数 C.函数参数类型 D.函数的功能 2.对于任意一个类,

18、析构函数的个数最多为( B )A.0 B.1 C.2 D.3 3.下面说法正确的是( B )A.内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方B.内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方C.类的内联函数必须在类体内定义 D.类的内联函数必须在类体外通过加关键字inline定义 4.在C+程序中,对象之间的相互通信通过( B )A.继承实现 B.调用成员函数实现 C.封装实现 D.函数重载实现 5.可以用p.a的形式访问派生类对象p的基类成员a,其中a是( D )A.私有继承的公有成员 B.公有继承的私有成员 C.公有继承的保护成员 D.公有继承的公有成员,39

19、、单项选择题,6派生类中的成员函数可以访问基类的( D ) A 私有段成员 B 保护段成员 C 公有段成员 D 保护段和公有段成员,40、改错题(共4分) include class Apublic: void fun( )couta.funendl; class B public: void fun( )coutb.funendl; void gun( )coutb.gunendl; class C:public A,public Bprivate:int b;/ public:void gun( )coutc.gunendl;void hun( )fun( ); ; 答案:void hun

20、()fun();出错,C:fun()有二义性。,41、程序分析,写出下列程序的运行结果(每题5分) (1) #include extern int a = 100, 200, 300; void display();/void main()/ int a = 10, 20, 30; for(int j =0; j3; j+) cout aj endl; display();/ void display()/for(int i = 0; i3; i+) cout ai endl;/ 结果: 10n20n30n100n200n300,(2)#include class sample static

21、int counter; public:sample()counter+; cout“创建sample类的第“counter “个对象.“endl; sample() cout“sample类的第”counter “个对象被删除.”endl;/counter-; ; int sample:counter = 0; void main()sample demo3; (2)结果: 创建sample类的第1个对象. 创建sample类的第2个对象. 创建sample类的第3个对象. sample类的第3个对象被删除. sample类的第2个对象被删除. sample类的第1个对象被删除.,(3) #

22、include class Xprotected:int x; public: X(int i)x = i;cout “x = “ x endl; X()cout“类X的对象被删除!“endl; class Yprotected: int y; public: Y(int i)y = i;cout “y = “yendl; Y()cout“类Y的对象被删除!“endl;class mul:public X, public Y public:mul(int i, int j): X(i), Y(j) couti“与“j“之积等于“x*yendl; mul()cout“类mul的对象被删除!“en

23、dl;,(3)结果: x = 10 y = 15 10与15之积等于150 类mul的对象被删除! 类Y的对象被删除! 类X的对象被删除!,void main() mul demo(10, 15);,(4) #include #include /void main() char One = “One if by land”; int fullLength = strlen(One); int tooShort = fullLength - 4; int tooLong = fullLength+1; cout.write(One, fullLength)”n”; cout.write(One,

24、 tooShort)”n”; cout.write(One, tooLong)”n”;,(4)答案: One if by land One if by One if by land,42、计算函数积分通常采用矩形法和梯形法。 积分如下:假设积分区间为x1到x2,被积函数为f(x),将积分区间等分n段,则每小段的长度h为: h = (x2-x1)/n 则矩形法的积分为: S = h*(f(x1)+f(x1+h)+f(x1+(n1)*h) 梯形法的积分公式为: S = h*(f(x1)+2*f(x1+h)+2*f(x1+(n1) *h)+f(x2)/2 利用虚函数的知识设计一程序计算函数f(x)=

25、 1/(1+x)在0.0到10.0区间内的积分值。,class ladder : public integrat public:/adder(double a1, double a2, int a3) :integrat(a1, a2, a3);/double integrate(); double ladder:integrate() double s = (fun(x1)+fun(x2)/(double)2; for(int i =1;iintegrate(); void main()rectangle rect(0.0, 10.0, 10); cout“利用矩形求的函数的积分值为(分成1

26、0等):“; display( ,#include /double fun(double); class integrat/protected: double x1, x2, h;/int n; public:/integrat(double a1, double a2, int a3) x1 = a1;/ x2 = a2;/n = a3;h = (x2-x1)/(double)n; virtual double integrate()=0;class rectangle : public integrat public:rectangle(double a1, double a2, int

27、a3) : integrat(a1, a2, a3);/double integrate(); double rectangle:integrate() double s = 0.0;/for(int i = 0; in;i+) s += fun(x1+h*(double)i);/s *=h; return s;,43、有一组记录,其内容为:Name Age Scoren LiuDong 16 460nLiBin 20 80nWangMing 18 285 分别使用操作符和流类成员函数按下列格式要求显示出来: (1) Name域采用左对齐方式,宽度为10,宽度不足的用*填充。 (2) Age域

28、有右对齐方式,宽度为3,宽度不足的0填充。 (3) Score域有右对齐方式,宽度为5,宽度不足的用*填充。,#include #include #include class demochar name10;int age; int score; public:demo(char*, int, int);void Mani();void memb(); demo:demo(char* str, int i, int j) strcpy(name, str);/age = i; score = j; void demo:Mani() cout setw(10) setiosflags(ios:l

29、eft) setfill(*)namesetw(3)setiosflags(ios:right)setfill(0)age setw(5)setiosflags(ios:right)setfill(*)scoreendl;,void demo:memb() cout.width(10);cout.setf(ios:left, ios:adjustfield);cout.fill(*);coutname;cout.width(3);cout.setf(ios:right, ios:adjustfield);cout.fill(0);coutage ;cout.width(5); cout.set

30、f(ios:right,ios:adjustfield);cout.fill(*);coutscoreendl; ,void main() demo D1(“LiuDong“, 16, 460); demo D2(“LiBin“, 20, 80); demo D3(“WangMing“, 18, 285); cout “使用操作符显示“endl; cout“ NAME Age Score“endl;D1.Mani();D2.Mani();D3.Mani(); cout endl “使用流类成员函数显示“endl; cout “ NAME Age Score“ endl;D1.memb();D2

31、.memb();D3.memb(); ,44、说明下面类中定义虚拟函数的方法是否正确?class baseprotected: int width; public:virtual void GetData(int* ptr) *ptr = width; ; class derived : public base public: int GetData(int* x) int j;j = width; width =*x;return j; ; 答案:GetData函数不属于虚拟函数,因为虚拟函数要求派生类中的函数定义与基类中的函数定义完全相同,也就是说,二者应该有相同的函数名称。相同的参数序列

32、和相同的返回值类型。,45、定制文件对话框,并显示文本文件。创建步骤 1) 用AppWizard创建一个SDI(单文档界面)空工程FileDlg 在“New”对话框的“Projects”属性页面中选择“MFC AppWizard(exe)”选项。在“Project name”编辑框中输入“FileDlg”,然后单击“OK”按钮进入创建过程。 在创建的第一步的“MFC AppWizard Step 1”对话框中选择“Single document”单选按钮,在第六步“MFC AppWizard Step 6 of 6”中,在“Base class”下拉框中将基类选择为“CEditView”,其他

33、各步均接受缺省设置。 2) 定制新的文件对话框类(1) 增加新类CMyFileDlg,该类定制文件对话框。 在工程FileDlg的工程工作区ClassView面板中,右击FileDlg classes。在弹出的快捷菜单中,选择“New Class”命令,在“Base class”下拉框中选择“CFileDialog”。单击“OK”按钮。 (2) 编辑类的头文件和实现文件,实现定制功能。 3. 实现定制文件对话框功能(1) 增加“文件打开”操作的消息处理函数OnFileOpen。 在工程工作区的ClassView面板中,右击CfileDlgApp类。在弹出的快捷菜单中,选择“Add Window

34、s Message Handler”命令,打开“New Windows Message and Event Handler”对话框。在“Class or Object to handle”列表框中,选择“ID_FILE_OPEN”消息。然后在“New Windows message/events:”列表框中双击“COMMAND”消息。 (2) 编辑OnFileOpen函数,编辑后的函数见下面清单:OnFileOpen函数 void CfileDlgApp:OnFileOpen() CMyFileDlg dlg(TRUE, NULL, “ReadMe.txt“,OFN_HIDEREADONLY

35、| OFN_OVERWRITEPROMPT,“TextFiles(*.txt) |*.txt|All Files(*.*) |*.*|“,NULL); if(dlg.DoModal() = IDOK)OpenDocumentFile(dlg.GetPathName(); 在FileDlg.cpp前面增加如下包含语句: #include “MyFileDlg.h” 编译、链接、运行应用程序,选择“文件”菜单中的“打开”命令。可以看到“打开”对话框和通常的“打开”对话框有所不同,整个对话框的高度增加了。选择“ReadMe”文本文件后单击“打开”按钮,将在视中显示该文件。,46、如下图创建应用程序,

36、在“形状”列表框中选择要绘制图形,在“笔颜色”下拉列表框选择画笔的颜色,在“刷子颜色”下来列表框中选择画刷的颜色。在“线型”组合框选择画笔的线型,在“填充类型”中选择画刷填充类型。单击“绘图” 按钮按照前面的选项绘制图形,单击“退出”按钮退出程序。 答案:创建步骤如下: (1)用AppWizard创建一个SDI(单文档界面)空工程ShapeDrawing 在“New”对话框的“Projects”属性页面中选择“MFC AppWizard(exe)”选项。在“Project name”编辑框中输入“ShapeDrawing”,然后单击“OK”按钮进入创建过程。 在创建的第一步的“MFC AppW

37、izard Step 1”对话框中选择“Single document”单选按钮,在第六步“MFC AppWizard Step 6 of 6”中,在“Base class”下拉框中将基类选择为“CEditView”,其他各步均接受缺省设置。 (2)相关处理 1)“笔颜色”下拉列表框单击鼠标右键PropertyiesData选项卡输入颜色(输完一行后,按下Ctrl+Enter键)。以同样方式处理“画刷颜色”下拉列表框。 2)静态文本和列表框的处理 静态文本 IDC_STATIC 形状 列表框 IDC_LIST_SHAPE 3)组合框的处理 Solid鼠标右键-Properties选中-Grou

38、p选项。注意创建单选按钮时要按照图中从上到下的顺序,这样保证了单选按钮的ID值是连续的,才能保证两组单选按钮的互斥性。name ID Caption组合框 IDC_STATIC 填充类型单选按钮 IDC_RADIO_SOLIDBRUSH SolidBrush单选按钮 IDC_RADIO_CROSS Cross 单选按钮 IDC_RADIO_PDIAGONAL PDiagonal 单选按钮 IDC_RADIO_BDIAGONAL Bdiagonal,4) 对话框中控件连接变量 Control Ids 变量类型 变量名称 IDC_LIST_SHAPE CListBox m_ListShape ID

39、C_COMBO_PENCOLOR CComboBox m_ComboPenColor IDC_COMBO_BRUSHCOLOR CComboBox m_ComboBrushColor (4)程序的定制 1) 在文件ShapeDrawingDlg中的消息处理函数OnInitDialog()中加入代码如下:m_ListShape.AddString(“Line“);m_ListShape.AddString(“Circle“);m_ListShape.AddString(“Rectangle“);m_ListShape.AddString(“RoundRectangle“); 调用列表框类成员函数

40、AddString()给列表框加入选项,完成列表框的初始化。 2)添加变量 在Workspace窗口中,选择ClassView卡,在类CMy14_8Dlg上单击鼠标右键,选择Add member variable菜单项,加入public型变量如下表所示: 变量类型 变量名称 说明 int m_nPenStyle 标志由“线型”组合框中所选择的画笔的类型 int m_nBrushStyle 标志由“填充类型”组合框中所选择的画刷类型 COLORREF m_crPenColor 标志“笔颜色”列表框中所选择的画笔颜色 COLORREF m_crBrushColor 标志“画刷颜色”列表框中所选择的

41、画刷颜色,name ID Caption 组合框 IDC_STATIC 线型 单选按钮 IDC_RADIO_SOLID Solid 单选按钮 IDC_RADIO_DASH Dash 单选按钮 IDC_RADIO_DOT Dot,单选按钮 IDC_RADIO_DASHDOT DashDot 下压式按钮 IDC_BTN_DRAW 绘制 下压式按钮 IDOK 退出,3)在ShapeDrawingDlg.cpp的OnInitDialog()函数中加入代码如下: m_crPenColor = RGB(255,0,0); /默认笔颜色 m_crBrushColor = RGB(255,0,0); /默认刷

42、颜色 m_nPenStyle = PS_SOLID; /默认笔样式 m_nBrushStyle = 0; /默认刷样式为Solid m_ComboPenColor.SetCurSel(0); /设置Pen组合框的当前选项 m_ComboBrushColor.SetCurSel(0); /设置Brush组合框的当前选项 m_ListShape.SetCurSel(0); /设置默认的Shape /设置单选按钮按钮的初始状态 CheckRadioButton(IDC_RADIO_SOLID,IDC_RADIO_DASHDOT,IDC_RADIO_SOLID); CheckRadioButton(I

43、DC_RADIO_SOLIDBRUSH,IDC_RADIO_BDIAGONAL, IDC_RADIO_SOLIDBRUSH);这里设置了各变量的初始值。默认笔和刷的颜色为红色,笔的线形为实线,画刷填充类型为实填充。 void CMy14_8Dlg:OnRadioSolid() m_nPenStyle = PS_SOLID; /笔样式为实线void CMy14_8Dlg:OnRadioDash() m_nPenStyle = PS_DASH; /笔样式为划线void CMy14_8Dlg:OnRadioDashdot() m_nPenStyle = PS_DASHDOT; /笔样式为点划线.vo

44、id CMy14_8Dlg:OnRadioDot() m_nPenStyle = PS_DOT; /笔样式为点线.void CMy14_8Dlg:OnRadioFdiagonal() m_nBrushStyle = HS_FDIAGONAL; /填充模式为向上45度线.void CMy14_8Dlg:OnRadioBdiagonal() m_nBrushStyle = HS_BDIAGONAL; /填充模式为向下45度线.void CMy14_8Dlg:OnRadioCross() m_nBrushStyle = HS_CROSS; /填充模式为较长线.void CMy14_8Dlg:OnRa

45、dioSolidbrush() m_nBrushStyle = 0; /填充样式为实,为列表框添加消息处理函数,设置画刷颜色 void CMy14_8Dlg:OnSelendokComboBrushcolor() int i; i=m_ComboBrushColor.GetCurSel();/画刷颜色组合框的当前选项标号 if(i=0) m_crBrushColor = RGB(255,0,0);/红else if(i=1)m_crBrushColor=RGB(0,255,0);/绿 else if(i=2)m_crBrushColor = RGB(0,0,255);蓝 else if(i=3

46、)m_crBrushColor =RGB(255,255,0);/黄 else if(i=4)m_crBrushColor = RGB(0,255,255);天蓝色 首先调用函数GetCurSel()得到当前选项在下拉列表框中的位置,然后根据此位置设置颜色变量。 映射“绘制”按钮的消息处理函数OnBtnDraw() void CMy14_8Dlg:OnBtnDraw() a CClientDC dc(this);/得到设备环境指针 CPen *ppenOld,penNew; /笔对象 CBrush *pbrushOld,brushNew,brushBack;定义画刷对象CRect rectCl

47、ient; /用户区矩形 GetClientRect( /定义图形区大小 /用白色画刷画图形区,brushBack.CreateSolidBrush(RGB(255,255,255); pbrushOld =dc.SelectObject( a,47、设计一个编辑控件的应用程序,实现如下功能:单击Showl,则在Edit1编辑框中显示“This is the first EditBox.”;单击Clear1,则Edit1编辑框中的内容被清除;单击Show2,则在Edit2编辑框中显示“This is the second EditBox!”;单击Clear2,则Edit2编辑框中的内容被清除;

48、单击Transfer,则把Edit1编辑框的内容复制到Edit2的编辑框中去;单击Undo,则取消上一次操作;若单击Exit,则退出程序的运行。 答案: (1) 首先生成一个dialog-based的工程; (2) 在ResourceView选项卡中打开Dialog资源组,然后双击IDD_EDITBOX_DIALOG。 (3) 利用控件窗口中的编辑框控件,在对话框中布置如上图所示的编辑框。,将鼠标移到Edit1编辑框上 单击鼠标右键,(在快捷菜单中)选择 Properties命令,在窗口中输入控件的ID标识值,IDC_EDIT1,用同样的方法设置其它各个对象的属性。 (3) 给编辑框连接变量 (4) 修改编辑框的特性,

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

当前位置:首页 > 中等教育 > 试题课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报