内容发布更新时间 : 2025/1/9 1:45:01星期一 下面是文章的全部内容请认真阅读。
1. Windows应用程序中消息传递是如何进行的?
简答:由Windows以及由其他应用程序向用户的应用程序发送的全部消息都储存在消息队列中,等待调用。SDK程序以消息循环调用Windows消息,如下代码表示此循环一直运行到程序接受终止执行消息才停止。 MSG Msg; ?
while (GetMessage (&Msg,NULL,0,0)) { TranslateMessage(&Msg); DispatchMessage(&Msg); }
在While循环内部,由循环的每次迭代调用Windows API函数GetMessage (&Msg,NULL,0,0)以得到消息队列中的下一个消息,并把它存在特定的MSG结构体变量Msg中。TranslateMessage(&Msg)实现键盘上某个键的翻译。DispatchMessage(&Msg)函数向窗口的消息处理函数发送消息,调用相应的消息处理函数。完成后进入下一个循环
2. Windows应用程序常用消息? 简答:窗口消息、命令消息和控件消息
3. Windows应用程序的最基本构成? 简答:
1) Windows应用程序由WinMain函数和WndProc窗口处理函数构成基本框架。
2) WinMain函数是所有Windows程序的入口,其功能包含窗口类的定义和注册,窗口的创建和显示,
并产生消息循环。
WinMain(?)//程序的入口点
{ WNDCLASS wndclass ; //定义窗口类 … 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 … case WM_DESTROY: //关闭窗口并退出程序
PostQuitMessage (0); default:
return DefWindowProc (hwnd,message,wParam,lParam); } return (0); }
4. 什么是图形设备接口?如何支持与设备无关的图形? 简答:
GDI:图形设备接口(Graphics Device Interface)
GDI是Windows系统的重要组成部分,负责系统与用户或绘图程序之间的信息交换,并控制在输出设备上显示图形或文字。 Windows应用程序使用GDI和Windows设备驱动程序来支持与设备无关的图形。
5. 应用程序如何获取设备环境输出图形?比较两种方法的异同?
简答:常用的获取设备环境的方法是调用函数BeginPaint和GetDC,采用的方法为响应WM_PAINT消息:
case WM_PAINT:
HDC hdc; //定义一个DC句柄变量 PAINTSTRUCT ps; //定义无效区域 hdc = BeginPaint(hwnd, &ps);
//使无效窗口变为有效,并获得一个DC句柄 ? //使用 GDI 函数
EndPaint(hwnd, &ps); //释放DC句柄
函数 项目 适用场合 操作区域 释放设备环境所用函数 BeginPaint 只适用于由WM_PAINT消息驱动的图形刷新 无效区域 EndPaint GetDC 非WM_PAINT消息驱动也可以,使用范围更广 整个用户区 ReleaseDC
6. VC6建立的工程中后缀为.cpp,.h,.rc,.dsp,.dsw的文件的作用是什么? 文 件 名 .cpp .h .rc .dsw .dsp .clw 说 明 源文件,源程序代码,常为类的实现文件 包含函数声明和变量定义的头文件头文件,常为类的声明文件 可编辑资源脚本文件 工作区文件,它保存了当前工作区所包含的项目的信息,一个工作区可能包含一个或多个工程 项目文件,它包含当前项目的设置、项目中包含的文件等信息 类信息文件,它含有能被AppWizard用来编辑现有类或增加新类的信息。AppWizard还用这个文件来保存创建和编辑消息映射与对话框数据所需的信息,以及创建虚拟成员函数所需的信息
7. MFC支持的三种不同类型的应用程序?相互间的区别?其中哪些采用了文档/视图结构?
简答:MFC应用程序向导能建立基于单文档(SDI),基于多文档(MDI)和基于对话框(Dialog Based)三种应用程序的框架。其中前两种采用了文档/视图结构。
8. 简述链接器在控制台程序方式、API程序方式和MFC程序方式在寻找入口函数上的不同。 简答:
控制台程序方式(Console Application):链接器自动去寻找main()函数作为入口 API程序方式(Win32 Application):链接器自动去寻找Winmain()函数作为入口 MFC程序方式(MFC Application(exe)) :使用系统的AfxWinMain()函数作为入口
9. 使用MFC AppWizard生成一个简单的单文档应用程序,分析创建了哪些主要类?各类的作用?
简答:应用程序框架类CMainFrame、应用程序类、文档类、视图类和关于帮助类。这五个类之间的通讯和数据交换是通过相互调用公开成员函数和发送消息来完成的。
应用程序类:负责程序的初始化、运行以及结束处理;
主窗口类:负责主窗口的创建、显示和搜索用户命令以及消息派发;
文档类:负责应用程序文档的装载和维护,文档是应用程序需要保存的任何内容;
视图类:负责为文档提供一个或几个视图,视图的作用是为显示和修改文档提供人机界面。
类名称 CMymfcApp CMainFrame CMymfcDoc CMymfcView 基 类 CWinApp CFrameWnd CDocument CView 类声明文件 Mymfc.h MainFrm.h MymfcDoc.h MymfcView.h 类实现文件 Mymfc.cpp MainFrm.cpp MymfcDoc.cpp MymfcView.cpp
10. 使用MFC AppWizard生成应用程序时,在源程序中找不到WinMain()函数,为什么?
简答:MFC应用程序中都以一个公有的AfxWinMain()函数作为程序的入口,此函数存储在VC安装目录?\\Microsoft Visual Studio\\VC98\\MFC\\SRC的WINMAIN.CPP文件中。
11. 简述MFC应用程序的启动流程. 简答:MFC应用程序从theApp开始启动 (1) 构建theApp全局对象
(2) 操作系统加载AfxWinMain函数,启动应用程序, InitInstance ()函数调用
(3) 创建并显示窗口(InitInstance ()函数中“注册文档模板”过程中隐含地创建了主窗口)
(4) 返回AfxWinMain函数,再调用函数Run(),启动消息循环,接收系统或用户的消息,完成用户需要的功能。
(5) 当接收WM_QUIT消息或按下
ExitInstance () ,使应用程序从当前实例中退出当应用程序终止时,执行清除工作,将控制权交给操作系统。
12. AppWizard所产生的STDAFX文件的作用?
简答:StdAfx.h是预编译头文件,将常用的MFC头文件都放在StdAfx.h中,如afxwin.h、afxext.h、afxdisp.h、afxcmn.h等,同时让StdAfx.cpp包含StdAfx .h
作用:StdAfx.cpp只需编译一次,并能生成预编译头文件,采用预编译头文件可以加速编译过程