logo资料库

C++MFC教程.doc

第1页 / 共162页
第2页 / 共162页
第3页 / 共162页
第4页 / 共162页
第5页 / 共162页
第6页 / 共162页
第7页 / 共162页
第8页 / 共162页
资料共162页,剩余部分请下载后查看
Visual C++MFC 入门教程 木有页眉 目录 +-- 第一章 VC 入门 |------ 1.1 如何学好 VC |------ 1.2 理解 Windows 消息机制 |------ 1.3 利用 Visual C++/MFC 开发 Windows 程序的优势 |------ 1.4 利用 MFC 进行开发的通用方法介绍 |------ 1.5 MFC 中常用类,宏,函数介绍 +-- 第二章 图形输出 |------ 2.1 和 GUI 有关的各种对象 |------ 2.2 在窗口中输出文字 |------ 2.3 使用点,刷子,笔进行绘图 |------ 2.4 在窗口中绘制设备相关位图,图标,设备无关位图 |------ 2.5 使用各种映射方式 |------ 2.6 多边形和剪贴区域 +-- 第三章 文档视结构 |------ 3.1 文档 视图 框架窗口间的关系和消息传送规律 |------ 3.2 接收用户输入 |------ 3.3 使用菜单 |------ 3.4 文档,视,框架之间相互作用 |------ 3.5 利用序列化进行文件读写 |------ 3.6 MFC 中所提供的各种视类介绍 +-- 第四章 窗口控件 1
木有页眉 |------ 4.1 Button |------ 4.2 Static Box |------ 4.3 Edit Box |------ 4.4 Scroll Bar |------ 4.5 List Box/Check List Box |------ 4.6 Combo Box/Combo Box Ex |------ 4.7 Tree Ctrl |------ 4.8 List Ctrl |------ 4.9 Tab Ctrl |------ 4.A Tool Bar |------ 4.B Status Bar |------ 4.C Dialog Bar |------ 4.D 利用 AppWizard 创建并使用 ToolBar StatusBar Dialog Bar |------ 4.E General Window |------ 4.F 关于 WM_NOTIFY 的使用方法 +-- 第五章 对话框 |------ 5.1 使用资源编辑器编辑对话框 |------ 5.2 创建有模式对话框 |------ 5.3 创建无模式对话框 |------ 5.4 在对话框中进行消息映射 |------ 5.5 在对话框中进行数据交换和数据检查 |------ 5.6 使用属性对话框 |------ 5.7 使用通用对话框 2
木有页眉 |------ 5.8 建立以对话框为基础的应用 |------ 5.9 使用对话框作为子窗口 +-- 第六章 网络通信开发 |------ 6.1 WinSock 介绍 |------ 6.2 利用 WinSock 进行无连接的通信 +------ 6.3 利用 WinSock 建立有连接的通信 第一章 VC 入门 1.1 如何学好 VC 这个问题很多朋友都问过我,当然流汗是必须的,但同时如果按照某种思 路进行有计划的学习就会起到更好的效果。万事开头难,为了帮助朋友们更快 的掌握 VC 开发,下面我将自己的一点体会讲一下: 1、需要有好的 C/C++基础。正所谓“磨刀不误砍柴工”,最开始接触 VC 时不要 急于开始 Windows 程序开发,而是应该进行一些字符界面程序的编写。这样做 的目的主要是增加对语言的熟悉程度,同时也训练自己的思维和熟悉一些在编 程中常犯的错误。更重要的是理解并能运用 C++的各种特性,这些在以后的开发 中都会有很大的帮助,特别是利用 MFC 进行开发的朋友对 C++一定要能熟练运用。 2、理解 Windows 的消息机制,窗口句柄和其他 GUI 句柄的含义和用途。了解和 MFC 各个类功能相近的 API 函数。 3、一定要理解 MFC 中消息映射的作用。 4、训练自己在编写代码时不使用参考书而是使用 Help Online。 3
木有页眉 5、记住一些常用的消息名称和参数的意义。 6、学会看别人的代码。 7、多看书,少买书,买书前一定要慎重。 8、闲下来的时候就看参考书。 9、多来我的主页。^O^ 后面几条是我个人的一点意见,你可以根据需要和自身的情况选用适用于 自己的方法。 此外我将一些我在选择参考书时的原则: 对于初学者:应该选择一些内容比较全面的书籍,并且书籍中的内容应该 以合理的方式安排,在使用该书时可以达到循序渐进的效果,书中的代码要有 详细的讲解。尽量买翻译的书,因为这些书一般都比较易懂,而且语言比较轻 松。买书前一定要慎重如果买到不好用的书可能会对自己的学习积极性产生 击。 对于已经掌握了 VC 的朋友:这种程度的开发者应该加深自己对系统原理, 技术要点的认识。需要选择一些对原理讲解的比较透彻的书籍,这样一来才会 对新技术有更多的了解,最好书中对技术的应用有一定的阐述。尽量选择示范 代码必较精简的书,可以节约银子。 此外最好涉猎一些辅助性的书籍。 1.2 理解 Windows 消息机制 Windows 系统是一个消息驱动的 OS,什么是消息呢?我很难说得清楚,也很难 下一个定义(谁在嘘我),我下面从不同的几个方面讲解一下,希望大家看了 后有一点了解。 4
木有页眉 1、消息的组成:一个消息由一个消息名称(UINT),和两个参数(WPARAM,LPARAM)。 当用户进行了输入或是窗口的状态发生改变时系统都会发送消息到某一个窗 口。例如当菜单转中之后会有 WM_COMMAND 消息发送,WPARAM 的高字中 (HIWORD(wParam))是命令的 ID 号,对菜单来讲就是菜单 ID。当然用户也可以 定义自己的消息名称,也可以利用自定义消息来发送通知和传送数据。 2、谁将收到消息:一个消息必须由一个窗口接收。在窗口的过程(WNDPROC) 中可以对消息进行分析,对自己感兴趣的消息进行处理。例如你希望对菜单选 择进行处理那么你可以定义对 WM_COMMAND 进行处理的代码,如果希望在窗口中 进行图形输出就必须对 WM_PAINT 进行处理。 3、未处理的消息到那里去了:M$为窗口编写了默认的窗口过程,这个窗口过程 将负责处理那些你不处理消息。正因为有了这个默认窗口过程我们才可以利用 Windows 的窗口进行开发而不必过多关注窗口各种消息的处理。例如窗口在被拖 动时会有很多消息发送,而我们都可以不予理睬让系统自己去处理。 4、窗口句柄:说到消息就不能不说窗口句柄,系统通过窗口句柄来在整个系统 中唯一标识一个窗口,发送一个消息时必须指定一个窗口句柄表明该消息由那 个窗口接收。而每个窗口都会有自己的窗口过程,所以用户的输入就会被正确 的处理。例如有两个窗口共用一个窗口过程代码,你在窗口一上按下鼠标时消 息就会通过窗口一的句柄被发送到窗口一而不是窗口二。 5、示例:下面有一段伪代码演示如何在窗口过程中处理消息 LONG yourWndProc(HWND hWnd,UINT uMessageType,WPARAM wP,LPARAM) { 5
木有页眉 switch(uMessageType) { //使用 SWITCH 语句将各种消息分开 case(WM_PAINT): doYourWindow(...);//在窗口需要重新绘制时进行输出 break; case(WM_LBUTTONDOWN): doYourWork(...);//在鼠标左键被按下时进行处理 break; default: callDefaultWndProc(...);//对于其它情况就让系统自 break; 己处理 } } 接下来谈谈什么是消息机制:系统将会维护一个或多个消息队列,所有产生的 消息都回被放入或是插入队列中。系统会在队列中取出每一条消息,根据消息 的接收句柄而将该消息发送给拥有该窗口的程序的消息循环。每一个运行的程 序都有自己的消息循环,在循环中得到属于自己的消息并根据接收窗口的句柄 调用相应的窗口过程。而在没有消息时消息循环就将控制权交给系统所以 Windows 可以同时进行多个任务。下面的伪代码演示了消息循环的用法: while(1) { id=getMessage(...); 6
木有页眉 if(id == quit) break; translateMessage(...); } 当该程序没有消息通知时 getMessage 就不会返回,也就不会占用系统的 CPU 时 间。 下图为消息投递模式 在 16 位的系统中系统中只有一个消息队列,所以系统必须等待当前任务处理消 息后才可以发送下一消息到相应程序,如果一个程序陷如死循环或是耗时操作 时系统就会得不到控制权。这种多任务系统也就称为协同式的多任务系统。 Windows3.X 就是这种系统。而 32 位的系统中每一运行的程序都会有一个消息队 列,所以系统可以在多个消息队列中转换而不必等待当前程序完成消息处理就 可以得到控制权。这种多任务系统就称为抢先式的多任务系统。Windows95/NT 就是这种系统。 7
木有页眉 1.3 利用 Visual C++/MFC 开发 Windows 程序的优势 MFC 借 助 C++ 的 优 势 为 Windows 开 发 开 辟 了 一 片 新 天 地 , 同 时 也 借 助 ApplicationWizzard 使 开 发 者 摆 脱 离 了 那 些 每 次 都 必 写 基 本 代 码 , 借 助 ClassWizard 和消息映射使开发者摆脱了定义消息处理时那种混乱和冗长的代 码段。更令人兴奋的是利用 C++的封装功能使开发者摆脱 Windows 中各种句柄的 困扰,只需要面对 C++中的对象,这样一来使开发更接近开发语言而远离系统。 (但我个人认为了解系统原理对开发很有帮助) 正因为 MFC 是建立在 C++的基础上,所以我强调 C/C++语言基础对开发的重 要性。利用 C++的封装性开发者可以更容易理解和操作各种窗口对象;利用 C++ 的派生性开发者可以减少开发自定义窗口的时间和创造出可重用的代码;利用 虚拟性可以在必要时更好的控制窗口的活动。而且 C++本身所具备的超越 C 语言 的特性都可以使开发者编写出更易用,更灵活的代码。 在 MFC 中对消息的处理利用了消息映射的方法,该方法的基础是宏定义实 现,通过宏定义将消息分派到不同的成员函数进行处理。下面简单讲述一下这 种方法的实现方法: 代码如下 BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) //{{AFX_MSG_MAP(CMainFrame) ON_WM_CREATE() //}}AFX_MSG_MAP ON_COMMAND(ID_FONT_DROPDOWN, DoNothing) END_MESSAGE_MAP() 经过编译后,代码被替换为如下形式(这只是作讲解,实际情况比这复杂得多): 8
分享到:
收藏