越來越發現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);
}