预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共57页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第7章 MFC原理与方法一个优秀的面向对象编程工具往往匹配一个功能强大的类库,类库封装了大量Windows编程需要使用的函数和数据结构。与VisualC++捆绑在一起的MFC(MicrosoftFoundationClass)微软基础类就是这样一个由Microsoft公司设计的类库。采用MFC方式编程提高了Windows应用程序的开发效率,但由于MFC应用程序结构的复杂性和透明性,要想完全掌握MFC应用程序的内部机制需要付出很大的努力。 认识MFC只是一个过程、一个手段,最终目的是为了良好并熟练地运用MFC。本章主要学习内容: Windows的编程机制 MFC的基本原理和使用方法: MFC类 MFC应用程序框架 MFC消息管理 MFC宏 常用的MFC类7.1Windows编程基础WindowsAPI是Windows操作系统与应用程序之间的标准接口,它提供了几千个标准函数、宏和数据结构的定义。API(ApplicationProgrammingInterface) 在使用VisualC++、VisualBasic和Delphi编程时都可以调用WindowsAPI函数,Windows应用程序可通过调用标准WindowsAPI函数使用系统提供的功能。 WindowsAPI函数的目标代码保存在一些DLL动态链接库中,其中最主要的DLL是User32.dll、Gdi32.dll和Kernel32.dll三个库文件。DLLdynamiclinklibrary动态链接库传统SDK编程:程序员通过调用API函数,自己动手、按部就班地实现程序各部分的功能。SDK(SoftwareDevelopmentKit)应用程序的结构比较清晰,但程序员必须编写所有的功能代码。 利用VisualC++编写一个类SDK应用程序:首先利用Win32Application向导建立一个Windows应用程序框架,然后根据需要可以向程序项目中添加一些头文件、实现源文件和资源文件,并编写具体的程序代码。1.执行“File|New”菜单命令,在New对话框的Project页面中选择Win32Application项目类型,输入程序名Hello。在向导第1步选择“Atypital“Helloworld!”application”项,单击Finish按钮。 2.在窗口函数WndProc()的消息处理分支switch-case结构中添加WM_LBUTTONDOWN鼠标单击消息及其处理代码: caseWM_LBUTTONDOWN: MessageBox(NULL,"Youpressedthe leftbuttonofmouse!","Message",NULL); break;SDK应用程序结构:7.1.2句柄(Handle)使用句柄的好处通过访问类的public属性成员变量,如类CWnd的成员变量m_hWnd就是一个窗口对象的句柄。 先定义一个句柄,然后调用MFC类的成员函数Attach()将句柄与一个MFC类对象联系在一起,此时的句柄就成为该MFC类对象的句柄。在退出对象作用域之前,调用成员函数Detach()将句柄和对象进行分离。如下所示: CWndmyWnd; HWNDhWnd; myWnd.Attach(hWnd); ...... myWnd.Detach();所谓消息就是用于描述某个事件发生的信息,而事件是对于Windows的某种操作。 事件和消息密切相关,事件是因,消息是果,事件产生消息,消息对应事件。所谓消息的响应,其实质就是事件的响应。 消息驱动是Windows应用程序的核心,所有的外部响应(如键盘、鼠标和计时器等)都被Windows先拦截,转换成消息后再发送到应用程序中的目标对象,应用程序根据消息的具体内容进行处理。 消息不仅可由Windows发出,它也可由应用程序本身或其它程序产生。Windows为每一个应用程序都维护一个或多个消息队列,发送到每个程序窗口的消息都排成一个队列。消息队列和在应用程序中的轮询处理Windows消息分为三种类型:typedefstructtagMSG{ HWNDhWnd; //目标窗口句柄 UINTmessage; //消息标识 WPARAMwParam; //消息参数1(附加信息,16位) LPARAMlParam; //消息参数2(附加信息,32位) DWORDtime; //消息发送时间 POINTpt; //消息发送时鼠标的屏幕坐标 }MSG;例为程序Hello添加键盘消息处理功能,判断当前按下的键是不是A或a键,并给出相应的提示。利用WindowsAPI开发程序的用户有这样的体会,即使开发一个简单的Windows应用程序也需要对Windows的编程原理有很深刻的认识,需要手工编写冗