消息映射查找机制

java的映射机制 java的映射机制java的映射机制java的映射机制 立即下载

[转载自:《深入浅出MFC 第2版 侯俊杰》]
1、消息映射被CWnd窗口类对象查找的前奏过程:
MFC2.5(确认VS2010的MFC4.x同)的virtual int CWinApp::Run(),查找定义到atlbase.h的:

namespace  ATL
   {
          template  <class T>
          class  ATL_NO_VTABLE  CAtlExeModuleT :
                public  CAtlModuleT <T>
          {
                ...
                int  WinMain(_In_  int  nShowCmd)  throw()
                { 
                      T*  pT = static_case<T*>(this);
                      HRESULT  hr = S_OK;
                      ...
                      hr = pT->Run(nShowCmd);
                      ...
                }
                ...
                HRESULT Run(_In_ int nShowCmd = SW_HIDE) throw()
                {
                	HRESULT hr = S_OK;

                		T* pT = static_cast<T*>(this);
                		hr = pT->PreMessageLoop(nShowCmd);

                		// Call RunMessageLoop only if PreMessageLoop returns S_OK.
                		if (hr == S_OK)
                		{
	             	   	pT->RunMessageLoop();
                		}

                		// Call PostMessageLoop if PreMessageLoop returns success.
                		if (SUCCEEDED(hr))
                		{
                			hr = pT->PostMessageLoop();
                		}

                		ATLASSERT(SUCCEEDED(hr));
                		return hr;
            		}
                    ...
                    void RunMessageLoop() throw()
                    {
                    	MSG msg;
                    	while (GetMessage(&msg, 0, 0, 0) > 0)
                    	{
	                    	TranslateMessage(&msg);
	                    	DispatchMessage(&msg);
                    	}
                    }
                    ....
          }
          ...
   }
   //继续查找定义全局域的DispatchMessage(MSG*)到WinUser.h中已经没有了源码:
   #if defined(_M_CEE)
   #undef DispatchMessage
   __inline
   LRESULT
   DispatchMessage(
       CONST MSG *lpMsg
       )
   {
   #ifdef UNICODE
       return DispatchMessageW(
   #else
   return DispatchMessageA(
   #endif
           lpMsg
           );
   }
   #endif  /* _M_CEE */

//以下来自docs.microsoft.com
在这里插入图片描述
即:WinUser.h文件全局域的DispatchMessage(MSG* pMsg)函数分发一个消息到一个窗口过程window procedure,通常用于分发一个GetMessage()函数检索到的消息。
其返回值是窗口过程window procedure返回值,尽管返回值的意义取决于被分发的消息,返回值通常被忽略。
备注:传入参数MSG结构体必须包含有效的消息值,如果lpmsg参数指向一个WM_TIMER消息并且该WM_TIMER消息的lParam参数不是NULL,此时lParam是指向被调用的函数而不是窗口过程window procedure。
注意到应用程序CWinApp有责任检索retrieve并分发dispatch输入的消息到对话框dialog box。大多数应用程序为此使用主消息循环 main message loop。然而,为了允许用户通过使用键盘来移动并且选择控件,应用程序必须调用IsDialogMessage()。详见对话框键盘接口添加链接描述

MFC 消息映射仿真 visual studio 2008版 通过控制台仿真MFC消息映射机制。深入浅出MFC,visual studio 2008版 立即下载

相关推荐

1.3、云计算HCIP融合存储产品及部署

目标:描述Oceanstor V3系列存储产品系统组成及产品定位 描述Oceanstor V3硬件结构及软件架构 掌握存储系统与主机系统之间的连接 一、存储型号 低端型存储:Oceanstor 2200 2600 2800 V3/V5 终端型存储:Oceanstor 5300 5500 5600 5800 6800 V3/V5 高端型存储:Oceanstor 18000 二、Oceanstor V3系列存储系统定位 OceanStor V3系列存储系统是华为根据存储产品应用现状和存储

weixin_43666279的博客 1653

VS2010/MFC编程入门之五(MFC消息映射机制概述)

原文:http://www.jizhuomi.com/software/147.html 前面已经说过,Windows应用程序是消息驱动的。在MFC软件开发中,界面操作或者线程之间通信都会经常用到消息,通过对消息的处理实现相应的操作。比较典型的过程是,用户操作窗口,然后有消息产生,送给窗口的消息处理函数处理,对用户的操作做出响应。        什么是消息        窗口消息

白话机器学习 1582

win11本地部署 DeepSeek-R1 大模型!免费开源,媲美OpenAI-o1能力,断网也能用

是否安装成功,然后直接运行部署deepseek-r1的命令。,出现下面界面即为安装成功。在cmd窗口中先输入。

记录学习编程的日常 2992

Windows 服务(六)

Windows 服务(六) ATL写个例子 创建ATL项目,选择Service(Exe) 代码引用自:http://blog.163.com/charlie-lei@126/blog/static/11374392420109238175788/ 修改代码,加入  //修改服务名称和描述  HRESULT RegisterAppId(bo

superliuxing的专栏 551

避坑指南:在Ubuntu 20.04上从零部署IS-Fusion环境(含CUDA 11.1和PyTorch 1.10.1配置)

本文提供了在Ubuntu 20.04系统上从零部署IS-Fusion 3D目标检测环境的详细避坑指南。内容涵盖CUDA 11.1、PyTorch 1.10.1、spconv等核心组件的精确版本安装与兼容性配置,并指导如何准备nuScenes数据集及启动模型训练,旨在帮助研究者和开发者高效搭建稳定的多模态融合算法开发环境。

gitlab7runner的博客 552

【ComfyUI专栏】安装Triton组件

Triton是一款支持大模型推理的深度学习加速组件,最初仅支持Linux平台,现已通过开源社区适配Windows系统。针对SageAttention的安装,建议使用3.2.0Post10版本(该版本提供封装好的安装包,更高版本仅有源码)。用户可通过GitHub获取安装资源,或直接使用pip命令"pip install triton-windows"进行安装。安装时需注意:1)在虚拟环境中操作;2)使用管理员权限。相关资源链接已在文中提供。

