- 博客(13)
- 资源 (11)
- 收藏
- 关注
原创 MFC消息流动的内部实现
消息的一生神秘而漫长,期间曲折多为人所不知。今天就让我们一起“撩”一下这位高冷的神秘妹纸吧。事实上,MFC中利用hook技术,把看似无关的操作关联了起来。所谓hook(钩子)是Windows中一种高级的编程技术,它可以保证,在特定情况发生的时候就转去执行我们所指定的操作(是一种霸道机关术)。MFC的hook发生在CWnd派生类对象的产生之际。在WINCORE.CPP中我们可以看到如下的代码
2016-07-31 22:18:53 2301
原创 MFC消息映射机制实现
Windows程序的本质是依靠消息来维持运行的。每一个消息都有一个代码,并以WM_开头的常量表示。MFC把消息分为三大类:1.命令消息(WM_COMMAND):命令消息意味着“使用者命令程序做某些操作”。凡由UI对象产生的消息都是这种命令消息,可能来自菜单或加速键或工具栏按钮,并且都以WM_COMMAND呈现。什么样的类有资格接受命令消息?凡派生自CCmdTarget的类皆有资格。从c
2016-07-23 16:49:10 1363
原创 MFC类别型录网之对象动态创建
要实现动态生成的功能,其实利用前面建立的“类别型录”网也已经很接近了。再看一下我们依旧要用的数据结构CRuntimeClass的定义:struct CRuntimeClass{// Attributes LPCSTR m_lpszClassName; int m_nObjectSize; UINT m_wSchema; // schema number of the loaded c
2016-07-22 16:44:14 1118
原创 MFC类别型录网之执行期类型识别
我们知道MFC具有运行时类型识别(RTTI)的功能,那它究竟是怎么实现的呢?在MFC的内部,它通过一个叫CRuntimeClass的数据结构以及几个特殊的宏操作来构建一个“类别型录”网,通过在运行时查询该网上的信息来判断某个对象的所属类型。CRuntimeClass该类定义于AFX.H中,内容如下:struct CRuntimeClass{// Attributes LPCS
2016-07-22 14:26:10 1033
原创 MFC中的Document-View结构
MFC之所以为Application Framework,最重要的一个特征就是它能够将管理数据的程序代码和负责显示数据的程序代码分离开来,而这种能力有Document/View提供。想要实现数据管理和显示的分离,需要搞清楚一些几个问题:1. 程序的哪个部分持有数据2. 程序的哪个部分负责更新数据3. 如何以多种方式显示数据4. 如何让数据的更改有一致性5. 如何实
2016-07-21 12:08:36 4540
原创 调皮的MFC(2)
上回书说到,WinMain和窗口处理函数分别被相应的类操作和宏操作所取代。这次我们就来看一下,取代之后的MFC程序是如何运行的吧。先把类继承图贴出来,随时可以回顾一下。主cpp文件中的第一个操作语句:// The one and only CMyWinApp objectCMyWinApp theApp;1.生成一个对象自然是要调用构造函数的,但是不仅要调用自身的构
2016-07-20 15:23:19 2235 1
原创 调皮的MFC(1)
新建一个MFC工程,集成环境会先帮我们生成一个框架。框架中用到的最重要的基础类层次结构如下所示:其中在虚矩形框中的类是我们自己继承的类,实矩形框中的类是MFC中自带的类(取自深入浅出MFC)。下面对MFC中自带的类做一些大致的说明:CObject类MFC的CObject类为程序员提供了对象诊断、运行时类型标识、序列化和动态生成等功能。(1)对象诊断:利用成员函数
2016-07-19 20:22:20 1361
原创 win32程序概况
学习MFC之前朋友建议我先学Windows编程,的确还是有道理的,毕竟MFC把自己“裹得太严实”,如果有win32的编程经验势必可以更好地掌握MFC。所以喽,文中和大家一起分享我学习win32部分后的总结。Windows程序和操作系统之间的爱恨纠葛请看下图:1中表示的是系统消息队列。当操作系统启动并初始化时,线程Raw Input Thread(RIT)就会启动,并创系统硬件输
2016-07-16 22:00:05 1696
原创 Windows多线程初探
线程是进程中的一个执行单位(每个进程至少有一个主线程),一个进程可以有多个线程,而一个线程只存在于一个进程中。在数据关系上属于一对多的关系。线程不占有系统资源,它所使用的资源全部由所属进程向系统申请。在多处理器中,不同的线程可以同时运行在不同的CPU上,这样可以提高程序的运行效率。除此之外,有些时候必须使用多线程。例如,杀毒软件在查杀病毒的时候,它需要一边扫描相关的磁盘文件,一边显示当前的扫描
2016-07-15 15:05:01 1587
原创 Windows进程控制
在Windows系统中,应用程序都以进程的形式存在于内存中。当运行一个程序的时候,操作系统就会将这个程序装入内存,并分配各种运行程序所需的资源,为进程创建主线程。系统也提供了任务管理器,可供我们使用。管理进程的界面如下:其中包含的内容一目了然,就没有必要讲解了。直接进入常用API。1. 进程的创建UINT WinExec( LPCSTR lpCmdLine,//指向
2016-07-14 19:30:39 4932 1
原创 Windows服务编程
先说明,本文不是编写服务,而是编程控制已有的服务。服务是一种程序类型,它在后台运行,服务程序通常可以在本地和通过网络为用户提供一些功能。服务程序可能是EXE程序,具有其单独的进程,也有可能是DLL文件依附于某个进程,更有可能是SYS文件而处于系统的内核之中。在Windows下,可以在“我的电脑”上单击鼠标右键,然后再弹出的菜单上选择“管理”,打开“计算机管理工具”,单击左面树形列表的“
2016-07-12 16:36:19 2820
原创 Windows注册表操作
注册表是Windows操作系统中一个重要的数据库,其中保存着操作系统和各种软件的重要信息。注册表是如此的重要,所以也是病毒和反病毒软件的兵家必争之地。注册表是Windows系统管理和维护的配置较为复杂的信息数据库,它以树状形式存储信息。可以通过“开始”->“运行”,在运行窗口中输入“regedit”,来打开Windows提供的“注册表编辑器”窗口。如下图所示:注册表由若干部分组
2016-07-09 11:42:56 4648 2
原创 windows消息发送与接收
Windows开发中一个重要的概念就是消息。能搞清楚消息的传递和处理,相信可以使我们对Windows程序有更深的理解。先把消息划分为3类:发送消息(Incomingsent message)、投递消息(Post message)、输入消息(Input message)。其中发送消息是非队列消息,而后两种是队列消息。在线程的消息队列中并不包括非队列消息,而只有队列消息才会在线程的消息队列中。
2016-07-02 21:37:01 7140
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人