posts - 9, comments - 3, trackbacks - 0, articles - 1

用C仿真MFC的消息映射

Posted on 2005-11-15 11:42 wenger的天空 阅读(375) 评论(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);
}


只有注册用户登录后才能发表评论。


网站导航: