(适合初学者)MFC基础教程
MFC编程基础教程

第1章基于对话框的Windows应用程序1.简介Windows编程的两种方法,即Windows API编程和MFC编程。
2.基于对话框的应用程序的创建过程:•建立基于对话框的MFC 应用程序框架;•放置控件;•设置控件属性;•为控件连接变量,即为控件命名;•添加并且编写消息处理函数。
3.常用基本控件:•静态文本框:主要用来显示文本信息,不能接受用户输入•命令按钮:是最常见的、应用最广泛的一种控件。
在程序执行期间,当单击某个命令按钮后就会执行相应的消息处理函数。
•编辑框:是一个文本编辑区域,用户可以在该区域输入、编辑和显示正文内容。
•框架:将一组相关的控件框起来,达到标识一组控件的作用。
•单选按钮:用户在一组单选按钮中最多只能选择一项。
当某一项被选定后,其他选项自动变成未选状态。
•复选框:列出了可供选择的项,用户可根据需要选择其中的一项或多项,各选项之间的状态互不相关。
•列表框:通过显示多个选项,供用户选择,达到与用户对话的目的。
•组合框:组合了编辑框和列表框的特性而形成的一种控件。
在列表框中列出可供用户选择的项,当用户选定某项后,该项内容自动装入编辑框中。
•滚动条:通常附在对话框上用来协助观察数据或确定位置,也可以用来作为数据输入的工具。
1.1 Windows编程基础Windows 应用程序的主要特点是:•具有标准的图形用户界面。
•具有与硬件无关的特性。
•采用“消息传递,事件驱动”的运行机制。
用Visual C++ 编写Windows 应用程序主要有两种方法:一是使用Windows 提供的应用程序接口(Application Programming Interface ,API )函数;二是使用Microsoft 提供的微软基础类(Microsoft Foundation Class ,MFC )。
1.1.1 Windows API编程从本质上来说,API 是Windows 系统支持的函数定义、参数定义和消息格式的集合,共有上千个标准的API 函数可供应用程序调用。
28_MFC 教程 第3章 MFC基础

3.3.6 应用程序类
参见代码中的应用程序类 为了形成文档/视图结构的应用程序,在 InitInstance函数中,创建了一个单文档模 版类或多文档模版类对象,并在文档模版 的构造函数中,用系统定义的 RUNTIME_CLASS创建文档类对象,框架 窗口类对象和视图类对象.
22
3.3.7 程序员的主要工作
26
27
小结
应用程序类,框架窗口类,视图类,文档类构 成了应用程序的框架,框架的功能是通过 各类之间的协调工作实现的 文档/视图结构实现数据和数据表现的分 离,有利于数据和数据表现的单独改变.
28
பைடு நூலகம்
virtual BOOL OnNewDocument();
virtual void Serialize(CArchive& ar);
virtual ~CMyDoc();
DECLARE_MESSAGE_MAP() };
16
CMyDoc:: CMyDoc {
for(int i=0;i<3;i++)
Array[i]=0; } void CMyDoc::SetMem(int i,int x) {
LPCSTR m_lpszClassName; ……
CRuntimeClass* m_pBaseClass; CRuntimeClass* m_pNextClass; };
25
与处理消息映射类似,MFC把在类中声明 类信息表的代码封装在宏 DECLARE_DYNCREATE中,而把实现类信 息表和链表的代码封装在了宏 IMPLEMENT_DYNCREATE中.因此,凡是 设计具有动态创建对象能力的类时,都要 使用这两个宏.
值为边长画一个正方形。
MFC编程基础教程

