深入浅出MFC

最近一两年都在搞Java,C++逐渐生疏了。现在换工作又重新搞起了C++。其实学了多种语言后,就会发现语言真的没那么重要。基础的东西,如算法、数据结构、文件操作、进程、线程、同步机制,都是超出语言而存在的。即便具体到实现代码,也是相差无几。

最近忧心忡忡,工作多年,接触太多技术,可都没有深入和系统。一定要横刀立马,誓要作出成绩。

MFC早已是弃子,但《深入浅出MFC》仍旧是如此经典,以至于超出MFC的范畴。当然,我会主要关注思想框架原理,而忽略MFC细节。C/C++的家族中,客户端QT大行其道,中间件基本以跨平台为主,且不会使用到MFC的API。至于服务端,则倾向于Linux。

Win32 基本程序观念

windows SDK程序开发流程

Windows SDK程序开发流程

消息循环(事件驱动)

以消息为基础,以事件驱动之(message based, event driven)

Windows程序本体与操作系统之间关系

上家公司做网络SDK,底层实现是I/O多路复用,有大量的异步操作,如等待报警事件,所以对事件驱动的思想再熟悉不过了。从上图可知,win32程序实现也是很简单的,DispatchMessage 透过Windows USER 模块的协助与监督,把消息分派至窗口函数。消息将在窗口函数中被判别并处理。

进程与执行线程

CreateProcess创建进程,CreateThread创建线程,线程还有另一个版本_beginthreadex(纯C版本)。

我之前做的跨平台SDK就是用的纯C版,至于创建进程的我特地找了nginx的代码(去掉异常逻辑):

	CreateProcess(ctx->path, ctx->args,
                      NULL, NULL, 0, CREATE_NO_WINDOW, NULL, NULL, 
                      &si, &pi);

    ctx->child = pi.hProcess;

    CloseHandle(pi.hThread);

    return pi.dwProcessId;

C++的重要性质

这一章的内容都比较浅,C++基本语法。我发现教材书上都很少会讲到虚函数的实现原理,这里最起码讲到了。但模板讲的太基础了,在本章更像是重载多态的衍生品。

MFC 六大关键技术之仿真

MFC类别阶层

MFC类别阶层

MFC 程序的初始化过程

全局对象。

虽然以工作内容举例不太合适,但的确也是用到了全局对象,只不过对应的类主要是用作资源管理。这个Effective C++有类似的例子。

RTTI (执行时期型别辨识)

通过宏定义,建立类与类之间的关联。这个功能对于其他语言来讲,早就在语言实现内了,我估计新的C++标准也已经实现了。

#define DECLARE_DYNAMIC(class_name) \ 
public: \
static CRuntimeClass class##class_name; \ 
virtual CRuntimeClass* GetRuntimeClass() const;

Dynamic Creation (动态生成)

是RTTI的延续,RTTI建立关系,动态生成看重运行时创建对象,或者说给个对象名,就能创建对象。这点有些像java的反射机制。

#define DECLARE_DYNCREATE(class_name) \ 
DECLARE_DYNAMIC(class_name) \
static CObject* PASCAL CreateObject();

Persistence(永续生存)机制

没有看懂到底实现了个什么东西,或者说有什么用。序列化和反序列化?

#define DECLARE_SERIAL(class_name) \
DECLARE_DYNCREATE(class_name) \
friend CArchive& AFXAPI operator>>(CArchive& ar, class_name* &pOb);

Message Mapping(消息映射)

看到这里确实乏味了些,又是宏定义和宏实现,但这里仍旧没给出贯通的细节。其实应该很简单,建立消息和消息回调关系,收到消息找回调。

#define DECLARE_MESSAGE_MAP() \
static AFX_MSGMAP_ENTRY _messageEntries[]; \ 
static AFX_MSGMAP messageMap; \
virtual AFX_MSGMAP* GetMessageMap() const;

Command Routing(命令绕行)

靠继承和多态实现的,但个人感觉太乱,跳来跳去。

MFC 程序的生死因果

MFC和Win32程序

MFC实现

就看到这里吧!

深入浅出MFC是一本介绍 MFC(Microsoft Foundation Classes)程式设计技术的书籍。对於 Windows 应用软体的开发感到兴趣,并欲使用 Visual C++ 整合环境的视觉开发工具,以 MFC 为程式基础的人,都可以从此书获得最根本最重要的知识与实例。 如果你是一位对 Application Framework 和物件导向(Object Oriented)观念感兴趣的技术狂热份子,想知道神秘的 Runtime Type Information、Dynamic Creation、Persistence、Message Mapping 以及 Command Routing 如何实作,本书能够充分满足你。事实上,依我之见,这些核心技术与彻底学会操控 MFC 乃同一件事情。 全书分为四篇: 第一篇【勿在浮砂筑高台】提供进入MFC核心技术以及应用技术之前的所有技术基础,包括: Win32程式观念:message based, event driven, multitasking, multithreading, console programming。 C++ 重要技术:类别与物件、this 指标与继承、静态成员、虚拟函式与多型、模板(template)类别、异常处理(exception handling)。 MFC 六大技术之简化模拟(Console 程式) 第二篇【欲善工事先利其器】提供给对 Visual C++ 整合环境全然陌生的朋友一个导引。这一篇当然不能取代 Visual C++ User's Guide 的地位,但对整个软体开发环境有全盘以及概观性的介绍,可以让初学者迅速了解手上掌握的工具,以及它们的主要功能。 第三篇【浅出 MFC 程式设计】介绍一个 MFC 程式的生死因果。已经有 MFC 程式经验的朋友,不见得不会对本篇感到惊艳。根据我的了解,太多人使用 MFC 是「只知道这麽做,不知道为什麽」;本篇详细解释 MFC 程式之来龙去脉,为初入 MFC 领域的读者奠定扎实的基础。说不定本篇会让你有醍醐灌顶之感。 第四篇【深入 MFC 程式设计】介绍各式各样 MFC 技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值