From 990d052de1c6eae325b4072723319d5cb3281ce2 Mon Sep 17 00:00:00 2001 From: "bernard.xiong@gmail.com" Date: Wed, 22 Dec 2010 00:13:32 +0000 Subject: update menu demo. git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1221 bbd45198-f89e-11dd-88c7-29a3b14d5316 --- examples/gui/demo_simple_workbench.c | 60 ++++++++++++++++++++++++++++++++++++ examples/gui/demo_view_menu.c | 16 ++++++---- 2 files changed, 70 insertions(+), 6 deletions(-) create mode 100644 examples/gui/demo_simple_workbench.c (limited to 'examples') diff --git a/examples/gui/demo_simple_workbench.c b/examples/gui/demo_simple_workbench.c new file mode 100644 index 0000000000..d0432428c7 --- /dev/null +++ b/examples/gui/demo_simple_workbench.c @@ -0,0 +1,60 @@ +/* + * A simple workbench + */ +#include +#include +#include +#include +#include + +static void workbench_entry(void* parameter) +{ + rt_mq_t mq; + rtgui_view_t* view; + rtgui_label_t* label; + struct rtgui_workbench* workbench; + rtgui_rect_t rect; + + mq = rt_mq_create("wmq", 256, 8, RT_IPC_FLAG_FIFO); + /* 注册当前线程为GUI线程 */ + rtgui_thread_register(rt_thread_self(), mq); + /* 创建一个工作台 */ + workbench = rtgui_workbench_create("main", "workbench #1"); + if (workbench == RT_NULL) return; + + view = rtgui_view_create("view"); + if (view == RT_NULL) return; + /* 指定视图的背景色 */ + RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(view)) = white; + + /* 添加一个label */ + label = rtgui_label_create("你好!RT-Thread!"); + rect.x1 = 10; rect.y1 = 10; + rect.x2 = 210; rect.y2 = 30; + /* 设置label的位置 */ + rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); + rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label)); + + /* 添加到父workbench中 */ + rtgui_workbench_add_view(workbench, view); + /* 非模式方式显示视图 */ + rtgui_view_show(view, RT_FALSE); + + /* 执行工作台事件循环 */ + rtgui_workbench_event_loop(workbench); + + /* 去注册GUI线程 */ + rtgui_thread_deregister(rt_thread_self()); + + /* delete message queue */ + rt_mq_delete(mq); +} + +/* 初始化workbench */ +void wb_init() +{ + rt_thread_t tid; + + tid = rt_thread_create("wb1", workbench_entry, RT_NULL, 2048, 20, 5); + if (tid != RT_NULL) rt_thread_startup(tid); +} diff --git a/examples/gui/demo_view_menu.c b/examples/gui/demo_view_menu.c index f3b421a36c..c0dabbb8df 100644 --- a/examples/gui/demo_view_menu.c +++ b/examples/gui/demo_view_menu.c @@ -7,21 +7,25 @@ #include #include +static rt_bool_t _onmenuitem(struct rtgui_widget *widget, struct rtgui_event* event) +{ + rt_kprintf("menu action!!\n"); + return RT_TRUE; +} -static rtgui_menu_item_t sub_items[] = +static const rtgui_menu_item_t sub_items[] = { - {RTGUI_ITEM_NORMAL, "item #1", RT_NULL, RT_NULL, 0, RT_NULL}, + {RTGUI_ITEM_NORMAL, "item #1", RT_NULL, RT_NULL, 0, _onmenuitem}, {RTGUI_ITEM_NORMAL, "item #2", RT_NULL, RT_NULL, 0, RT_NULL}, {RTGUI_ITEM_SEPARATOR, RT_NULL, RT_NULL, RT_NULL, 0, RT_NULL}, {RTGUI_ITEM_NORMAL, "item #3", RT_NULL, RT_NULL, 0, RT_NULL}, }; -static rtgui_menu_item_t items[] = +static const rtgui_menu_item_t items[] = { {RTGUI_ITEM_NORMAL, "item #1", RT_NULL, RT_NULL, 0, RT_NULL}, {RTGUI_ITEM_NORMAL, "item #2", RT_NULL, RT_NULL, 0, RT_NULL}, {RTGUI_ITEM_SEPARATOR, RT_NULL, RT_NULL, RT_NULL, 0, RT_NULL}, - {RTGUI_ITEM_NORMAL, "item #3", RT_NULL, RT_NULL, 0, RT_NULL}, - // {RTGUI_ITEM_SUBMENU, "item #3", RT_NULL, sub_items, sizeof(sub_items)/sizeof(sub_items[0]), RT_NULL}, + {RTGUI_ITEM_SUBMENU, "item #3", RT_NULL, sub_items, sizeof(sub_items)/sizeof(sub_items[0]), RT_NULL}, }; static rtgui_menu_t* menu; @@ -33,7 +37,7 @@ static _onmenu(struct rtgui_widget* widget, struct rtgui_event* event) rtgui_widget_rect_to_device(widget, &rect); if (menu != RT_NULL) - rtgui_menu_pop(menu, rect.x1, rect.y2); + rtgui_menu_pop(menu, rect.x1, rect.y2 + 5); } /* 鍒涘缓鐢ㄤ簬婕旂ずmenu鎺т欢鐨勮鍥� */ -- cgit v1.3.1