MFC编程基础教程MFC(Microsoft Foundation Classes)是一套基于C++的应用程序框架,用于开发可视化的Windows应用程序。
MFC提供了丰富的工具和类库,使程序开发人员能够更加轻松地创建Windows应用程序。
一、MFC框架的介绍MFC是一种C++编程框架,用于开发Windows应用程序。
MFC提供了一系列的类和方法,用于处理窗口、消息处理、资源管理等常见的任务。
MFC框架的核心是一个称为CWinApp的类,它是应用程序的入口点。
二、MFC的基本概念1.窗口:MFC使用窗口来显示应用程序的用户界面。
窗口可以是主窗口、对话框、工具栏、菜单等。
2.消息处理函数:MFC使用消息机制来处理用户输入和系统事件。
消息处理函数是在收到特定的消息时执行的代码块。
3.控件:控件是用于用户交互的窗口元素,例如按钮、文本框、列表框等。
4.对象模型:MFC使用面向对象的概念来管理窗口和控件。
每个窗口或控件都是一个C++对象,有自己的属性和方法。
三、MFC应用程序的创建1.创建一个MFC应用程序的步骤:a. 新建项目:在Visual Studio中创建一个MFC应用程序项目。
c.编写代码:编写消息处理函数和其他代码,实现应用程序的功能。
d.编译和运行:编译项目并运行应用程序。
四、MFC消息处理1.应用程序的消息循环:MFC应用程序的消息循环负责接收和处理用户输入和系统事件。
2.消息映射表:消息映射表是一个用于将消息与消息处理函数关联的数据结构。
3.常见的消息类型:MFC提供了大量的消息类型,包括鼠标和键盘消息、窗口消息、菜单消息等。
五、MFC控件的使用1.控件的创建和操作:使用MFC提供的类和方法来创建和操作控件。
2.控件的属性设置:通过设置控件的属性来改变它的外观和行为。
3.控件事件的处理:通过处理控件的事件来响应用户的操作。
六、MFC对话框的使用2.对话框控件的操作:对话框中的控件可以像其他控件一样进行操作。
mfc 教程

mfc 教程MFC(Microsoft Foundation Classes)是一种用于开发Windows应用程序的C++框架,由Microsoft推出。
它提供了一系列的类和函数,简化了Windows编程的复杂性,使开发人员可以更轻松地创建各种功能强大且交互性良好的应用程序。
MFC教程的目的是帮助初学者了解MFC的基本概念和使用方法,以便能够利用MFC框架开发自己的Windows应用程序。
本教程将介绍MFC的主要组成部分、常用类以及一些常见的编程技巧,帮助读者快速上手。
第一部分将介绍MFC的基本概念和架构。
我们将了解MFC是如何工作的,包括应用程序对象、文档/视图体系结构和消息映射等主要概念。
我们还将学习如何创建一个简单的MFC应用程序,并进行窗口的创建和管理。
第二部分将深入介绍MFC的常用类。
我们将重点介绍窗口类和控件类,包括CWnd、CFrameWnd、CDialog、CButton等。
我们将学习如何使用这些类创建窗口、控件,并处理用户输入事件。
我们还将讨论一些常见的绘图和动画技术,如GDI绘图和使用定时器实现动画效果。
第三部分将介绍MFC的高级特性和编程技巧。
我们将学习如何使用MFC的文档/视图体系结构创建多文档应用程序,并进行文档的管理和视图的同步更新。
我们还将介绍如何通过自定义类和重载消息处理函数来实现定制化的功能。
此外,我们还将讨论一些高级主题,如线程编程和网络编程。
最后,本教程还将介绍一些常见的MFC开发工具和资源。
我们将介绍MFC的IDE(集成开发环境)和调试工具,并提供一些常用的网站和论坛供读者进一步学习和交流。
总结起来,本教程将帮助读者掌握MFC的基本概念和编程技巧,并能够利用MFC框架开发自己的Windows应用程序。
我们将通过实例和演示代码来讲解,帮助读者理解和应用所学知识。
阅读本教程后,读者将具备一定的MFC编程基础,并能够进一步深入研究和应用MFC框架。
希望本教程能够对MFC初学者有所帮助,让他们更加轻松地学习和掌握MFC编程。
MFC基础教程

