精华内容
下载资源
问答
  • 利用动态链接库技术实现具有热插拔能力的“消息映射表”程序。程序在功能上表现为一个计算器程序用户键入A则启动加法子程序,提示用户输入两个操作数,并输出计算结果。用户键入S则启动减法子程序。以此类推。子程序...
  • 借助随机字符映射表法实现消息或文本的加密,并使用对等模式实现网络通信,进行加密后消息或文本的传输,并在对等端解密并显示。
  • C++消息映射

    2020-05-03 10:02:20
    是MFC引入消息映射在MFC应用程序中传输的消息有三种类型:窗口消息、命令消息和控件通知。 (1)窗口消息:WM_XXX 窗口消息(Window Message)一般与窗口的内部运作有关,如:创建窗口、绘制窗口和销毁窗口等。通常,...

     

     

    是MFC引入消息映射在MFC应用程序中传输的消息有三种类型:窗口消息、命令消息和控件通知。

    (1)窗口消息:WM_XXX

    窗口消息(Window Message)一般与窗口的内部运作有关,如:创建窗口、绘制窗口和销毁窗口等。通常,消息是从系统发送到窗口,或从窗口发送到窗口。

    (2)命令消息:WM_COMMAND

    命令消息一般与处理用户请求相关,当用户单击一个菜单项或工具栏时,命令消息产生,并被发送到能处理该请求的类对象(如:装载文件、编辑文本和保存选项等)。

    (3)控件通知:有多种格式 通常,控件通知在某些重要事件发生时,由控件窗口发送到父窗口,如打开一个组合框。控件通知为父窗口进一步控制子窗口提供了机会。例如,打开一个组合框时,父窗口可以用组合框初建时得不到的消息填充它。

     

     

    BN_XXXX是CButton产生的消息,EN_XXXX是CEdit产生的消息,等等。

     

    MFC使用一种消息映射机制来处理消息,在应用程序框架中的表现就是一个消息与消息处理函数一一对应的消息映射表,以及消息处理函数的声明和实现等代码。当窗口接收到消息时,会到消息映射表中查找该消息对应的消息处理函数,然后由消息处理函数进行相应的处理。SDK编程时需要在窗口过程中一一判断消息值进行相应的处理,相比之下MFC的消息映射机制要方便好用的多。

    消息映射表

    除了一些没有基类的类或CObject的直接派生类外,其他的类都可以自动生成消息映射表。下面的讲解都以前面例程HelloWorld的CMainFrame为例。消息映射表如下:

     

     

    消息映射表 

    MFC建立了两个结构体

     

    struct AFX_MSGMAP_ENTRY
    {
    	UINT nMessage;   // windows message
    	UINT nCode;      // control code or WM_NOTIFY code
    	UINT nID;        // control ID (or 0 for windows messages)
    	UINT nLastID;    // used for entries specifying a range of control id's
    	UINT_PTR nSig;       // signature type (action) or pointer to message #
    	AFX_PMSG pfn;    // routine to call (or special value)
    };
    struct AFX_MSGMAP
    {
    	const AFX_MSGMAP* (PASCAL* pfnGetBaseMap)();
    	const AFX_MSGMAP_ENTRY* lpEntries;
    };
    	const AFX_MSGMAP* (PASCAL* pfnGetBaseMap)();
    	const AFX_MSGMAP_ENTRY* lpEntries;
    };
    

       这是消息映射表的数据结构,然后在建立消息映射表

    MFC内部定义了三个宏:

    DECLARE_MESSAGE_MAP;申明两个静态变量和一个虚拟方法

     

    BEGIN_MESSAGE_MAP;对上一个宏定义的变量初始化的作用

     

    END_MASSAGE_MAP; 结尾工作

     

    #define DECLARE_MESSAGE_MAP() \
    protected: \
    	static const AFX_MSGMAP* PASCAL GetThisMessageMap(); \
    	virtual const AFX_MSGMAP* GetMessageMap() const; \
    
    #define BEGIN_TEMPLATE_MESSAGE_MAP(theClass, type_name, baseClass)			\
    	PTM_WARNING_DISABLE														\
    	template < typename type_name >											\
    	const AFX_MSGMAP* theClass< type_name >::GetMessageMap() const			\
    		{ return GetThisMessageMap(); }										\
    	template < typename type_name >											\
    	const AFX_MSGMAP* PASCAL theClass< type_name >::GetThisMessageMap()		\
    	{																		\
    		typedef theClass< type_name > ThisClass;							\
    		typedef baseClass TheBaseClass;										\
    		static const AFX_MSGMAP_ENTRY _messageEntries[] =					\
    		{
    
    #define BEGIN_MESSAGE_MAP(theClass, baseClass) \
    	PTM_WARNING_DISABLE \
    	const AFX_MSGMAP* theClass::GetMessageMap() const \
    		{ return GetThisMessageMap(); } \
    	const AFX_MSGMAP* PASCAL theClass::GetThisMessageMap() \
    	{ \
    		typedef theClass ThisClass;						   \
    		typedef baseClass TheBaseClass;					   \
    		static const AFX_MSGMAP_ENTRY _messageEntries[] =  \
    		{
    
    #define END_MESSAGE_MAP() \
    		{0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 } \
              }; \
    		static const AFX_MSGMAP messageMap = \
    		{ &TheBaseClass::GetThisMessageMap, &_messageEntries[0] }; \
    		return &messageMap; \
    	}								  \
    	PTM_WARNING_RESTORE
    

     

     

     

     

     

    这个调用我是第一次见到这个“{}”还有“,”的用法我也是第一次见到,了解了在解释吧,目前也不是很懂

     

     

     

     

     

     

     

     

     

     

    展开全文
  • NAT映射表

    2020-10-14 16:52:00
    • NAT映射表存在在路由器里面,实现的是私有IP与公有IP之间的转换;实际上可能是你家一台路由器拥有一个公网IP,而所有连在这台路由器上的所有设备都共享一个公网IP。那么问题又来了,既然共享一个公网IP,那接受...

    • 要描述NAT, 要先讲讲私有地址和全局地址。我们说现在要从主机A给主机B发送消息,需要依赖的是主机A和主机B的端口号与IP地址。
    • NAT映射表存在在路由器里面,实现的是私有IP与公有IP之间的转换;实际上可能是你家一台路由器拥有一个公网IP,而所有连在这台路由器上的所有设备都共享一个公网IP。那么问题又来了,既然共享一个公网IP,那接受回来的数据又怎么知道到底应该是哪一台设备接受呢?我们说过了在网络上唯一表示一个进程需要的是IP地址+端口号,既然IP地址一样,我们就对端口号做文章就可以了,就如下图(同理我们也可以对A1,A2,A3进行拓展,这样IP地址就够用了)

    展开全文
  • 有关MFC消息映射表

    2015-07-23 15:16:06
    MFC的消息映射机制和Win32的消息映射机制的编写有很大的不同。 Win32 是在消息处理函数中直接通过switch...以下是我从MSDN中截取的如何在MFC中简历相应的消息映射表 // example for DECLARE_MESSAGE_MAP class CMyWnd

    MFC的消息映射机制和Win32的消息映射机制的编写有很大的不同。 Win32 是在消息处理函数中直接通过switch case 来找到每个消息相对应的消息处理函数。 

    而MFC则是采用了宏定义的方式,简化了消息函数与消息的函数的编写

    以下是我从MSDN中截取的如何在MFC中简历相应的消息映射表

    // example for DECLARE_MESSAGE_MAP
    class CMyWnd : public CFrameWnd
    {
        // Member declarations
        
        DECLARE_MESSAGE_MAP( )
    };
    

    // example for BEGIN_MESSAGE_MAP
    BEGIN_MESSAGE_MAP( CMyWindow, CFrameWnd )
       //{{AFX_MSG_MAP( CMyWindow )
        ON_WM_PAINT()
        ON_COMMAND( IDM_ABOUT, OnAbout )
       //}}AFX_MSG_MAP
    END_MESSAGE_MAP( )
    
    下面在解释下  通过宏代换后  程序中所插入的代码


    class CMyWnd: public CFrameWnd{
    	DECLARE_MESSAGE_MAP()
    }
    BEGIN_MESSAGE_MAP(CMsgFrame, CFrameWnd)
    	ON_MESSAGE(WM_PAINT, OnPaint)
    	ON_WM_CREATE()
    END_MESSAGE_MAP()
    
    
    //声明了一个静态函数 GetThisMessageMap();
    //声明了一个虚函数 GetMessageMap()
    class CMyWnd: public CFrameWnd{
    	#define DECLARE_MESSAGE_MAP() 
    	protected: 
    		static const AFX_MSGMAP* PASCAL GetThisMessageMap(); 
    		virtual const AFX_MSGMAP* GetMessageMap() const; 
    }                
    
    #define BEGIN_MESSAGE_MAP(theClass, baseClass) 
    
    //实现了虚函数GetMessageMap()的函数内容-> 就是直接调用GetThisMessageMap()
    TM_WARNING_DISABLE 
    const AFX_MSGMAP* theClass::GetMessageMap() const { 
    	return GetThisMessageMap(); 
    } 
    
    //实现了GetThisMessage的内容  
    // 给theClass和baseClass 起了别名,分别叫 ThisClass 和 TheBaseClass  
    //然后定义一个以AFX_MSGMAP_ENTRY为数据类型的数组_messageEntries  实现了消息和函数的映射
    //下面是AFX_MSGMAP_ENTRY的定义  定义中nMessage消息和pfn函数形成了一一对应的关系
    //struct AFX_MSGMAP_ENTRY
    //{
    //	UINT nMessage;   // windows message
    //	UINT nCode;      // control code or WM_NOTIFY code
    //	UINT nID;        // control ID (or 0 for windows messages)
    //	UINT nLastID;    // used for entries specifying a range of control id's
    //	UINT_PTR nSig;       // signature type (action) or pointer to message #
    //	AFX_PMSG pfn;    // routine to call (or special value)
    //};
    
    
    
    const AFX_MSGMAP* PASCAL theClass::GetThisMessageMap() { 
    	typedef theClass ThisClass;						   
    	typedef baseClass TheBaseClass;					   
    	static const AFX_MSGMAP_ENTRY _messageEntries[] =  {
    // 将消息ID和消息相应函数的映射放到了_messageEntries 数组中
    #define ON_MESSAGE(message, memberFxn) 
    	{ message, 0, 0, 0, AfxSig_lwl, (AFX_PMSG)(AFX_PMSGW) (static_cast< LRESULT (AFX_MSG_CALL CWnd::*)(WPARAM, LPARAM) > (memberFxn)) },
    
    //将终止映射的变量同样放入_messageEntries数组中, 并生成了messageMap变量,其中包括映消息映射和本函数的地址
    // 定义的虚函数可以通过静态函数调用,静态函数可以通过类直接调用。virtual function -> static function -> class::static function
    #define END_MESSAGE_MAP() 
    		{0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 } }; 
    		static const AFX_MSGMAP messageMap = { &TheBaseClass::GetThisMessageMap, &_messageEntries[0] }; 
    		return &messageMap; 
    	}								  
    	PTM_WARNING_RESTORE
    
    
    
    
    
    DECLARE_MESSAGE_MAP();
    
    
    
    
    
    
    
    
    







    展开全文
  • 简单的消息映射表

    2008-01-31 09:53:00
    模范MFC的消息映射表基础,建立一个针对不用命令动作的消息模型当然,这个只是最基本的应用,真正MFC的映射表比这可复杂多了...但是,以此为基础就能开发出适用自己的消息模型,希望对大家有用==========================...

    模范MFC的消息映射表基础,建立一个针对不用命令动作的消息模型
    当然,这个只是最基本的应用,真正MFC的映射表比这可复杂多了...
    但是,以此为基础就能开发出适用自己的消息模型,希望对大家有用

    ===================================================

    #include <iostream>

    class MyClass{
    public:
     // 定义一张结构表 表示命令与对应的处理函数
     struct iCommandMap{
      // 命令
      int command;
      // 处理命令的函数指针
      void (MyClass::*pfn)(int param);
     };

     // 定义一个2个命令的表
     const static iCommandMap iCmd[2];


     // 对应命令的处理函数
     void OnVoid1(int param) { std::cout << "I am void1 : param is " << param; }
     void OnVoid2(int param) { std::cout << "I am void2 : param is " << param; }
    };

    // 将命令与处理函数存入结构数组中
    const MyClass::iCommandMap MyClass::iCmd[] = {
     0x01,  OnVoid1,
     0x02,  OnVoid2,
    };

    // 简化计算数组长度的宏
    #define dim(x) (sizeof(x) / sizeof(x[0]))

     

    int _tmain(int argc, _TCHAR* argv[])
    {
     // 声明对象
     MyClass mc;

     // 命令
     int command = 0x01;  //改成 2 试试?
     int param = 1234; //传入函数的参数

     // 遍历命令表 调用与命令对应的函数指针
     for(int i = 0; i < dim(mc.iCmd); i ++){
      if(mc.iCmd[i].command == command)
       (mc.*MyClass::iCmd[i].pfn)(param);
     }

     return 0;

    展开全文
  • MFC的消息映射表

    千次阅读 2011-10-01 21:32:23
    windows中原始的消息响应是通过switch-case来进行了,在mfc中,主要通过遍历数组来查找消息所对应的函数指针,这个数组遍布在各个类中,作为静态成员来实现,为了找到对应类的响应数组,中间还加了一个虚函数来得到...
  • 头文件,消息定义,函数指针声明、处理函数声明、消息产生函数声明: #ifndef MAINWINDOW_H #define MAINWINDOW_H #include &lt;QMainWindow&gt; #include &lt;QDebug&gt; #include &lt;map&...
  • 关于MFC的消息映射表

    千次阅读 2005-03-04 08:32:00
    关于MFC中的消息映射表用于封装消息的结构AFX_MSGMAP_ENTRYstruct AFX_MSGMAP_ENTRY{ UINT nMessage; // windows message UINT nCode; // control code or WM
  • 消息映射机制

    2018-07-09 14:45:42
    什么是消息 窗口消息一般由三个部分组成:1.一个无符号整数,是消息... 什么是消息映射机制 MFC使用一种消息映射机制来处理消息,在应用程序框架中的表现就是一个消息与消息处理函数一一对应的消息映射表,以及消...
  • 消息映射的实现

    千次阅读 2017-11-02 16:13:09
    消息映射的实现   Windows消息概述 Windows应用程序的输入由Windows系统以消息的形式发送给应用程序的窗口。这些窗口通过窗口过程来接收和处理消息,然后把控制返还给Windows。   消息的分
  • MFC之消息映射机制实现方法

    千次阅读 2016-09-04 19:04:46
    本文分析了完成消息映射的的应有步骤以及消息映射机制的原理性分析。
  • MFC消息映射机制

    千次阅读 2018-08-11 18:28:31
    MFC使用一种消息映射机制来处理消息,在应用程序框架中的表现就是一个消息与消息处理函数一一对应的消息映射表,以及消息处理函数的声明和实现等代码。当窗口接收到消息时,会到消息映射表中查找该消息对应的消息...
  • 消息映射可以说是mfc框架的精华部分,但就是一层窗户纸,捅不破,你就看不清楚里面是什么,但是只要你看到,伸手捅,你会觉得就这么简单。闲话少说。 首先要问下你,对win32下编程是否清楚,win32下如果要创建一个...
  • 平时在做MFC工程时,难免会遇到很多消息没有使用但是却占用了很多地方,我们想删除但是有害怕破坏整个工程的运行,今天就给大家介绍下MFC清理删除消息映射函数的两种方法: 1.手动删除 MFC的消息映射类向导会在三个...
  • 摘要:VC/C++源码,系统相关,ClassWizard,消息映射 VC++ MFC消息映射机制的剖析实例源代码,讲述如何运用ClassWizard,,理解发送给窗口的消息是如何被MFC框架通过窗口句柄映射表和消息映射表  来用窗口类的函数进行...
  • MFC的消息处理机制由两部分组成:CCmdTarget类和消息映射表。   窗口消息构成 所有的窗口消息由3部分组成 UINT Msg,  WPARAM wParam,  LPARAM lParam  为神马不用虚函数来处理消息? 因为,虚函数...
  • 消息映射

    2013-04-15 13:26:15
    1.首先看两个成员变量的声明: ...的确,它把消息映射的信息(消息映射数组)和相关函数打包在一起,也就是说,得到了一个消息处理类的该变量,就得到了它全部的消息映射数据和功能。 AFX_MSGMAP_ENTRY _messa
  • MFC消息映射机制的具体实现方法是:在每个能接收和处理消息的类中,定义一个消息和消息函数静态对照表,即消息映射表。在消息映射表中,消息与对应的消息处理函数指针是成对出现的,也就是他们是绑定在一起的。某个...
  • MyBatis面试题(2020最新版)

    万次阅读 多人点赞 2019-09-24 16:40:33
    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 ...
  • 一、什么是端口映射 端口映射: 端口映射就是将内网中的主机的一个端口映射到外网主机的一个端口,提供相应的服务。当用户访问外网IP的这个端口时,服务器自动将请求映射到对应局域网内部的机器上。 比如: ...
  • MFC消息机制---消息映射

    千次阅读 2016-02-26 20:07:47
    Win32程序消息流动 在讲MFC消息机制之前,先来介绍一下Win32程序的消息处理。 Win32程序的编写流程一般就分为:注册窗口,创建窗口,显示窗口,更新窗口, 消息循环,消息处理。 Win32程序执行起来后,会在如下...
  • MFC消息映射

    千次阅读 2014-04-11 09:26:05
    MFC消息映射机制的具体实现方法是:在每个能接收和处理消息的类中,定义一个消息和消息函数静态对照表,即消息映射表。在消息映射表中,消息与对应的消息处理函数指针是成对出现的,也就是他们是绑定在一起的。某个...
  • 消息映射

    2014-01-07 16:18:38
    原文地址:... 一、消息映射表 AFX_MSGMAP_ENTRY结构表示消息映射表中的一个消息映射项,将消息与处理该消息的成员关联起来。 struct AFX_MSGMAP_ENTRY { UINT nMessage; //消息标志 UINT nCode; /
  • MFC消息映射机制详解

    千次阅读 2015-10-21 13:57:09
    Windows程序和MFC程序是靠消息驱动的,他们...用多了mfc就想对它的消息映射机制有一个本质的了解,下面将对消息映射做详细的分析。当然,在分析MFC消息映射之前首先对Windows程序的消息处理过程进行一个简单的描述。
  • Qt元对象机制与MFC消息映射机制

    千次阅读 2015-01-09 23:30:07
    最后是三个定义消息映射表的宏BEGIN_MESSAGE_MAP(theClass,baseClass)、 ON_COMMAND(id,memberFxn)、define END_MESSAGE_MAP()   #defineBEGIN_MESSAGE_MAP(theClass, baseClass) \ AFX_MSGMAP*the...
  • MFC消息映射机制概述

    2014-05-16 11:47:00
    Windows应用程序是消息驱动的。在MFC软件开发中,界面操作或者线程之间通信都会经常用到消息,通过对消息的处理实现相应的操作。比较典型的过程是,用户操作窗口,然后有消息产生,送给窗口的消息处理函数处理,对...
  • MFC消息映射机制的理解

    千次阅读 2018-10-28 23:10:12
    当窗体,控件,点击标题栏等时,会产生消息,然后发给消息处理函数进行处理,而消息与消息映射表是一一对应的关系,这个关系就是消息映射表,根据根据消息通过消息映射表来查找对应的消息处理函数,这就称为消息映射...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 163,984
精华内容 65,593
关键字:

什么是消息映射表