深入浅出MFC_深入浅出林政著

深入浅出MFC_深入浅出林政著最近一两年都在搞Java,C++逐渐生疏了

最近一两年都在搞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_深入浅出林政著分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/75491.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注