《Windows 程序设计(第3版)》——6.6 使用Microsoft基础类库-阿里云开发者社区

开发者社区> 异步社区> 正文

《Windows 程序设计(第3版)》——6.6 使用Microsoft基础类库

简介: MFC使用C++类对Windows API进行封装,较大程度地屏蔽了Windows编程的复杂性,使Windows应用程序的设计变得简单。这是大多数软件开发者使用的一个类库。
+关注继续查看

本节书摘来自异步社区《Windows 程序设计(第3版)》一书中的第6章,第6.6节,作者:王艳平 , 张铮著,更多章节内容可以访问云栖社区“异步社区”公众号查看

6.6 使用Microsoft基础类库

到现在,相信你不仅知道框架程序的使用方法,还非常清楚它的内部实现。下面将直接介绍如何在微软的基础类库MFC中创建窗口应用程序。

MFC使用C++类对Windows API进行封装,较大程度地屏蔽了Windows编程的复杂性,使Windows应用程序的设计变得简单。这是大多数软件开发者使用的一个类库。

本书以前使用框架程序编写的程序都可以在MFC下编译通过。以上一节的06Meminfo程序为例,看看如何在MFC下编译这些程序。具体步骤如下。

(1)包含头文件。打开06Meminfo工程,将Meminfo.h文件中包含头文件的代码改为:

#include "afxwin.h"    // 原先此处的代码为“#include "../common/_afxwin.h"”
也就是把包含我们类库的文件的代码全改为包含MFC中文件的代码。文件名称也是对应的,只要将前缀“_”去掉即可。

(2)清除工程中原类库文件。将从COMMON文件夹下添加到工程中的文件全部删除(从VC工程中删除)。这时工程中只有Meminfo.h和Meminfo.cpp两个文件。现在通过菜单命令“Build/Rebuild All”全部重新编译连接程序。

(3)修改工程设置。如果出现连接错误的话,还要对工程进行的设置。单击菜单命令“Project/Settings...”,打开设置工程属性的对话框,切换到General选项卡,在Microsoft Foundation Classes窗口下选中Use MFC in a Static Library选项,如图6.6所示。单击OK按钮即可。

screenshot

第3步指定了如何链接到MFC。Microsoft Foundation Classes窗口下共有3个选项。

Not Using MFC 不使用MFC。
Use MFC in a Static Library 静态链接到MFC。这样最终生成的程序不依赖MFC运行。 期库也能够运行。一般在发布程序时,要设置这个选项。
Use MFC in a Shared DLL 动态链接到MFC。这样最终生产的程序要依赖MFC运行 期库才能够运行。
在工程中使用MFC是非常简单的,只要按照第3步的方法修改工程设置,然后包含上定义要使用的类的文件即可。以前所设计的类的命名方式和MFC的命名方式是相同的,它们所提供的接口也完全相同。所以,本书所有使用框架程序的例子都可以在MFC下编译通过。

MFC把大多数API函数都封装成了类,以方便用户的使用。比如,它把操作设备环境的函数都封装到了CDC类中,此类一个公开成员变量m_hDC,保存了与CDC对象关联的设备环境的句柄。为了方便响应WM_PAINT消息,操作窗口客户区,操作整个窗口,MFC又从CDC类派生了CPaintDC、CClientDC 和CWindowDC类。下面是CPaintDC类的简化版本。

class CPaintDC : public CDC
{
public:
  CPaintDC(CWnd* pWnd);
  ~CPaintDC();
protected:
  HWND m_hWnd;
  PAINTSTRUCT m_ps;
};
CPaintDC::CPaintDC(CWnd* pWnd)
{
  m_hWnd = pWnd->GetSafeHwnd();
  Attach(::BeginPaint(m_hWnd, &m_ps));     // Attach函数将设置返回句柄与CPaintDC对象的关联
}
CPaintDC::~CPaintDC()
{
  ::EndPaint(m_hWnd, &m_ps);
}

程序在实例化CPaintDC对象时调用了BeginPaint函数,当在销毁这个对象时又调用了EndPaint函数。它以后就可以这样响应WM_PAINT消息了。

void CMainWindow::OnPaint()
{
  CPaintDC dc(this);
  //...    // 其他代码
}

另外两个类的实现过程与CPaintDC类相似,CClientDC的构造函数取得窗口客户区的设备环境句柄,CWindowDC类取得整个窗口的设备环境句柄。

对MFC的讨论绝不仅仅是这些,但核心的功能已经完全模拟实现了,剩下的都是一些固定的使用格式。本书附录1列出了整个MFC 6.0的层次结构。下一小节将使用MFC创建一个窗口信息查看程序,以使读者更深切地感受MFC的工作方式。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Windows Internet编程基础--WinInet
假如对 dwContext 参数使用了默认值,将不能区分指示 FTP 连接进度的 OnStatusCallback 调用和指示 HTTP 连接进度的调用。如果指定以后可在 OnStatusCallback 中测试的 dwContext ID,您将知道是哪个操作生成的回调
1048 0
Apache Flink 零基础入门(五):流处理核心组件 Time&Window 深度解析
为什么要有 Window; Window 中的三个核心组件:WindowAssigner、Trigger 和 Evictor;Window 中怎么处理乱序数据,乱序数据是否允许延迟,以及怎么处理迟到的数据;最后我们梳理了整个 Window 的数据流程,以及 Window 中怎么保证 Exactly .
858 0
Apache Flink 零基础入门(五):流处理核心组件 Time&Window 深度解析
为什么要有 Window; Window 中的三个核心组件:WindowAssigner、Trigger 和 Evictor;Window 中怎么处理乱序数据,乱序数据是否允许延迟,以及怎么处理迟到的数据;最后我们梳理了整个 Window 的数据流程,以及 Window 中怎么保证 Exactly
3309 0
Windows Phone 8初学者开发—第5部分:布局和事件基础
原文 Windows Phone 8初学者开发—第5部分:布局和事件基础 原文地址: http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Beginners/Part-5-Basics-of-Layout-and-Events 系列地址:http://channel9.
702 0
+关注
异步社区
异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
12049
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载