MFC基础教程MFC(Microsoft Foundation Class)是微软公司开发的一套用于Windows平台的C++库,提供了一系列的类和函数,可以帮助开发者快速构建Windows应用程序。
MFC是一种基于消息驱动的编程模型,它将用户输入、操作系统消息和应用程序功能相结合,实现了高效的界面设计和响应。
对于初学者来说,学习MFC可以帮助他们了解Windows编程的基本概念和原则,打下良好的编程基础。
下面将介绍一些适合初学者的MFC基础教程。
1.教程名称:《MFC入门教程》简介:这是一份非常适合初学者的MFC入门教程,它从最基础的概念和原理开始介绍,通过实例代码和详细的解释,帮助读者快速上手MFC编程。
这个教程包含了Windows消息处理、界面设计、控件使用和文件操作等基本内容。
2.教程名称:《MFC编程入门》简介:这个教程以实例为主,通过一系列的小项目,逐步介绍MFC编程的各个方面。
每个项目都包含了完整的源代码和详细的解释,读者可以通过跟着教程一步一步实践,掌握MFC编程的基本技巧和方法。
3.教程名称:《MFC程序设计基础》简介:这是一本经典的MFC教材,适合初学者系统地学习MFC编程。
它介绍了MFC的基本概念、类结构和消息传递机制,并通过大量的示例代码演示了MFC的各种用法和技巧。
读者可以通过阅读这本书,深入理解MFC的原理和设计思想。
4.教程名称:《MFC实战开发入门》简介:这个教程以实际项目为例,引导读者从零开始一步一步开发一个完整的MFC应用程序。
通过这个项目实战,读者可以学习到MFC的设计流程、界面布局、数据处理和文件IO等实际编程中的常用技巧。
以上是几个适合初学者的MFC基础教程,它们覆盖了MFC编程的基本概念和常用技巧,可以帮助初学者快速入门。
当然,MFC编程是一个复杂的主题,除了阅读教程,多做实际项目和练习也是提高自己的有效途径。
希望对初学者有所帮助!。
MFC教程入门知识全集

