打印
[应用相关]

emWin_Menu标题菜单控件使用方法

[复制链接]
1179|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

因为emWin的GUIBuilder比较弱智,我们只能用变通的方法创建MENU控件,然后生成C文件之后再做配置修改

(1)用GUIBuilder创建4个MENU控件,第1个横放,另外3个画成竖放形状(但GUIBuilder不能改成竖放,只能生成C文件之后再修改):


沙发
天灵灵地灵灵|  楼主 | 2017-8-10 17:03 | 只看该作者

(2)保存为C文件FramewinDLG.c,然后添加到脱机模拟仿真平台CodeBlocks的emwin工程,并且编译运行,修改C文件前的显示效果如下:

(3)修改MENU①②③为竖向:

static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {

{ FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_0, 0, 0, 320, 240, 0, 0x64, 0 },

{ MENU_CreateIndirect, "Menu", ID_MENU_0, 10, 10, 280, 20, 0, 0x0, 0 },

{ MENU_CreateIndirect, "Menu", ID_MENU_1, 10, 45, 60, 150, MENU_CF_VERTICAL, 0x0, 0 },

{ MENU_CreateIndirect, "Menu", ID_MENU_2, 85, 45, 60, 150, MENU_CF_VERTICAL, 0x0, 0 },

{ MENU_CreateIndirect, "Menu", ID_MENU_3, 160, 45, 60, 150, MENU_CF_VERTICAL, 0x0, 0 },

};

(4)修改所有Item的ID:

#define ID_MENU_00  (GUI_ID_USER + 10)

#define ID_MENU_01  (GUI_ID_USER + 11)

#define ID_MENU_02  (GUI_ID_USER + 12)

#define ID_MENU_10  (GUI_ID_USER + 13)

#define ID_MENU_11  (GUI_ID_USER + 14)

#define ID_MENU_12  (GUI_ID_USER + 15)

#define ID_MENU_20  (GUI_ID_USER + 16)

#define ID_MENU_21  (GUI_ID_USER + 17)

#define ID_MENU_22  (GUI_ID_USER + 18)

#define ID_MENU_23  (GUI_ID_USER + 19)

#define ID_MENU_24  (GUI_ID_USER + 20)

#define ID_MENU_30  (GUI_ID_USER + 21)


使用特权

评论回复
板凳
天灵灵地灵灵|  楼主 | 2017-8-10 17:03 | 只看该作者

(5)在WM_INIT_DIALOG初始化消息中加入初始化代码,将MENU①加入到主MENU中:

hItem = WM_GetDialogItem(pMsg->hWin, ID_MENU_0);

ItemData.Flags    = 0;

ItemData.hSubmenu = WM_GetDialogItem(pMsg->hWin, ID_MENU_1);

ItemData.Id       = ID_MENU_00;

ItemData.pText    = "File";

MENU_SetItem(hItem, ID_MENU_00, &ItemData);

(6)用同样的代码将MENU②③加入到主MENU中:

hItem = WM_GetDialogItem(pMsg->hWin, ID_MENU_0);

ItemData.Flags    = 0;

ItemData.hSubmenu = WM_GetDialogItem(pMsg->hWin, ID_MENU_2);

ItemData.Id       = ID_MENU_01;

ItemData.pText    = "New";

MENU_SetItem(hItem, ID_MENU_01, &ItemData);


hItem = WM_GetDialogItem(pMsg->hWin, ID_MENU_0);

ItemData.Flags    = 0;

ItemData.hSubmenu = WM_GetDialogItem(pMsg->hWin, ID_MENU_3);

ItemData.Id       = ID_MENU_02;

ItemData.pText    = "About";

MENU_SetItem(hItem, ID_MENU_02, &ItemData);

(7)用FRAMEWIN_AddMenu()函数将MENU附贴到Framewin顶部:

FRAMEWIN_AddMenu(pMsg->hWin, WM_GetDialogItem(pMsg->hWin, ID_MENU_0));

(8)修改MENU①②③的高度,否则将出现以下显示现象:

(9)在WM_NOTIFY_PARENT消息中(操作屏幕时程序跑到这里)加入代码:

case WM_MENU: //MENU控件触发消息(操作MENU后到这里)

     p_data = (MENU_MSG_DATA*)pMsg->Data.p;

     switch (p_data->MsgType) {

     case MENU_ON_ITEMPRESSED:

         break;

     case MENU_ON_ITEMACTIVATE:

         break;

     case MENU_ON_ITEMSELECT:

         MENU_GetItem(pMsg->hWinSrc, p_data->ItemId, &data);

         if (data.Flags & MENU_IF_DISABLED) break;

         EDIT_SetValue(WM_GetDialogItem(pMsg->hWin, ID_EDIT_0), data.Id);

         break;

     }

     WM_DefaultProc(pMsg);

     break;




使用特权

评论回复
地板
天灵灵地灵灵|  楼主 | 2017-8-10 19:02 | 只看该作者
工程文件下载地址。 SeggerEval_WIN32_MSVC_MinGW_GUI_V528_010Menu标题菜单控件使用方法.rar (4.26 MB)


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

173

主题

3358

帖子

13

粉丝