现在的位置: 首页 > 综合 > 正文

windows平台消息处理函数(C++版)

2013年03月24日 ⁄ 综合 ⁄ 共 2255字 ⁄ 字号 评论关闭
/*
   Name: MessageMap.cpp
   Author:CarveTimes
   Description: simulating the windows message maps
   Date: 30-08-04 19:50
   Copyright: CarveTimes
  */
  
  #include<iostream>
  #include<windows.h>
  #include<stdlib.h>
  using namespace std;
  /*定义消息结构体*/
  struct MSGMA_ENTRY{
   UINT nMessage; /*消息编号*/
   LONG (*pfn)(HWND,UINT,WPARAM,LPARAM); /*函数指针,准备用这个指针指向对应的消息处理函数*/
  } ;
  #define dim(x) (sizeof(x)/sizeof(x[0]))/*宏定义,用来求的数组的大小*/
  
  /*WM_CREATE消息的处理函数,返回值要大写,数据类型要大写,函数名称要遵循命名规范大小写结合*/
  LONG OnCreate(HWND hWnd,UINT wMsg,UINT wParam ,LONG lParam)
  {
  
   cout<<"call OnCreate function"<   return 0;
  } ;
  /*WM_PAINT消息的处理函数,返回值要大写,数据类型要大写,函数名称要遵循命名规范大小写结合*/
   LONG OnPaint(HWND hWnd,UINT wMsg,UINT wParam ,LONG lParam)
  {
   cout<<"call OnPaint function"<   return 0;
  } ;
  /*WM_SIZE消息的处理函数,返回值要大写,数据类型要大写,函数名称要遵循命名规范大小写结合*/
   LONG OnSize(HWND hWnd,UINT wMsg,UINT wParam ,LONG lParam)
  {
   cout<<"call OnSize function"<   return 0;
  } ;
  /*WM_CLOSE消息的处理函数,返回值要大写,数据类型要大写,函数名称要遵循命名规范大小写结合*/
  LONG OnClose(HWND hWnd,UINT wMsg,UINT wParam ,LONG lParam)
  {
   cout<<"call OnClose function"<   return 0;
  } ;
  /*WM_DESTROY消息的处理函数,返回值要大写,数据类型要大写,函数名称要遵循命名规范大小写结合*/
  LONG OnDestroy(HWND hWnd,UINT wMsg,UINT wParam ,LONG lParam)
  {
   cout<<"call OnDestroy function"<   return 0;
  } ;
  /*当接受到的消息不是消息列表中已经定义消息处理函数的消息,则用这个函数处理,称为缺省的消息处理函数*/
  LONG DefMessageProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
  {
   cout<<"DefMessageProc"<   return 0;
  }
  
  /*定义数组,把消息和对应于该消息的消息处理函数对应起来,下列每一行对应于该数组的一个元素,该数组的每一个元素都是一个结构体
  类型的变量,该结构体类型的变量拥有两个属性:消息编号,和函数指针*/
  struct MSGMA_ENTRY _messageEnteries[] =
  {
   WM_CREATE, OnCreate,
   WM_PAINT, OnPaint,
   WM_SIZE, OnSize,
   WM_CLOSE, OnClose,
   WM_DESTROY,OnDestroy
  };
  
   /*消息分发函数,根据接受到的消息,分别调用对应的消息处理函数*/
  LONG MessageProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
  {
   int i;
   for(i = 0;i< dim(_messageEnteries);i++) /*遍历消息结构体数组*/
   {
   if(message == _messageEnteries[i].nMessage ) /*如果收到的消息和数组中已经定义消息处理函数的消息一致,
   则通过return语句调用对应的消息处理函数 */
  
   return ((*_messageEnteries[i].pfn)(hWnd,message,wParam,lParam)) ;
   }
   /*如果收到的消息不没有定义对应的消息处理函数,则采用缺省的消息处理函数*/
   return (DefMessageProc(hWnd,message,wParam,lParam)) ;
  }
  
  int main()
  {
   /*定义消息数组*/
  LONG msg[]={WM_CREATE,WM_PAINT,WM_SIZE,WM_CLOSE,WM_DESTROY};
  
  for(int i = 0;i < sizeof(msg)/sizeof(long); i++)
   LONG res = MessageProc(0,msg[i],0,0);/*遍历消息数组,使用该函数找到对应的消息处理函数*/
   system("pause");/*程序暂停执行*/
   return 0;
  }
 

抱歉!评论已关闭.