/*
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;
}
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;
}