通用多任务嵌入式菜单系统 ( minitos Menu)设计说明
minitos Menu 采用和Windows一样的菜单设计API,快速设计嵌入式菜单系统。可以根据所选择的菜单触发一个子程序运行。(酷吧,像delphi的事件函数一样 )
文档编写: LinLS  创建日期:2003-8-19 最后修改:2008-2-19
minitos就是 mini Task OS,意思是迷你的rTOS.
http://www.minitos.com   网minitos嵌入开发网主站
http://www2.minitos.com 网 minitos嵌入开发网2站
http://net.minitos.com   网 minitos嵌入开发网网络站
http://www2.minitos.com/bbs 嵌入式论坛
http://ask.embed.cc 嵌入式提问吧
minitos ® 嵌入操作系统 :  http://www.minitos.com/index.htm minitos ® Windows C++嵌入图形系统  http://www.minitos.com/index.htm
一、 说明 minitos Menu通用菜单系统原来本是minitos Windows的一部分,后来由于有需求,因此单独提取出来作为一个独立的模块供嵌入式菜单开发使用。并且已经在IC卡校园一卡通设备,金融POS机,税控设备,网络电话等设备上有应用。 二、 特点 1) minitos Menu 作为单独的一个模块可方便进行移植到不同的系统 2) 所有API都和Windows系统的菜单类似。 3) 可快速构建菜单 4) 免费开放源代码
三、 建立菜单的相关API
1) MENUAPI HMENU InitMenuItemList(MENUITEM pItem[],UINT uiNum)
功能 初始化菜单项列表,如上面的ItemExp[2],并建立一个POPUP菜单指向该列表 uiNum --菜单项列表的项数 Input:  pItem --指向菜单项列表的第一项     uiNum --列表由多少项 return : 返回该POPUP菜单的指针
例子: 先定义一个菜单项 MENUITEM Top[3] = {  //Name,    ID ,  Type,SubMenu, Key, bExit, Func, EnterFunc pNext, pPrev
 {"Top1",   0,    0,    0,       0,   TRUE  ,NULL, NULL,NULL, NULL},  {"Top2",   0,    0,    0,       0,   TRUE  ,NULL, NULL,NULL, NULL},  {"Top3",   0,    0,    0,       0,   TRUE  ,NULL, NULL,NULL, NULL}
};
利用定义的菜单项建立一个菜单 HMENU CreateMenu_System3 (void)       {  HMENU pMenuTop,hMenu;
 pMenuTop =InitMenuItemList(Top,3);    return pMenuTop; }
2)  HMENU CreatePopupMenu (void) ///////////////////////////////////////////////////////////////////// //建立一个空的POPUP菜单 //return : 返回该 POPUP菜单 /////////////////////////////////////////////////////////////////////
3)  BOOL AppendMenu(HMENU hMenu,UINT flags,UINT ItemID,char * lpContent) ///////////////////////////////////////////////////////////////////// //在一个POPUP菜单上最后的项再追加一个菜单项,同Window类似 //Input: hMenu --要追加的POPUP菜单 //   flags -- MF_POPUP 表示追加的项为POPUP菜单 //      其他(MF_ENABLE)  表示追加 的是普通菜单项 //  ItemID -- 如果flags为MF_POPUP ,则该项表示为POPUP菜单项指针 //      如果flags为其他 ,则该项表示为菜单项的ID //  lpContent--菜单项名 //return : TRUE --成功 /////////////////////////////////////////////////////////////////////
4)  //设置菜单项参数 MENUAPI void SetMenuItemParam(PMENUITEM pItem,UINT key,BOOL bExit,void (*Func)(void))
5) MENUAPI void SetMenuItem(PMENUPOPUP pPopupIn,PMENUITEM pItem,HMENU hMenu) ///////////////////////////////////////////////////////////////////// //把一个hMenu菜单挂到上层的一个菜单项pItem中,使之成为一个完整的菜单 //pPopupIn --指向pItem的Popup菜单指针 /////////////////////////////////////////////////////////////////////
6)  MENUAPI HMENU AppendPopupMenu(HMENU hMenu,char *Title) //在hMenu的POPUP菜单的菜单项的最后再创建一个POPUP菜单项 //Input: Title --要创建的Popup菜单项名 //       hMenu -- //return : 返回已经创建Popup菜单指针
7) MENUAPI HMENU DeleteMenuItem(HMENU hMenu,PMENUITEM pItem) //在菜单中删除一个菜单项pItem //如果该菜单项为POPUP类型的菜单项,则返回该Popup菜单,否则返回0
8) MENUAPI void DestroyMenu(HMENU hMenu) //删除一个Popup菜单
四、 菜单操作过程
1) 启动一个菜单的过程用MenuStart函数。 void MenuStart(HINST hInst, HMENU hMenu) 例子: Void main(void) {   c=getchar();   if(c=='a')   { //菜单处理 开始     MenuStart( hInst, (HMENU)pMenuTop);   } }
  五、 菜单项数据结构
菜单项的结构如下: struct tagMENUITEM {     char     szName[MENU_MAX_LEN];  //对MFT_STRING该参数,使用szName表示菜单名     //菜单的ID     UINT    uiID;      //菜单类型,指明是否为MF_POPUP  UINT uiType;     PMENUPOPUP   hSubMenu; //是Popup菜单指向MEMUPOPUP,否则为NULL     UINT  uiKey; //保留    //调用该菜单后,是否退出菜单  BOOL bExit;   //需要在UP/DOWN等就立即运行的函数  void (*Func) (void);
 void (*EnterFunc) (void); /*  菜单被选择触发运行的函数*/
 struct tagMENUITEM * pNext;    struct tagMENUITEM * pPrev; };
六、 利用资源建立菜单的方式         Minitos Menu支持象windows利用资源文件建立菜单的方式,不过没有经过测试不建议使用.有兴趣可以看看。 该文件不在项目中,为单独的一个文件 parseRC.c .
API为 extern void rc__CreatePopupMenu(HMENU hMenu_Top,char Context[]);
资源编写格式如下:  MyMenu MENU  {   ITEM  "Test1", 201   POPUP "File"   {    ITEM "Test2",202    POPUP "Test3"    {     ITEM "Test4",205    }   }  }
|
|