开启辅助访问 切换到窄版

打印 上一主题 下一主题

menu.h 实现minitos Menu 的菜单API实现头文件

[复制链接]
楼主
跳转到指定楼层
| 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*
    minitos Menu 采用和Windows一样的菜单设计API,快速设计嵌入式菜单系统。
   可以根据所选择的菜单触发一个子程序运行。(酷吧,像windows的事件函数一样 )

minitos就是 mini Task OS.

http://www.dianzixuexi.com  电子学习网
minitos 嵌入操作系统 : http://www.dianzixuexi.com minitos相关频道
minitos Windows C++嵌入图形系统 http://www.dianzixuexi.com
Copyright (C) 福州福拓电子科技有限公司

  
    本文实现minitos Menu 的菜单API实现头文件
    created by Linls,2003.8
*/


/*
菜单头文件
*/

#ifndef __MENU_H
#define __MENU_H

#include <stdio.h>

/*******************************************************************************
菜单功能按键定义
移植需要修改
*/
/*菜单名称长度*/
#define MENU_MAX_LEN 20

    /*退出菜单的ID*/
#define IDM_EXIT 55

/*按键定义*/
#define KEY_UP 'u'
#define KEY_DOWN 'd'
#define KEY_LEFT 'l'
#define KEY_RIGHT 'r'
#define KEY_OK    'o'        /*确认*/
#define KEY_EXIT 'e'    /*退出菜单*/
#define KEY_RETURN 't'    /*返回上一级*/

/*
移植修改以上部分
******************************************************************************/


typedef unsigned int UINT;
typedef int HMENU;
typedef int BOOL;

typedef int HINST;

#define TRUE 1
#define FALSE 0


/*菜单项标志*/
#define MF_POPUP            0x00000080L
#define MF_STRING           0x00000200L
#define MF_ENABLED          0x00000100L
#define MF_MALLOC            0x00000001L        /*动态创建的标志位*/

#define MENUAPI

#define CreateMenu CreatePopupMenu

typedef struct tagMENUPOPUP * PMENUPOPUP;

struct tagMENUITEM
{
    char          szName[MENU_MAX_LEN];     /*对MFT_STRING该参数,使用szName表示菜单名*/
   
    UINT    uiID;

    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;
        
};
typedef struct tagMENUITEM MENUITEM,*PMENUITEM;


typedef struct tagMENUPOPUP
{        
    char    szTitle[MENU_MAX_LEN];  /*该popup title */

        /*下级菜单项 */
    PMENUITEM  pHead;   /*头*/
    PMENUITEM  pTail;   /*尾*/

        /*上级菜单项 */
    PMENUITEM  pFarther;
        /*上级菜单项的Popup菜单指针 */
    PMENUPOPUP pFartherPopup;
} MENUPOPUP,*PMENUPOPUP;

    /*菜单可以在多个任务中运行,所以采用实例方式建立,一个实例只能在一个任务
中运行
    */
typedef struct __Menu_Inst
{
     PMENUPOPUP sg_pCurrMenuPopup;    /*当前的Popup菜单 */
     PMENUITEM  sg_pCurrMenuItem;        /*当前的菜单项 */
     
     HINST sg_hInst_View; /*在多任务多窗口视窗系统中需要,
                          该值只能给一个任务使用
                          其他简单的嵌入式菜单系统可以不需要此参数
                          也只有理解了多任务窗口系统,才能理解此参数意义,
                          一般系统就不需要此参数了
                          */
}MENU_INST;

extern MENUAPI HMENU CreatePopupMenu (void);
extern MENUAPI HMENU InitMenuItemList(MENUITEM pItem[],UINT uiNum);
extern MENUAPI BOOL AppendMenu(HMENU hMenu,UINT flags,UINT ItemID,char * lpContent);
extern MENUAPI void SetMenuItem(PMENUPOPUP pPopup,PMENUITEM pItem,HMENU hMenu);
extern MENUAPI HMENU AppendPopupMenu(HMENU hMenu,char *Title);

extern MENUAPI HINST  CreateMenuInst(HINST hInst_View);
extern MENUAPI void MenuStart(HINST hInst, HMENU hMenu);
extern MENUAPI void MenuDisplay(HINST hInst);
extern MENUAPI  UINT MenuSelect(HINST hInst,char c);

#endif
回复

使用道具 举报

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

本版积分规则

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