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

          用C仿真MFC的消息映射

          Posted on 2005-11-15 11:42 wenger的天空 閱讀(394) 評論(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);
          }

          主站蜘蛛池模板: 罗江县| 山西省| 彰化市| 淳安县| 嘉鱼县| 视频| 佛冈县| 秦皇岛市| 上饶市| 嘉峪关市| 桦甸市| 广东省| 涟源市| 开远市| 望谟县| 萨迦县| 泾川县| 玛曲县| 鹤庆县| 隆昌县| 金寨县| 克什克腾旗| 定陶县| 曲阳县| 清镇市| 黄梅县| 尖扎县| 海安县| 乃东县| 金华市| 贵南县| 乌兰浩特市| 台湾省| 苏州市| 仁布县| 阜新市| 龙游县| 冷水江市| 康马县| 昌平区| 威宁|