没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
1
2010-12-15 bamboo
MFC
入门教程
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
2
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建立有连接的通信
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
第一章 VC 入门
1.1 如何学好VC
这个问题很多朋友都问过我,当然流汗是必须的,但同时如果按照某种思路进行有计划的学
习就会起到更好的效果。万事开头难,为了帮助朋友们更快的掌握 VC 开发,下面我将自己
的一点体会讲一下:
1、需要有好的 C/C++基础。正所谓“磨刀不误砍柴工”,最开始接触 VC 时不要急于开始
Windows 程序开发,而是应该进行一些字符界面程序的编写。这样做的目的主要是增加对
语言的熟悉程度,同时也训练自己的思维和熟悉一些在编程中常犯的错误。更重要的是理解
并能运用 C++的各种特性,这些在以后的开发中都会有很大的帮助,特别是利用 MFC 进行
开发的朋友对 C++一定要能熟练运用。
2、理解 Windows 的消息机制,窗口句柄和其他 GUI 句柄的含义和用途。了解和 MFC 各个
类功能相近的 API 函数。
3、一定要理解 MFC 中消息映射的作用。
4、训练自己在编写代码时不使用参考书而是使用 Help Online。
5、记住一些常用的消息名称和参数的意义。
3
6、学会看别人的代码。
7、多看书,少买书,买书前一定要慎重。
8、闲下来的时候就看参考书。
9、多来我的主页。^O^
后面几条是我个人的一点意见,你可以根据需要和自身的情况选用适用于自己的方法。
此外我将一些我在选择参考书时的原则:
对于初学者:应该选择一些内容比较全面的书籍,并且书籍中的内容应该以合理的方式
安排,在使用该书时可以达到循序渐进的效果,书中的代码要有详细的讲解。尽量买翻译的
书,因为这些书一般都比较易懂,而且语言比较轻松。买书前一定要慎重如果买到不好用的
书可能会对自己的学习积极性产生打击。
对于已经掌握了 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、窗口句柄:说到消息就不能不说窗口句柄,系统通过窗口句柄来在整个系统中唯一标识
一个窗口,发送一个消息时必须指定一个窗口句柄表明该消息由那个窗口接收。而每个窗口
都会有自己的窗口过程,所以用户的输入就会被正确的处理。例如有两个窗口共用一个窗口
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 位的系统中每一运行的程序都会有一个消息队列,所以系统可以在多个消息队列中转
5
换而不必等待当前程序完成消息处理就可以得到控制权。这种多任务系统就称为抢先式的多
任务系统。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_MAP
ON_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;
剩余74页未读,继续阅读
资源评论
u010410969
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Vue SimpleMDE - 将 simplemde 与 vue.js 结合使用.zip
- Vue Material Kit - 开源 Material Design UI 套件.zip
- C#MVC+EF6销售管理系统源码数据库 MySQL源码类型 WebForm
- Unity插件的创建和使用.pdf
- ESP32S,旋转编码器
- Vue Mastery 的真实世界 Vue 3 课程的示例应用程序.zip
- Vue Light Bootstrap 仪表板 - 免费 BOOTSTRAP 4 VUEJS 管理模板.zip
- PyQt5之带图标QCheckBox实现
- C#ASP.NET拍客相片展示平台源码数据库 SQL2008源码类型 WebForm
- 短期气候Python绘图-中国夏季降水分布以及环流异常分析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功