系统理解Win32 API和MFC(下)

二、MFC的概念模型

前面我们研究了WIN32 API的“领域模型”,对它有较全面的认识。下面,对MFC概念模型的研究,我们把重点放在对app framework的研究上。

app framework中的message响应/传递机制是最重要的。而Hook机制和Message响应/传递机制是密切相关的,后者以前者为基础。

1. Hook机制

也许有些程序员只知道hook机制可以编写很“牛”的应用,孰不知MFC本身也是依靠hook机制的。


从图中看到,每个hook拥有一个指针队列,每个指针指向一个称为的HookProc函数,HookProc将在合适的时机被OS调用执行。hook是分不同种类的,其实正是hook的种类决定了它什么时机被OS调用执行。提示,可以看一下“订阅-发布”设计模式以助理解。

时间: 2025-01-31 08:14:35

系统理解Win32 API和MFC(下)的相关文章

系统理解Win32 API和MFC(上)

Win32 API是微软的操作系统Windows提供给开发人员的编程接口,它决定了我们开发的Windows应用程序的能力.MFC是微软为开发人员提供的类库,在某种意义上是对Win32 API的封装.本文试图从全局角度对Win32 API和MFC进行理解──给出二者的概念模型. 本文使用UML描述概念模型.Win32 API本不是面向对象的,我用面向对象的观点去理解它,无非是想表达其全局. 本文参考了MSDN.相关书籍和网上的一些资料,在此一并感谢. 一.Win32 API的概念模型 Win32

介绍一个Win32 API串口控制MFC打包类

支持环境:Windows 9x.Windows ME.Windows NT.Windows2000 简介:这是一个Win32 API的打包类,对处理串口的Win32 API类进行了封装,借助这个类可以很方便地对串口进行操作. 特性: C++接口简洁易用 使用C++异常时,首选 Win32 常规的返回值机制.保证使用CSerialPort的代码更加健壮. 支持UNICODE,支持MFC静态链接并且所有代码都在 warning level 4 级别上进行洁净编译. 支持串口模块使用重叠.阻塞和回调(

winform-在C# Winform项目 利用WIN32 API 无法再次调用第三方的应用系统

问题描述 在C# Winform项目 利用WIN32 API 无法再次调用第三方的应用系统 在C# Winform项目,from窗体中有一个Panel控件和一个Button控件. 目前已经能够利用WIN32 API 找到"监控系统"窗口的句柄,并将那个获取到的窗口"附加"到了Panel控件上. 并能够正常在Panel控件中显示"监控系统". 请问下,怎么样实现form窗体关闭后,再次再点击Button控件能够再次获取到"监控系统&quo

.NET Compact Framework下Win32 API P/Invoke的使用

由于CF是一个精简(Compact)的.NET Framework,因此在开发CF应用时有一部分功能MS并没有在CF中实现,需要直接调用Win32的API来实现.由于Win32的API是面向native代码的,一般会提供一个DLL库以及相应header文件.使用C++是十分容易和简单调用这些API,但是使用C# .NET就没那么幸运了.C#调用Win32的API往往要借助于P/Invoke的帮助,下面讲述一下P/Invoke 的使用. API的引入 调用Win32的API需要引入相应的DLL,W

c++-关于win32 api中宏定义有一处不理解

问题描述 关于win32 api中宏定义有一处不理解 #define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0) 这段代码我知道:宏定义,用KEYDOWN(vk_code)替代((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0) 但是不可思议的来了,它直接这样写: KEYDOWN(VK_UP) 我可以理解这是什么意思,就是说((GetAsyncKeyState(VK_

qt下调用win32 api 对串口编程,怎么弄?主要是怎么调用api

问题描述 qt下调用win32 api 对串口编程,怎么弄?主要是怎么调用api 解决方案 解决方案二: 我用MessageBox测试,出了问题.添加了lib文件,把dll文件放在工程文件夹下了,也还是不行 解决方案三: 我用MessageBox测试,出了问题.添加了lib文件,把dll文件放在工程文件夹下了,也还是不行 解决方案四: user32.lib和kernel32.lib是Windows的标准库,可以直接链接,是不是..libs目录下的库文件与你开发机的Windows版本不一致?去掉"

dotNET C# Programmer’s Guide to the Win32 API (Win

dotNET C# Programmer's Guide to the Win32 API (Win32 API 声明C#版) 小气的神 2001.09.07 噢,对不起我用了这个标题,事实上如果我能做到10%,我就很高兴了.因为我的桌上正放着一本Dan Appleman的书,它曾伴随我许多年,也许你也有一本:1215页,蓝色书皮,机械工业出版社.英文名叫:< Dan Appleman's Visual Basic 5.0 Programmer's Guide to the Win32 API

如何在C#中使用Win32 API和其他库

C# 用户经常提出两个问题:"我为什么要另外编写代码来使用内置于 Windows 中的功能?在框架中为什么没有相应的内容可以为我完成这一任务?"当框架小组构建他们的 .NET 部分时,他们评估了为使 .NET 程序员可以使用 Win32 而需要完成的工作,结果发现 Win32 API 集非常庞大.他们没有足够的资源为所有 Win32 API 编写托管接口.加以测试并编写文档,因此只能优先处理最重要的部分.许多常用操作都有托管接口,但是还有许多完整的 Win32 部分没有托管接口. 平台

用Win32 API实现串行通信

串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛.我们可以利用Windows API 提供的通信函数编写出高可移植性的串行通信程序. 在Win16中,可以利用OpenComm.CloseComm和WriteComm等函数打开.关闭和读写串口.但在Win32中,串口和其他通信设备均被作为文件处理,串口的打开.关闭和读写等操作所用的API函数与操作文件的函数相同.可通过CreateFile函数打开串口,通过CloseFile函数关闭串口,通过CommProp.D