技术与管理的平衡木- 1861

图解MFC基本框架(深入消息映射机制)

首先,先看整体的消息流向图: 上图解释: 起点是消息循环,在winmain函数中(mfc中winmain函数是隐含的调用的,在app全局对象构造完后紧接着调用winmain函数),while循环中不断从应用程序队列中取消息,当取得一个消息时(含HWnd句柄),调用全局的AfxWndProc窗口函数(含有HWnd句柄作为参数),这个全局的函数根据HWnd得到具体的窗体wnd对象,然后调用对...

weixin_30911809的博客 490

华为od 面试八股文_数据库_01_含答案

华为od 面试八股文_数据库_01_含答案

MISAYAONE的博客 2166

MFC消息映射原理

原引自博客园 http://www.cnblogs.com/lidabo/p/3694726.html 多态的实现机制有两种,一是通过查找绝对位置表,二是查找名称表;两者各有优缺点,那么为什么mfc的消息映射采用了第二种方法,而不是c++使用的第一种呢?因为在mfc的gui类库是一个庞大的继承体系,而里面的每个类有很多成员函数(只说消息反映相关的成员函数啊),而且在派生类中,需要改写的也比较

迎难而上 660

使用MiniExcel.SaveAsByTemplate快速地保存百万数据

该代码展示了如何使用MiniExcel快速生成并导出百万级销售数据。核心方法GenerateLargeData()可生成指定数量的随机销售记录,包含客户名、日期、VIP状态、积分等20个字段。通过随机函数模拟真实数据分布,并支持自定义数据量(默认100万条)。配合Excel模板使用MiniExcel.SaveAsByTemplate()方法,能高效地将大数据量导出为Excel文件,且处理速度极快。代码结构清晰,包含数据生成、随机日期辅助方法和数据模型类,适合需要批量生成测试数据或导出大型报表的场景。

大坡3D软件开发 253

【温室气体】GOSAT 数据产品

【温室气体】GOSAT 数据产品

WW、forever的博客 238

MFC 消息映射机制

MFC 消息映射机制详解

qq_61553520的博客 2400

华为od 面试八股文_测试/测试开发_01_含答案

华为od面试八股文_测试/测试开发_01_含答案

MISAYAONE的博客 3816

VC++消息映射机制 WindowProc的函数(wincore.cpp​​​​​​​)

目录 消息映射机制 WindowProc的函数(wincore.cpp) OnWndMsg 函数(wincore.cpp) OnWndMsg函数的处理过程是: 接上:VC++ 类向导 接下: 消息映射机制 可以浏览一下Draw项目CDrawView的头文件和源文件,可以发现在为视类增加一个鼠标左键按下这一消息响应函数之后,在文件中增加了三处代码。 (1)消息响应函数原型在CDrawView类的头文件(DrawView.h)中,有如下所示代码。 // 生成的消息映射函数 protecte

当路danglu0010 3584

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

消息映射深度探索(2):MFC的做法 - 使用消息映射表

在MFC被成功做出来之前,一个最简单的想法就是使用虚函数,为每个消息定制一个虚函数,下面是个可能的实现:#include #include #include #define PRINT( msg ) { std::cout #define FUNC( func ) void func() { PRINT( #func##"()" ); }#define MFUNC( class, func ) v

