嵌入式开发交流网论坛
标题: 通用多任务嵌入式菜单系统 ( minitos Menu)设计说明 建立菜单的相关API及如何应用 [打印本页]
作者: 福拓电子3 时间: 2020-6-29 07:19
标题: 通用多任务嵌入式菜单系统 ( minitos Menu)设计说明 建立菜单的相关API及如何应用
通用多任务嵌入式菜单系统 ( minitos Menu)设计说明
minitos Menu 采用和Windows一样的菜单设计API,快速设计嵌入式菜单系统。可以根据所选择的菜单触发一个子程序运行。(酷吧,像delphi的事件函数一样J )
文档编写: LinLS 创建日期:2003-8-19 最后修改:2008-2-15 @福州福拓电子科技有限公司
minitos就是 mini Task OS.
一、 说明
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);
}
}
作者: 福拓电子3 时间: 2020-6-29 07:20
五、 菜单项数据结构
菜单项的结构如下:
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
}
}
}
作者: 技术是命 时间: 2020-7-1 05:55
哪里下载?
欢迎光临 嵌入式开发交流网论坛 (http://www.dianzixuexi.com/bbs/) |
Powered by Discuz! X3.2 |