您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 《面向对象程序设计》Windows部分习题答案(学生)
1.Windows应用程序中消息传递是如何进行的?简答:由Windows以及由其他应用程序向用户的应用程序发送的全部消息都储存在消息队列中,等待调用。SDK程序以消息循环调用Windows消息,如下代码表示此循环一直运行到程序接受终止执行消息才停止。MSGMsg;…while(GetMessage(&Msg,NULL,0,0)){TranslateMessage(&Msg);DispatchMessage(&Msg);}在While循环内部,由循环的每次迭代调用WindowsAPI函数GetMessage(&Msg,NULL,0,0)以得到消息队列中的下一个消息,并把它存在特定的MSG结构体变量Msg中。TranslateMessage(&Msg)实现键盘上某个键的翻译。DispatchMessage(&Msg)函数向窗口的消息处理函数发送消息,调用相应的消息处理函数。完成后进入下一个循环2.Windows应用程序常用消息?简答:窗口消息、命令消息和控件消息3.Windows应用程序的最基本构成?简答:1)Windows应用程序由WinMain函数和WndProc窗口处理函数构成基本框架。2)WinMain函数是所有Windows程序的入口,其功能包含窗口类的定义和注册,窗口的创建和显示,并产生消息循环。WinMain(…)//程序的入口点{WNDCLASSwndclass;//定义窗口类…RegisterClass(&wndclass);//注册窗口类CreateWindow(…);//创建窗口ShowWindow(…);//显示窗口UpdateWindow(…);//更新窗口While(GetMessage(&msg,NULL,0,0))//消息循环,将消息派送给窗口函数WndProc{TranslateMessage(&msg);DispatchMessage(&msg);}}3)WndProc窗口处理函数定义了应用程序对收到的不同消息的响应,其中包含了应用程序对各种可能接收到的消息的处理过程,是消息处理分支控制语句的集合。WndProc(hwnd,message,wParam,lParam){switch(message){case…caseWM_DESTROY://关闭窗口并退出程序PostQuitMessage(0);default:returnDefWindowProc(hwnd,message,wParam,lParam);}return(0);}4.什么是图形设备接口?如何支持与设备无关的图形?简答:GDI:图形设备接口(GraphicsDeviceInterface)GDI是Windows系统的重要组成部分,负责系统与用户或绘图程序之间的信息交换,并控制在输出设备上显示图形或文字。Windows应用程序使用GDI和Windows设备驱动程序来支持与设备无关的图形。5.应用程序如何获取设备环境输出图形?比较两种方法的异同?简答:常用的获取设备环境的方法是调用函数BeginPaint和GetDC,采用的方法为响应WM_PAINT消息:caseWM_PAINT:HDChdc;//定义一个DC句柄变量PAINTSTRUCTps;//定义无效区域hdc=BeginPaint(hwnd,&ps);//使无效窗口变为有效,并获得一个DC句柄…//使用GDI函数EndPaint(hwnd,&ps);//释放DC句柄函数项目BeginPaintGetDC适用场合只适用于由WM_PAINT消息驱动的图形刷新非WM_PAINT消息驱动也可以,使用范围更广操作区域无效区域整个用户区释放设备环境所用函数EndPaintReleaseDC6.VC6建立的工程中后缀为.cpp,.h,.rc,.dsp,.dsw的文件的作用是什么?文件名说明.cpp源文件,源程序代码,常为类的实现文件.h包含函数声明和变量定义的头文件头文件,常为类的声明文件.rc可编辑资源脚本文件.dsw工作区文件,它保存了当前工作区所包含的项目的信息,一个工作区可能包含一个或多个工程.dsp项目文件,它包含当前项目的设置、项目中包含的文件等信息.clw类信息文件,它含有能被AppWizard用来编辑现有类或增加新类的信息。AppWizard还用这个文件来保存创建和编辑消息映射与对话框数据所需的信息,以及创建虚拟成员函数所需的信息7.MFC支持的三种不同类型的应用程序?相互间的区别?其中哪些采用了文档/视图结构?简答:MFC应用程序向导能建立基于单文档(SDI),基于多文档(MDI)和基于对话框(DialogBased)三种应用程序的框架。其中前两种采用了文档/视图结构。8.简述链接器在控制台程序方式、API程序方式和MFC程序方式在寻找入口函数上的不同。简答:控制台程序方式(ConsoleApplication):链接器自动去寻找main()函数作为入口API程序方式(Win32Application):链接器自动去寻找Winmain()函数作为入口MFC程序方式(MFCApplication(exe)):使用系统的AfxWinMain()函数作为入口9.使用MFCAppWizard生成一个简单的单文档应用程序,分析创建了哪些主要类?各类的作用?简答:应用程序框架类CMainFrame、应用程序类、文档类、视图类和关于帮助类。这五个类之间的通讯和数据交换是通过相互调用公开成员函数和发送消息来完成的。应用程序类:负责程序的初始化、运行以及结束处理;主窗口类:负责主窗口的创建、显示和搜索用户命令以及消息派发;文档类:负责应用程序文档的装载和维护,文档是应用程序需要保存的任何内容;视图类:负责为文档提供一个或几个视图,视图的作用是为显示和修改文档提供人机界面。10.使用MFCAppWizard生成应用程序时,在源程序中找不到WinMain()函数,为什么?简答:MFC应用程序中都以一个公有的AfxWinMain()函数作为程序的入口,此函数存储在VC安装目录…\MicrosoftVisualStudio\VC98\MFC\SRC的WINMAIN.CPP文件中。11.简述MFC应用程序的启动流程.简答:MFC应用程序从theApp开始启动(1)构建theApp全局对象(2)操作系统加载AfxWinMain函数,启动应用程序,InitInstance()函数调用(3)创建并显示窗口(InitInstance()函数中“注册文档模板”过程中隐含地创建了主窗口)(4)返回AfxWinMain函数,再调用函数Run(),启动消息循环,接收系统或用户的消息,完成用户需要的功能。(5)当接收WM_QUIT消息或按下Alt+F4键时,应用程序从Run成员函数内部调用函数ExitInstance(),使应用程序从当前实例中退出当应用程序终止时,执行清除工作,将控制权交给操作系统。12.AppWizard所产生的STDAFX文件的作用?简答:StdAfx.h是预编译头文件,将常用的MFC头文件都放在StdAfx.h中,如afxwin.h、afxext.h、afxdisp.h、afxcmn.h等,同时让StdAfx.cpp包含StdAfx.h作用:StdAfx.cpp只需编译一次,并能生成预编译头文件,采用预编译头文件可以加速编译过程类名称基类类声明文件类实现文件CMymfcAppCMainFrameCMymfcDocCMymfcViewCWinAppCFrameWndCDocumentCViewMymfc.hMainFrm.hMymfcDoc.hMymfcView.hMymfc.cppMainFrm.cppMymfcDoc.cppMymfcView.cpp13.文档/视图结构的作用?简答:文档对数据进行管理和维护,数据保存在文档类的成员变量中;视图在文档和用户之间起中介作用,接收用户的输入并接受用户的修改视图可以直接或间接的访问文档类中的成员变量,它从文档类中(而不是从存储介质中)将文档中的数据取出来,然后在屏幕上显示文档的数据。14.如何获取一个对话框中控件的指针?简答:调用CWnd::GetDlgItem,获取一个CWnd*指针调用成员函数。15.如何使窗口不可见?简答:用SW_HIDE隐藏窗口,可以结合FindWindow,ShowWindow控制。16.如何创建和使用模态(模式)对话框?简答:(1)使用资源编辑器建立对话框资源并使用ClassWizard创建一个CDialog的派生类(2)创建派生类的对象(3)使用对象名调用DoModal()函数,弹出模态对话框(4)如果选择OK按钮,则DoModal()返回IDOK;如果选择Cancel按钮,则DoModal()返回IDCANCEL,取消用户输入。17.如何禁止和使能控件?简答:控件也是窗口,所以可以调用CWnd::EnableWindow使能和禁止控件。m_wnd.EnableWindow(TRUE)m_wnd.EnableWindow(FALSE)18.简述在MFC应用程序中UpdateData函数的作用及其参数含义与使用场合。简答:UpdateData只有一个BOOL类型的参数,UpdateData(FALSE)一般用于对话框控件连接的变量值刷新屏幕显示;UpdateData(TRUE)用于获取屏幕数据到对话框控件连接的变量中。19.已知一个对话框上有一个编辑框控件,ID为IDC_EDIT1,为其关联了CEdit类型的变量m_edit1,说明如何改变编辑框内部的文本为“Hello”,写出程序代码。简答:第一种方法:m_edit1.SetSel(0,-1);m_edit1.ReplaceSel(Hello);第二种方法:SetWindowText(Hello);20.在一个对话框上添加了三个单选按钮,要使它们之间自动实现互斥,应该注意什么问题?在VC环境下如何操作?简答:要实现一组单选按钮的自动互斥,应该让它们的控件ID值连续,并设置第一个单选按钮的Group属性,其他的不设。21.说明系统定时器消息(WM_TIMER)的使用方法及其用到的函数.简答:使用定时器消息的方法是:首先调用SetTimer函数定义定时器消息,包括消息产生的时间间隔等;然后在相应的WM_TIMER消息处理里添加定时器消息响应代码;最后调用KillTimer释放该定时器。22.在MFC中,要对一个消息进行响应(如菜单的COMMAND消息)需要定义该消息的处理函数,说明添加一消息处理函数包括的三个内容?简答:(1)在头文件中声明消息处理函数(2)在实现文件中完成消息映射(3)在实现文件中加入消息处理函数23.单文档界面(SDI)的应用程序和多文档界面(MDI)的应用程序的主要差别简答:(1)SDI的应用程序只有一个窗口;MDI的应用程序每次可以读写多个文件或文档,可同时对多个文档进行操作,可以有多个子窗口。(2)在创建SDI界面的应用程序时,不生成CChildFrame类,CMainFrame类的基类为CFrameWnd在创建MDI界面的应用程序时,CMainFrame类的基类为CMDIFrameWnd。
本文标题:《面向对象程序设计》Windows部分习题答案(学生)
链接地址:https://www.777doc.com/doc-2819619 .html