1731

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

MFC消息映射的原理

原文地址:http://www.cnblogs.com/lidabo/p/3694726.html 多态的实现机制有两种,一是通过查找绝对位置表,二是查找名称表;两者各有优缺点,那么为什么mfc的消息映射采用了第二种方法,而不是c++使用的第一种呢?因为在mfc的gui类库是一个庞大的继承体系,而里面的每个类有很多成员函数(只说消息反映相关的成员函数啊),而且在派生类中,需要改写的也比较

hpp24的专栏 3354

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

MFC消息映射的原理:笔记

多态的实现机制有两种,一是通过查找绝对位置表,二是查找名称表;两者各有优缺点,那么为什么mfc的消息映射采用了第二种方法,而不是c++使用的第一种呢?因为在mfc的gui类库是一个庞大的继承体系,而里面的每个类有很多成员函数(只说消息反映相关的成员函数啊),而且在派生类中,需要改写的也比较少(我用来做练习的程序就是那么一两个,呵呵)。那么用c++的虚函数的实现机制会导致什么问题呢?就是大量虚表的...

SurpassLi的专栏 52

MFC消息映射

作为C++程序员,我们总是希望自己程序的所有代码都是自己写出来的,如果使用了其他的一些库,也总是千方百计想弄清楚其中的类和函数的原理,否则就会感觉不踏实。所以,我们对于在进行MFC视窗程序设计时经常要用到的消息机制也不满足于会使用,而是希望能理解个中道理。本文就为大家剖析MFC消息映射和命令传递的原理。        理解MFC消息机制的必要性        说到消息,在MFC中,“最

锄禾日当午 1597

[原创]MFC消息映射机制

MFC程序是靠消息映射驱动的,当用户执行鼠标/键盘、移动窗口等操作时,windows系统基于这些动作生成消息并存入系统消息队列。MFC程序执行消息循环,取出属于自己的消息并执行这些消息。MFC处理消息时,先进行预处理,预处理返回真的消息则当前处理结束,继续抓取下一条消息进行处理,预处理返回假的消息再分发处理,进入MFC消息映射机制。

harithchen的博客 1208

MFC中的消息映射宏

MFC中的消息映射宏是用一系列的宏实现的,声明使用的MESSAGE_MAP_DECLARE (),开始部分用MESSAGE_MAP_BEGIN (),结束部分用MESSAGE_MAP_END (),中间的映射用MESSAGE (*,*)来实现.         以前我一直搞不明白,说实话还是沉不下心来研究其中宏的具体含义.候捷的讲的很详细,其中还有对MFC的简易模拟实现,不过还是直到昨天看了段源

magicyang87的专栏 2495

MFC教程(4)-- 消息映射的实现(2)

但是在当前例子中,当前对象的类CTview没有覆盖该函数,所以CWnd的WindowProc被调用。  这个函数把下一步的工作交给OnWndMsg函数来处理。如果OnWndMsg没有处理,则交给DefWindowProc来处理。  OnWndMsg和DefWindowProc都是CWnd类的虚拟函数。  OnWndMsg的原型如下:   BOOL CWnd::OnWndMsg( U

cqhawk的专栏 2044

如果MFC的消息映射表需要排序...

这是今天下班前和同事讨论的问题。MFC的消息映射通过几个简单的宏,对Windows的消息机制做了非常好的面向对象封装,一时为无数C++程序员所模仿(当然,MFC可能也是模仿别人的)。熟悉MFC消息映射机制的人都知道,其本质无非就是把消息和其处理函数放到一个数组当中,当程序接收到某消息时,就会遍历该数组,查找对应的消息ID,找到了就调用其处理函数,找不到就往其基类的数组当中去找。对,是线性查找!那么...

weixin_33806300的博客 115

win32消息映射4-优化第二次的改进

3.优化第二次的改进。 在上一篇文章,我们讲到,在做消息映射时,每一次都要new一个msg_handler_base的派生类,这必然有个delete,为了delete这个派生类,在msg_handler_base的构造函数里,定义了一个全局变量g_manager,g_manager在析构时候把msg_handler_base的派生类全部干掉,这无疑会增加内存和性能开销,有没有办法避免这情况的发生...

Racer_y的专栏 257

MFC消息映射机制

本机环境 IDE:VC6.0 OS:Win8.1 一,创建工程、设置

eldn__的专栏 1048
上一篇: 函数不能返回局部变量的引用,但类的引用数据成员却可以引用构造函数的形参(局部变量),然而无意义
下一篇: MFC挂钩函数 Hook
HayPinF
博客等级 码龄9年 175粉丝 140原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值