windows高级编程技术习题1
(1) 项目工作区一般在集成开发环境的左侧。它展示一个工程的几个方面,它们分别是类视图、资源视图和文件视图。
(2) 编译程序的快捷键是Ctrl + F7,链接的快捷键是F7 ,运行程序的快捷键是Ctrl + F5。
(3) 项目工作区文件的扩展名为.dsw。
(4) 应用程序向导AppWizard的作用是帮助用户一步步生成一个新的应用程序,并且自动生成应用程序所需的基本代码,通过ClassWizard可以增加消息映射和成员变量。
(5) 菜单选择可以通过两种方法来进行:一种是;另一种是。
(6) 编译微型条工具栏最右边按钮的功能是设置断点。
2. 选择题(1) 工程文件的扩展名是 b 。A. .exe B. .dsp C. .dsw D. .cpp
(2) 设置断点的默认方式是 d 。
A. Location
B. Data
C. Message
D. Breakpoints
(3) 用应用程序向导AppWizard创建的C++源文件,应选择 a 选项卡。
A. Files
B. Projects
C. Workspaces
D. Other Documents
(4) Standard工具栏中最左边按钮与 c 菜单命令的功能一样。
A. New
B. New File
C. New Text File
D. New Workspace
3. 判断题
(1) 用快捷键F9既可设置断点,又可取消断点。( T )
(2) 用户可以通过Tools | Customize菜单命令设置集成开发环境的工具栏。( T )
(3) 通过应用程序向导AppWizard建立的程序不能被立即执行。( T )
(4) 调式程序时,会同时出现Variable窗口和Watch窗口。( T )
4. 简答题
(1) 什么是工程? 它是由什么组成的?
在Visual C++集成开发环境中,把实现程序设计功能的一组相互关联的C++源文件、资源文件以及支撑这些文件的类的集合称为一个工程。
(2) 解释项目工作区中各个视图的功能。
ClassView用于显示工程中定义的类;ResourceView 用于显示工程中所包含的资源文件;FileView 用于显示所创建的工程。
(3) WizardBar工具栏的作用是什么?
WizardBar工具栏可以对ClassView和ClassWizard中的命令进行快速访问,使类和成员函数的操作更加方便,WizardBar会自动跟踪用户程序的上下文
(4) 如何使用Debug调试程序?
调试过程开始后,Debug主菜单取代Build主菜单出现在菜单栏中,同时出现一个可停靠的调试工具栏和一些调试窗口如Variable窗口。
1. 填空题(1) 要想使用用户自定义的图标,必须经历、和3个过程。
(4) 应用程序利用关键字__ hBitmap _____定义位图句柄, 调用函数____ LoadBitmap() ___加载位图
并获得位图的句柄,还可以通过调用函数__ CreateBitmap () ___创建位图,调用函数__SelectObject___将位图选入内存设备环境中,调用函数__ BitBlt __在指定的设备上输出内存中的位图。应用程序在输出位图
之前,通常需要调用函数__ GetBitmap ___获取位图的尺寸。
2. 选择题(1) 定义图标的关键字是____D___。A. ICON B. CreateIcon C. LOADICON D. Icon
(2) 定义位图句柄的关键字是____A___。
A. hBitmap
B. HBITMAP
C. CreateBitmap
D. LOADBITMAP
(3) 调用函数____B____可以加载位图资源,调用函数__D_____可以将位图直接从内存设备环境复制到设备环境中。
A. LOADBITMAP
B. LoadBitmap
C. CreateBitmap
D. BitBlt
(4) 应用程序在输出位图之前,通常需要调用函数____D____获取位图的尺寸。该函数的作用是获取指定对象的信息并将其复制到指定的缓冲区中。
A. SetObject
B. GetObject
C. LoadBitmap
D. GetBitmap
3. 判断题(1) 位图的背景色是透明的。( F )
(2) Windows支持两类位图,一种是设备无关位图(DDB),另一种是设备相关位图(DIB)。( T )
(3) 在Windows应用程序中图标也是位图。( T )
(4) 在使用位图资源之前,需调用函数SelectObject将位图选入内存设备环境中。( T )
4. 简答题
(1) 应用程序怎样应用自定义的图标资源?
(2) 应用程序如何使用位图资源?
1.填空题
(1) Windows引入GDI的主要目的是为了实现设备无关性。
(2) 与DOS字符方式下的输出不同,Windows是按图形方式方式输出的。
(3) 为了体现Windows的设备无关性,应用程序的输出面向一个称之为设备环境(Device Context,DC)的虚拟逻辑设备。
(4) 在一个MFC应用程序中获得DC的方法主要有两种:一种是接受一个参数为指向CDC对象的指针;另一种是声明一个MFC设备环境类的对象,并使用this 指针为该对象赋值。
(5) Windows用COLORREF 类型的数据存放颜色,它实际上是一个32 位整数。它采用3个参数表示红、绿、蓝分量值,这3个值的取值范围为0—255 。
(6) 库存对象是由操作系统维护的用于绘制屏幕的常用对象,包括库存画笔画刷等。
(7) 可以利用CGdiObject类的成员函数SelectStockObject( ) 将GDI对象设置成指定的库存对象。
(8) 创建画笔后必须调用CDC类的成员函数SelectOject( )将创建的画笔选入当前设备环境。
(9) 在默认情况下输出文本时,字体颜色是黑色,背景颜色是白色,背景模式为
不透明模式。
(10) 创建画笔的方法有两种,一种是定义画笔对象时直接创建,另一种是先定义一个没有初始化的画笔对象,再调用CreatePen( )函数创建指定画笔。
2.选择题(1) 下面( a )不是MFC设备环境类CDC类的派生类。
A.GDI 类 B.CPaintDC类C.CClientDC类D.CWindowDC类
(2) 下面( c )不是GDI对象。A.CFont类B.CPalette类C.CClientDC类 D.CBitmap类
(3) 下列描述中,( c )是错误的。
A.CreatePointFont( )是CFont类提供的创建函数
B.可使用SetTextAlign( )函数改变文本对齐方式
C.使用函数GetTextMetrics( )可以获得所选字体中指定字符串的宽度和高度
D.可使用DrawText( )函数在给定的矩形区域内输出文本
(4) 下列( d )不是MFC CDC类中常用的文本输出函数。
A.TextOut( ) B.DrawText( ) C.ExtTextOut( ) D.Ext DrawText( )
3.判断题(1) CDC类是MFC设备环境类的基类。( T )
(2) CClientDC代表整个窗口的设备环境。( T )
(3) Cpen、CFont是GDI对象。( T )
(4) 深绿色RGB值为(0,128,0) ( T )
(5) 删除CPen对象可调用CPen对象的DeleteObject( )函数。( T )
(6) 创建阴影画刷函数是CreateHatchBrush( )。( T )
(7) 默认的对齐方式是TA_LEFT| TA_BOTTOM。( F )
(8) DDB又称GDI位图,它依赖于具体设备,只能存在于内存中。( T )
4.简答题(1) GDI创建哪几种类型的图形输出?矢量图形、光栅图形和文本。
(2) 什么是设备环境?它的主要功能有哪些?
设备环境DC,也称设备描述表或设备上下文。它是由GDI创建、用来代表设备连接的数据结构。
功能:1) 允许应用程序使用一个输出设备。
2) 提供Windows应用程序、设备驱动和输出设备之间的连接。
3) 保存当前信息,例如当前的画笔、画刷、字体和位图等图形对象及其属性,以及颜色和背景等影响图形输出的绘图模式。
4) 保存窗口剪切区域(Clipping Region),限制程序输出到输出设备中窗口覆盖的区域。
(3) 什么是GDI,它有什么功能?MFC将GDI函数封装在哪个类中?
图形设备接口,GDI作为Windows的重要组成部分,负责管理用户绘图操作时功能的转换
CPen、CBrush、CFont、CBitmap和CPalette
(4) 请叙述设备无关性的含义,实现设备无关性需要哪几个环节?
避免了用户对硬件直接进行操作。
(5) MFC提供了哪几种设备环境类?它们各自有什么用途?
CDC、CPaintDC、CClientDC、CWindowDC和CMetaFileDC
(6) 简述传统的SDK获取设备环境的方法。
在WM_PAINT消息处理函数中通过调用API函数BeginPaint( )获取设备环境,在消息处理函数返回前调用API函数EndPaint( )释放设备环境。如果绘图操作不是在WM_PAINT消息处理函数中,需要通过调用API函数GetDC( )获取设备环境,调用API函数ReleaseDC( )释放设备环境。
(7) 简述创建和使用自定义画笔的步骤。
(8) 简述采用MFC方法编程时,显示一个DDB位图的步骤。
1. 填空题(1) Windows提供的标准控件有__静态控件___、____按钮控件____、__编辑框控件__、__列表框控件___、___组合框控件_____、____滚动条控件_____和_________________。
(2) 使用滚动条控件一般要用到所在对话框类中的消息___WM_VSCROLL和WM_HSCROLL___。
(3) 按钮控件一般有___按键按钮、单选按钮和复选框__3种类型。
(4) 对话框一般由__对话框模板____和__对话框类______两部分组成。
2. 选择题
(1) 要将模式对话框在屏幕上显示需要用到函数( b )。
A. Create
B. DoModal
C. OnOK
D. 构造函数
(2) 通常将对话框的初始化工作在( c )函数中进行。
A. OnOK
B. OnCancel
C. OnInitDialog
D. DoModal
(3) 如果在输入时采用选择的方法进行,( d )控件不能采用。
A. 列表框控件
B. 单选按钮
C. 复选框
D. 编辑框
(4) 要打开文件,使用通用对话框,应该使用( a )通用对话框类。
A. CFileDialog
B. CColorDialog
C. CprintDialog
3. 简答题
(1) 试简述组合框控件和列表框控件的区别。
列表框中可列出用户所需的选项,用户不必记住每一项,也不用一字一字输入。但是当用户需要的项目未在列表框中列出时,列表框就无能为力了。而编辑框控件则可以根据用户需求进行灵活输入,但需要记忆内容,并且需要逐字输入。如果将这两个控件结合起来使用,正常情况下用户可方便地在列表框中进行选择,如果没有所需项,则使用编辑框进行输入,从而出现了组合框这种控件。它结合列表框和编辑框控件的特点,取二者之长,互相弥补其短,从而完成复杂的输入功能。
(2) 对话框有几种类型,试简述其区别。
1)模式(Modal)对话框;
在对话框关闭之前,用户无法在同一应用程序的其他地方进行工作,例如打开文件对话框。
2)无模式(Modaless)对话框。
在它仍然保留在屏幕的同时,用户还可以在同一应用程序的其他窗口中进行工作,例如查找对话框。
(3) 试简述创建一个模式对话框的步骤。
填空题(1) 快捷键或菜单及相关资源的资源符号的前缀是IDR_。
(2) 用户可以通过项目工作区窗口的ResourceView视图来查看资源。
(3) 常见的菜单类型有主菜单、弹出菜单和快捷菜单3种。
(4) 基于对话框的应用程序在运行时没有菜单栏。
(5) 在MFC中,工具栏的功能由类CToolBar实现。
(6) 调用CToolBar类的成员函数CToolBar::Create( ) 创建并初始化工具栏窗口对象。
(7) 设置工具栏停靠特性,需要调用EnableDocking( ) 函数。
(8) 状态栏实际上是一个窗口,一般分为几个窗格,用来显示不同的信息。
(9) 在MFC中,状态栏的功能由CStatusBar 类实现。
(10) 状态栏显示的内容由数组indicators 决定,需要在状态栏中显示各窗格的标识符、位置以及个数。
2. 选择题(1) Windows资源提供的资源编辑器不能编辑( c )。
A.菜单B.工具栏C.状态栏D.位图
(2) 在编辑某菜单项时,若要指明该菜单项是一个弹出式子菜单,必须选择属性对话框中的( b )。
A.Separator B.Pop-up C.Inactive D.Grayed
(3) 要使鼠标箭头在按钮上暂停时能显示工具栏按钮提示,必须设置工具栏的风格为( b )。
A.CBRS_TOOLTIPS B.CBRS_FLYBY
C.CBRS_NOALIGN D.WS_VISIBLE
(4) MFC应用程序框架为状态栏定义的静态数组indicators放在文件( a )中。
A.MainFrm.cpp B.MainFrm.h C.stdAfx.cpp D.stdAfx.h
3. 判断题
(1) 在同一项目中,Visual C++在内部用来标识资源的资源符号不能重复。( T )
(2) 用户可以通过项目工作区窗口的FileView视图来查看资源。( F )
(3) 给菜单项定义快捷键,只需在菜单项属性设置对话框的Caption文本框中说明即可。
( T )
(4) 弹出快捷菜单一般出现在鼠标箭头的位置。( )
(5) UPDA TE_COMMAND是更新命令用户接口消息。UPDATE_COMMAND_UI
( F )
(6) 工具栏停靠特性只能设置一次。( T )
(7) 状态栏的功能由CStatusBar类实现。( T )
(8) CMenu类、CToolBar类和CStatusBar类的根基类是相同的。( T )
4. 简答题
(1) 请叙述菜单设计一般需要经过的步骤。
(2) 为应用程序创建快捷菜单主要有哪些方法?
使用Component Gallery创建快捷菜单
使用TrackPopupMenu( )函数创建快捷菜单
(3) 如何动态创建菜单?
1)利用CreateMenu( )函数创建一个空的弹出式菜单,该函数的原型为:
HMENU CreateMenu()
2)调用AppendMenu( )或InsertMenu( )函数在菜单中加入菜单项。
3)调用函数SetMenu( )加载动态菜单。
(4) 创建工具栏的基本步骤有哪些?
创建工具栏窗口, 装载工具栏资源, 设置工具栏风格, 设置工具栏停靠特性, 设置工具栏的初始停靠位置, 移动工具栏, 工具栏隐显控制
(5) 请叙述MFC创建状态栏所做的工作。
1. 简答题
(1) 文档和视图框架结构中的核心成员有哪几个?
CDocument类、CView类、框架CFrameWnd类、CDocTemplate类和应用CWinApp类。
(2) 文档成员UpdateAllViews有什么功能?如何通知同一文档的所有视图进行更新?
该函数把文档被修改的信息通知给每个视图,通常在用户已经通过视图改变文档之后,从视图类中调用此函数,来获取文档被修改的信息。
(3) 自定义类如何实现支持序列化?
(4) 文档类如何访问视图类?框架类如何访问文档类?
GetFirstViewPosition()和GetNextView()
GetActiveDocument()
(5) 如何实现动态切分窗口?如何实现静态切分窗口?
CSplitterWnd类的成员函数Create是动态拆分窗口的关键,AppWizard也支持动态拆分窗口。
静态拆分窗口的产生是靠CSplitterWnd::CreateStatic( )函数和CSplitterWnd::CreateView( )函数来实现的。
(6) 简述如何实现多档多视。
1. 简答题
(1) 什么是显式链接与隐式链接?
所谓的隐式链接是指在应用程序中不需指明DLL文件的实际存储路径,程序员不需关心DLL文件的实际装载。显式链接时,使用DLL 的可执行程序在运行时通过函数调用来显示加载或卸载DLL,并通过函数指针来调用DLL 的导出函数。
(2) 为什么加extern“C”修饰符?
extern "C"是使C++能够调用C写作的库文件的一个手段,如果要对编译器提示使用C的方式来处理函数的话,那么就要使用extern "C"来说明。
(3) 简述动态链接时Windows的搜索路径。
包含EXE 文件的目录、进程的当前目录、Windows 系统目录、环境变量列出的目录。
(4) 什么是显式加载和卸载动态链接库?
随用随加载,而不是让程序启动时自动把所有的动态链接库全部加载。
FreeLibrary函数帮助卸载动态链接库
1. 填空题(1) winsock有两种类型,它们是流套接字和数据报套接字。
(2) 创建一个新进程需要使用函数__CreatProcess_______。
(3) 终止其他线程需要使用函数___ExitThread_________。
(4) 在使用流式套接字建立服务器应用程序时,需要使用函数socket、___bind__、listen、___accept____及send和recv等。
2. 选择题
(1) 下列( )函数是使用流式套接字创建客户应用程序所不需要的。
A. connect( )
B. bind( )
C. recv( )
D. socket( )
(2) 下列( )方法不是创建新线程的方法。
A. CreateThread
B. AfxBeginThread
C. CreateProcess
(3) http协议使用的端口是( )A. 80 B. 21 C. 23 D. 25
3. 简答题
(1) 简述流式套接字与数据报套接字的区别。
流套接字提供双向的、有序的、无重复并且无记录边界的数据流服务,它适用于处理大量数据。流套接字是面向连接的,通信双方进行数据交换之前,必须建立一条路径,类似于打电话,首先要双方能连接,才能继续通话。
数据报套接字支持双向的数据流,但并不保证数据传输的可行性、有序性和无重复性。也就是说,一个从数据报套接字接收信息的进程有可能被发现信息重复,或者和发出时的顺序不同的情况。数据报套接字是无连接的,它不保证接收端是否正在侦听,类似于邮政服务。
(2) 简述ExitProcess和TerminateProcess的异同。
可以调用ExitThread函数或TerminateThread函数终止线程的执行。与进程的终止相似,一般情况下使用ExitThread函数来终止线程,只有在不得已的情况下才使用TerminateThread来终止线程。
(3) 简述进程的优先级,在VC中都用什么来表示。
每个进程都有相应的优先级,优先级决定它何时运行和接收多少CPU 时间。
实时(Realtime)、高(High)、变通(Normal)和空闲(Idle),默认情况下进程的优先级为普通优先级。