说明:本书稿为张孝祥、袁龙友两位老师在2000年依据张孝祥的vc++讲课记录整理,由于时间关系,仅仅是写成了草稿,欢迎大家使用!第1章 掌握C++1.1 类的定义与应用1.1.1 结构的定义1.1.2 类的定义1.1.2.1 类与结构1.1.2.2 类的使用 (例子代码EX01-00)1.2 函数的重载1.2.1 重载参数个数不同的函数 (例子代码EX01-01)1.2.2 重载参数数据类型不同的函数 (例子代码EX01-02)1.3 构造函数与析构函数1.3.1 构造函数1.3.2 析构函数 (图1,没有)(图2,没有)1.4 this指针的引用1.5 类的继承与protected访问修饰符1.5.1单一继承 (例子代码EX01-03) (图x,没有)1.5.2多重继承1.6 虚函数与多态性1.7类的书写规范1.8 小结第2章 Windows程序内部运行原理2.1 Windows应用程序,操作系统,计算机硬件之间的相互关系2.1.1 关于API (图1,没有)2.1.2 关于消息及消息队列 (图1、图2没有)2.2 什么是句柄2.3 谈谈WinMain函数 (例子代码EX02-00)2.3.1 WinMain函数的定义及功能2.3.2 窗口及其生成2.3.2.1 如何设计一个窗口类——步骤12.3.2.2 注册设计好的窗口类——步骤22.3.2.3 创建窗口——步骤32.3.2.4 显示创建的窗口——步骤42.3.3 消息循环2.3.4 完成回调函数2.4 程序编写操作步骤与实验2.5 小结第3章 VC集成开发环境介绍3.1 Visual C++开发环境3.1.1 工作区窗格3.1.2 输出窗格3.1.3 编辑区3.1.4菜单栏、工具栏、状态栏3.2 系统菜单功能介绍3.2.1 File菜单3.2.2 Edit菜单3.2.3 View菜单3.2.4 Insert菜单3.2.5 Project菜单3.2.6 Build菜单3.2.6 Tools菜单3.2.7 Window菜单3.2.8 Help菜单3.3 Visual C++重要工具介绍3.3.1 C/C++编译器3.3.2 资源编辑器3.3.3 资源编译器3.3.4 链接器和调试器3.3.5 AppWizard和ClassWizard3.3.6 资源浏览器3.3.7 Microsoft活动模板库、仓库3.4 小结第4章 MFC应用程序框架剖析4.1 什么是MFC以及MFC的特点 (例子代码EX04-00) 4.2 MFC应用程序框架 (例子代码EX04-01)4.3 应用程序框架说明4.4 文档-视图体系结构4.4.1 文档-视图相互作用的函数4.4.2 单文档-视图应用程序结构4.4.2 多文档-视图应用程序结构4.5 MFC消息映射机制4.5.1 消息的种类4.5.2 应用程序的Run函数4.5.3 消息映射表4.5.4 如何添加消息映射4.6 ClssWizard的使用4.6.1 ClssWizard概貌4.6.2 如何添加消息处理函数4.6.3 如何添加成员变量4.6.4 如何添加一个新类第5章 图形与文本5.1 理解图形设备接口5.2 设备描述表5.2.1 什么是设备描述表5.2.2 MFC中的设备描述表类5.2.3 获取设备描述表5.3 Windows的GDI对象5.4 GDI对象的创建5.4.1 自定义画刷(CBrush)5.4.2 自定义画笔(CPen)5.4.3 自定义字体(CFont)5.5 GDI对象的使用及示例5.5.1 画笔的使用5.5.1.1 在MFC程序中画线5.5.1.2 在Windows Application程序中画线5.5.1.3 实现橡皮筋功能5.5.2 画刷的使用5.5.2.1 带颜色的画刷的使用5.5.2.2 带位图的画刷的使用5.5.3 字体的使用5.5.3.1 一个简单的文字处理程序5.5.3.2 模拟卡拉OK程序5.5.3.3 剪切区和路径层第六章 菜单、工具栏和状态栏6.1 菜单6.1.1 菜单介绍6.1.2 创建一个菜单6.1.2.1 添加一个菜单资源6.1.2.2 利用菜单编辑器编辑菜单资源6.1.2.3 将菜单加入到应用程序中6.1.2.4 给菜单项添加COMMAND消息处理6.1.2.5 给菜单项添加UPDATE_COMMAND_UI消息处理6.1.2.6 一个简单的绘图程序6.1.3 在应用程序中控制菜单6.1.3.1 在应用程序中取得菜单6.1.3.2 在应用程序中修改菜单的状态6.1.3.3 在应用程序中添加、删除、插入菜单或菜单项6.1.3.4 一个简易的电话本程序6.1.4 创建快捷方式菜单6.2 工具栏6.2.1 工具栏介绍6.2.1.1 熟悉CToolBar类6.2.1.2 AppWizard是如何创建工具栏6.2.1.3 利用工具栏编辑器设计工具栏按钮6.2.2 新建一个工具栏6.2.3 显示/隐藏工具栏6.3 状态栏6.3.1 状态栏介绍6.3.1.1 熟悉CStatusBar类6.3.1.2 AppWizard是如何创建状态栏6.3.2 修改状态栏6.3.2.1 指示器数组6.3.2.2 修改状态栏窗格6.3.3 在状态栏上显示鼠标坐标、时钟和进度条6.3.3.1 在状态栏上显示鼠标坐标6.3.3.2 在状态栏上显示时钟6.3.3.3 在状态栏上显示进度条第七章 对话框和控件7.1 对话框及控件的介绍7.1.1 常用控件介绍7.1.2 对话框介绍7.1.2.1 对话框的组成7.1.2.2 对话框的种类7.1.2.3 使用对话框编辑器设计对话框7.1.3 创建一个对话框7.1.3.2 创建非模态对话框7.1.3.3 对话框的数据交换机制7.1.3.4 创建模态对话框7.1.4 模态对话框和非模态对话框的区别7.1.5 按钮逃跑小程序7.2 属性页和向导对话框7.2.1 创建属性页对话框7.2.1 创建向导对话框7.3 公用对话框7.3.1 增加设置对话框来完善绘图程序7.3.2 颜色对话框的使用7.3.3 字体对话框的使用7.3.4 控制控件颜色做漂亮界面第8章 文档序列化8.1 序列化8.1.1 CArchive类和Serialize函数8.1.2 使自己的类支持序列化8.1.3 实例:保存和显示图形8.2 CFile类8.2.1 CFile类的构造函数8.2.2 打开文件8.2.3 读写数据8.2.4 关闭文件8.3 文件I/O处理8.3.1 利用MFC类来实现8.3.2 利用C函数来实现8.3.3 利用C++函数来实现8.3.4 利用API函数来实现8.3.5 创建保存、打开对话框8.4 注册表操作8.4.1 什么是注册表8.4.2 注册表结构8.4.3 修改注册表第9章 修改框架程序的显示效果9.1修改Windows应用程序外观样式9.1.1 在框架类中修改程序外观9.1.2 在视图类中修改程序外观9.2 制作动画图标9.3 将图片作为窗口显示的背景第10章 网络编程10.1 计算机网络的基本概念10.1.1 计算机网络的分类10.1.2 网络拓扑结构10.2 网络体系结构和网络协议10.2.1 ISO/OSI参考模型10.2.2 TCP/IP参考模型10.2.3 TCP/IP协议10.2.3.1 协议概述10.2.3.2 TCP/IP协议层次结构及各种协议介绍10.2.3.3 IP地址10.2.3.4 端口号10.2.4 专业术语解释10.3 Socket套接字10.3.1 Socket介绍10.3.2 关于协议族和地址族10.3.3 使用Socket10.3.3.1 创建Socket10.3.3.2 指定本地地址及端口号10.3.3.3 建立连接10.3.3.4 监听连接10.3.3.5 发送数据10.3.3.6 接收数据10.3.3.7 关闭套接字10.3.4 套接字一般调用过程10.4 WinSock编程机制10.4.1 认识Windows Socket10.4.2 Windows Sockets库函数介绍10.4.2.1 Berkeley socket函数10.4.2.2 数据库函数10.4.2.3 Windows专有扩展函数10.5 WinSock编程实例10.5.1 实例一:面向连接服务的socket调用10.5.2 实例二:面向非连接服务的socket调用10.5.3 实例三:基于字符界面的聊天程序第11章 线程间的同步11.1 进程和线程的概念11.2 Win32的线程11.2.1 线程的创建11.2.2 线程的终止11.2.3 实例:通过创建多线程来编写网络聊天程序 11.3 MFC的线程处理11.3.1 创建工作者线程11.3.2 创建用户界面线程11.4 线程同步11.4.1 为什么要同步11.4.2 等待函数11.4.3 同步对象11.4.3.1 关键代码段11.4.3.2 互斥对象11.4.3.3 信标对象11.4.3.4 事件对象11.4.4 如何选择同步对象第12章 进程间的通讯12.1 进程控制12.1.1 进程的创建12.1.2 进程的终止12.2 进程间通讯12.2.1 剪贴板通讯方式12.2.2 邮槽通讯方式12.2.3 管道通讯方式12.2.3.1 命名管道通讯12.2.3.2 匿名管道通讯第14章 ActiveX技术14.1 ActiveX简介14.2 ActiveX控件和普通Windows控件14.2.1 ActiveX控件和普通Windows控件的相同点14.2.2 ActiveX控件和普通Windows控件的相同点 14.3 ActiveX控件的属性、方法和事件14.3.1 ActiveX控件的属性14.3.2 ActiveX控件的方法14.3.3 ActiveX控件的事件14.4 创建ActiveX控件。
C++_MFC基础教程(初学者)_

