/*
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
|