开启辅助访问 切换到窄版

打印 上一主题 下一主题

通用多任务嵌入式菜单系统 ( minitos Menu)设计说明 建立菜单的相关API及如何应用

[复制链接]
楼主
跳转到指定楼层
| 只看该作者 回帖奖励 |倒序浏览 |阅读模式
                通用多任务嵌入式菜单系统 ( minitos Menu)设计说明
minitos Menu 采用和Windows一样的菜单设计API,快速设计嵌入式菜单系统。可以根据所选择的菜单触发一个子程序运行。(酷吧,像delphi的事件函数一样J )
文档编写: LinLS  创建日期:2003-8-19        最后修改:2008-2-15  @福州福拓电子科技有限公司
minitos就是 mini Task OS.
http://www.dianzixuexi.com  电子学习网
minitos ® 嵌入操作系统 : http://www.dianzixuexi.com minitos相关频道
minitos ® Windows C++嵌入图形系统 http://www.dianzixuexi.com
一、 说明
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 -- 如果flagsMF_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 --指向pItemPopup菜单指针
/////////////////////////////////////////////////////////////////////
6)
MENUAPI HMENU AppendPopupMenu(HMENU hMenu,char *Title)
//hMenuPOPUP菜单的菜单项的最后再创建一个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);
                }
}
       


回复

使用道具 举报

版主

积分
47
沙发
福拓电子3  楼主| 发表于 2020-6-29 07:20:08 | 只看该作者
五、 菜单项数据结构



菜单项的结构如下:

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

}

}

}

回复 支持 反对

使用道具 举报

注册会员

积分
65
板凳
技术是命 发表于 2020-7-1 05:55:44 | 只看该作者
哪里下载?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表