1.2 Visual C++6.0界面介绍
• 安装好Visual C++开发环境后,桌面上并没有其快捷图标,需读者自 己修改。选择“开始”菜单,从所有程序中,找到Microsoft Visual Studio 6.0级联菜单下的Microsoft Visual C++菜单项。选择该菜单项, 并将其拖动到桌面上,则在桌面上创建了Microsoft Visual Studio的快 捷图标。 • 双击快捷图标,即可启动Visual C++6.0集成开发环境。每次运行 Visual C++6.0时,会弹出一个【Tip of the day】对话框,如下图所 示。
1.2.1 工作区窗口和输出窗口
• Resource View:显示当前工作区中所有的资源。这些资源包括快捷 键、对话框、图标、菜单、字符条编辑器、工具栏和版本信息。双击 其中的ID号,会显示相应的资源信息。 • File View:显示属于当前工程的所有文件,包括C/C++源文件、头文 件、资源文件等。 • 输出窗口与工作区一样,分为多个选择卡。其中最常用的选项卡被放 在了最外面,分别为Build、Debug、Find in Files 1和Find in Files 2。
2.入口函数
• 当一个应用程序启动时,会自动调用应用程序框架内部的 AfxWinMain函数。根据其前缀Afx就知道WinMain是一个全局的MFC 函数。从上述代码中可以看出,WinMain函数会查找该应用程序的一 个全局构造对象。该对象是由CWinApp的派生类创建,因此有程序启 动时,它就被创建好了。然后WinMain对该应用程序进行初始化,在 此过程调用的是该程序全局构造对象的InitApplication()和 InitInstance()函数。完成初始化后,WinMain调用Run()函数,运行应 用程序的消息循环。最后结束应用程序时,WinMain调用 AfxWinTerm()函数,做一些清理工作。
mfc使用教程

