Posted on 2005-11-15 11:42
wenger的天空 阅读(388)
评论(0) 编辑 收藏 所属分类:
C/C++/C#
越来越发现MFC的消息映射的精妙,很久没有写过blog了。用C写了一个简单的例子,权当作为一种自我安慰吧!:)
#include<iostream.h>
#define ELEMENT_NUM 4;
#define MENUM_NUM 2;
enum{OK=1,CANCEL=0};
//系统菜单定义
struct SysMenu{
char* text; //菜单文本
int xPos; //x坐标
int yPos; //y坐标
void (*onOKFun)(); //OK响应函数
void (*onCancelFun)(); //Cancel响应函数
};
//各个menu的相应函数
void menu1OK()
{
cout << "menu1 ok" <<endl;
}
void menu1Cancel()
{
cout << "menu1 cancel" <<endl;
}
void menu2OK()
{
cout << "menu2 Ok" << endl;
}
void menu2Cancel()
{
cout <<"menu2 Cancel" << endl;
}
static SysMenu menu[2]=
{
{
"menu1",0,48,menu1OK,menu1Cancel
}
,
{
"menu2",7,48,menu2OK,menu2Cancel
}
};
/*struct Element {
SysMenu menu;
SysButton button;
};*/
//将窗口元素和消息映射函数封装在窗口中
struct windows
{
int currentFocus;
//Element element[ELEMENT_NUM];
void (*messageFun)(int keyvalue,int elementID);
//....
};
//消息映射函数
void MessageFunction(int keyvalue, int elementID)
{
switch(keyvalue) {
case OK:
//实际上element[elementID].onOKFun();
menu[elementID].onOKFun();
break;
case CANCEL:
menu[elementID].onCancelFun();
}
}
void main()
{
//windows win;
windows win[1]={{0,MessageFunction}};
win[0].messageFun(CANCEL,0);
}