MFC中的消息处理/AfxWndProc/WM_COMMAND路由

MFC中的消息处理主要通过消息映射表和AfxWndProc函数进行。文章介绍了消息泵的工作原理,以及如何通过CCmdTarget和消息映射表处理消息。详细阐述了消息映射表的数据结构和相关宏,以及消息的处理流程,特别是WM_COMMAND消息的路由,涉及到了命令路由到框架窗口、文档、视图和应用程序的过程。同时提到了PreTranslateMessage在消息处理前的角色。
摘要由CSDN通过智能技术生成

窗口消息概述:  
  所有的窗口消息的基本形式都是一样的,有3个部分:(1).一个无符号整数,包含消息的实际内容.(2)WPARAM,一个4字节整数.(3)LPARAM,一个4字节参数.无符号数是实际消息.  
  含MFC在内的任何WINDOWS程序的核心都是消息泵.消息泵是一个循环,它取出消息并将消息送给恰当的窗口消息处理函数.下面是个消息泵的示例:  
  while(GetMessage(&msg,NULL,NULL,NULL)){  
  TranslateMessage(&msg)   ;  
  DispatchMessage(&msg)   ;  
  }  
  return   msg.wParam   ;  
  程序会在开始运行时调用RegisterClass()并使用一个WNDCLASS结构来注册至少一个窗口类.每当该类的一个窗口窗口中有消息时,WINDOWS都会调用WNDCLASS中的lpfnWndProc所指定的函数.  
  典型的SDK程序中消息处理函数是个庞大且难于维护的switch语句.C++中可用虚函数处理每个消息,但是,这种方法将带因虚表而产生过多的开销,且不易适应消息的增减.  
   
  ----------------------------  
  CCmdTarget和消息映射表----MFC的消息处理结构的两个基本组成部分  
   
   
  ----------------------------  
  消息映射表数据结构  
   
  struct   AFX_MSGMAP_ENTRY   {//消息映射表实际入口.  
  UINT   nMessage;//实际消息  
  UINT   nCode;//控件代码或通知代码  
  UINT   nID;//控件ID  
  UINT   nLastID;//控件最大ID  
  UINT   nSig;//消息处理函数的签名  
  AFX_PMSG   pfn;//消息处理函数  
  };  
  struct   AFX_MSGMAP   {   //实际的消息映射表.  
  const   AFX_MSGMAP*   pBaseMap;//基类的消息映射表.  
  const   AFX_MSGMAP_ENTRY*   lpEntries   ;//消息表入口数组指针.  
  }  
   
  消息映射宏:  
  #define   DECLARE_MESSAGE_MAP()   /  
  private:   /  
  static   const   AFX_MSGMAP_ENTRY   _messageEntries[];   /  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值