mfc使用教程MFC使用教程不要标题MFC是Microsoft Foundation Class的缩写,是一套C++的库,用于开发Windows平台的应用程序。
以下是一个简单的MFC使用教程,帮助你了解如何创建一个基本的MFC应用程序。
首先,打开Visual Studio并选择创建新项目。
在项目模板中,选择"MFC应用程序"。
在下一步中,选择"对话框"作为应用程序类型。
接下来,选择项目的名称和位置,然后点击"完成"按钮。
Visual Studio将自动生成一个MFC应用程序的基本框架。
应用程序的主要代码位于"MainFrm.cpp"和"MainFrm.h"文件中。
打开"MainFrm.cpp"文件,你将看到一个名为"Create"的函数。
在这个函数中,可以创建应用程序的主窗口。
在"Create"函数的内部,使用"MFC应用程序向导"提供的函数来创建一个对话框。
例如,可以使用"CDialogEx"类来创建一个简单的对话框。
在"Create"函数的最后,需要调用"ShowWindow"函数显示主窗口,并调用"UpdateWindow"函数来更新窗口。
在"MainFrm.h"文件中,你可以定义应用程序的主窗口类。
例如,可以继承自"CFrameWnd"类,并添加自定义的成员变量和函数。
在"MainFrm.cpp"文件的"Create"函数中,还可以添加一些自定义的代码,例如设置窗口的标题和大小,添加菜单和工具栏等。
最后,编译并运行应用程序。
你应该能够看到一个简单的MFC应用程序的窗口。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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中所提供的各种视类介绍+-- 第四章窗口控件|------ 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 使用通用对话框|------ 5.8 建立以对话框为基础的应用|------ 5.9 使用对话框作为子窗口+-- 第六章网络通信开发|------ 6.1 WinSock介绍|------ 6.2 利用WinSock进行无连接的通信+------ 6.3 利用WinSock建立有连接的通信1.1 如何学好VC这个问题很多朋友都问过我,当然流汗是必须的,但同时如果按照某种思路进行有计划的学习就会起到更好的效果。
万事开头难,为了帮助朋友们更快的掌握VC开发,下面我将自己的一点体会讲一下:1、需要有好的C/C++基础。
正所谓“磨刀不误砍柴工”,最开始接触VC时不要急于开始Windows程序开发,而是应该进行一些字符界面程序的编写。
这样做的目的主要是增加对语言的熟悉程度,同时也训练自己的思维和熟悉一些在编程中常犯的错误。
更重要的是理解并能运用C++的各种特性,这些在以后的开发中都会有很大的帮助,特别是利用MFC进行开发的朋友对C++一定要能熟练运用。
2、理解Windows的消息机制,窗口句柄和其他GUI句柄的含义和用途。
了解和MFC各个类功能相近的API函数。
3、一定要理解MFC中消息映射的作用。
4、训练自己在编写代码时不使用参考书而是使用Help Online。
5、记住一些常用的消息名称和参数的意义。
6、学会看别人的代码。
7、多看书,少买书,买书前一定要慎重。
8、闲下来的时候就看参考书。
后面几条是我个人的一点意见,你可以根据需要和自身的情况选用适用于自己的方法。
此外我将一些我在选择参考书时的原则:对于初学者:应该选择一些内容比较全面的书籍,并且书籍中的内容应该以合理的方式安排,在使用该书时可以达到循序渐进的效果,书中的代码要有详细的讲解。
尽量买翻译的书,因为这些书一般都比较易懂,而且语言比较轻松。
买书前一定要慎重如果买到不好用的书可能会对自己的学习积极性产生打击。
对于已经掌握了VC的朋友:这种程度的开发者应该加深自己对系统原理,技术要点的认识。
需要选择一些对原理讲解的比较透彻的书籍,这样一来才会对新技术有更多的了解,最好书中对技术的应用有一定的阐述。
尽量选择示范代码必较精简的书,可以节约银子。
此外最好涉猎一些辅助性的书籍。
返回首页1.2 理解Windows消息机制Windows系统是一个消息驱动的OS,什么是消息呢?我很难说得清楚,也很难下一个定义(谁在嘘我),我下面从不同的几个方面讲解一下,希望大家看了后有一点了解。
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){switch(uMessageType){//使用SWITCH语句将各种消息分开case(WM_PAINT):doYourWindow(...);//在窗口需要重新绘制时进行输出break;case(WM_LBUTTONDOWN):doYourWork(...);//在鼠标左键被按下时进行处理break;default:callDefaultWndProc(...);//对于其它情况就让系统自己处理break;}}接下来谈谈什么是消息机制:系统将会维护一个或多个消息队列,所有产生的消息都回被放入或是插入队列中。
系统会在队列中取出每一条消息,根据消息的接收句柄而将该消息发送给拥有该窗口的程序的消息循环。
每一个运行的程序都有自己的消息循环,在循环中得到属于自己的消息并根据接收窗口的句柄调用相应的窗口过程。
而在没有消息时消息循环就将控制权交给系统所以Windows可以同时进行多个任务。
下面的伪代码演示了消息循环的用法:while(1){id=getMessage(...);if(id == quit)break;translateMessage(...);}当该程序没有消息通知时getMessage就不会返回,也就不会占用系统的CPU时间。
下图为消息投递模式在16位的系统中系统中只有一个消息队列,所以系统必须等待当前任务处理消息后才可以发送下一消息到相应程序,如果一个程序陷如死循环或是耗时操作时系统就会得不到控制权。
这种多任务系统也就称为协同式的多任务系统。
Windows3.X就是这种系统。
而32位的系统中每一运行的程序都会有一个消息队列,所以系统可以在多个消息队列中转换而不必等待当前程序完成消息处理就可以得到控制权。
这种多任务系统就称为抢先式的多任务系统。
Windows95/NT就是这种系统。
返回首页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_MAPON_COMMAND(ID_FONT_DROPDOWN, DoNothing)END_MESSAGE_MAP()经过编译后,代码被替换为如下形式(这只是作讲解,实际情况比这复杂得多)://BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)CMainFrame::newWndProc(...){switch(...){//{{AFX_MSG_MAP(CMainFrame)// ON_WM_CREATE()case(WM_CREATE):OnCreate(...);break;//}}AFX_MSG_MAP// ON_COMMAND(ID_FONT_DROPDOWN, DoNothing)case(WM_COMMAND):if(HIWORD(wP)==ID_FONT_DROPDOWN){DoNothing(...);}break;//END_MESSAGE_MAP()}}newWndProc就是窗口过程只要是该类的实例生成的窗口都使用该窗口过程。