/* 创建用于演示button控件的视图 */ rtgui_view_t* demo_gui_button(rtgui_view_t* parent_view) { rtgui_view_t* view; rtgui_button_t* button; rtgui_font_t* font; /* 先创建一个演示用的视图 */ view = demo_view_create(parent_view, "Button View"); /* 创建一个button控件 */ button = rtgui_button_create(view, "Red", 5, 40, 100, 25); /* 设置label控件的前景色为红色 */ RTGUI_WIDGET_FOREGROUND(button) = red; button = rtgui_button_create(view, "Blue", 5, 70, 100, 25); RTGUI_WIDGET_FOREGROUND(button) = blue; button = rtgui_button_create(view, "12 font", 5, 100, 100, 25); /* 设置字体为12点阵的asc字体 */ font = rtgui_font_refer("asc", 12); RTGUI_WIDGET_FONT(button) = font; button = rtgui_button_create(view, "16 font", 5, 130, 100, 25); /* 设置字体为16点阵的asc字体 */ font = rtgui_font_refer("asc", 16); RTGUI_WIDGET_FONT(button) = font; return view; }
rtgui_view_t *demo_gui_buffer_animation(rtgui_view_t* parent_view) { rtgui_view_t *view; view = demo_view_create(parent_view, "DC 缓冲区动画"); if (view != RT_NULL) rtgui_widget_set_event_handler(view, animation_event_handler); rtgui_font_get_metrics(RTGUI_WIDGET_FONT(view), "缓冲动画", &text_rect); if (dc_buffer == RT_NULL) { rtgui_rect_t rect; rect.x1 = 0; rect.x2 = rtgui_rect_width(text_rect) + 2; rect.y1 = 0; rect.y2 = rtgui_rect_height(text_rect) + 2; /* 创建 DC Buffer,长 50,宽 50 */ dc_buffer = rtgui_dc_buffer_create(rtgui_rect_width(rect), rtgui_rect_height(rect)); RTGUI_DC_FC(dc_buffer) = RTGUI_WIDGET_BACKGROUND(view); rtgui_dc_fill_rect(dc_buffer, &rect); RTGUI_DC_FC(dc_buffer) = black; rect.x1 = 1; rect.y1 = 1; rtgui_dc_draw_text(dc_buffer, "缓冲动画", &rect); } /* 启动定时器以触发动画 */ timer = rtgui_timer_create(1, RT_TIMER_FLAG_PERIODIC, timeout, view); rtgui_timer_start(timer); return view; }
/* 创建用于演示checkbox控件的视图 */ rtgui_view_t* demo_gui_checkbox(rtgui_view_t* parent_view) { rtgui_view_t* view; rtgui_checkbox_t* checkbox; rtgui_font_t* font; /* 先创建一个演示用的视图 */ view = demo_view_create(parent_view, "CheckBox View"); /* 创建一个checkbox控件 */ checkbox = rtgui_checkbox_create(view, "Red", RT_TRUE, 5, 40); /* 设置前景色为红色 */ RTGUI_WIDGET_FOREGROUND(checkbox) = red; checkbox = rtgui_checkbox_create(view, "Blue", RT_TRUE, 5, 60); RTGUI_WIDGET_FOREGROUND(checkbox) = blue; checkbox = rtgui_checkbox_create(view, "12 font", RT_TRUE, 5, 80); font = rtgui_font_refer("asc", 12); RTGUI_WIDGET_FONT(checkbox) = font; checkbox = rtgui_checkbox_create(view, "16 font", RT_TRUE, 5, 100); font = rtgui_font_refer("asc", 16); RTGUI_WIDGET_FONT(checkbox) = font; return view; }
rtgui_view_t *demo_gui_benchmark(rtgui_view_t* parent_view) { srand(100); view = demo_view_create(parent_view, "绘图测试"); rtgui_widget_set_event_handler(view, benchmark_event_handler); return view; }
/* 创建用于演示combobox控件的视图 */ rtgui_view_t* demo_gui_combobox(rtgui_view_t* parent_view) { rtgui_view_t* view; rtgui_combo_t* box; /* 先创建一个演示用的视图 */ view = demo_view_create(parent_view, "ComboBox View"); box = rtgui_combo_create(view, "demo combo", 5, 40, 120, 20); rtgui_combo_set_items(box, items, RT_COUNT(items)); box->add_string(box, "add item 1"); box->add_string(box, "add item 2"); return view; }
rtgui_view_t *demo_gui_slider(rtgui_view_t* parent_view) { rtgui_view_t *view; /* create a demo view */ view = demo_view_create(parent_view, "Slider View"); rtgui_label_create(view, "horizontal slider:", 5, 40, 150, 20); rtgui_slider_create(view, 0, 100, 5, 60, 100, 16, RTGUI_HORIZONTAL); rtgui_label_create(view, "vertical slider:", 5, 80, 150, 20); rtgui_slider_create(view, 0, 100, 10, 100, 16, 80, RTGUI_VERTICAL); return view; }
/* 方向键: 移动 * 回车键: 进入下一级目录,或调用文件处理函数 * 退格键: 返回上一级目录 */ rtgui_view_t* demo_gui_fnview(rtgui_view_t* parent_view) { rtgui_view_t *view; rtgui_filelist_view_t *fview; /* 创建演示用的视图 */ view = demo_view_create(parent_view, "FileList View"); #ifdef _WIN32 fview = rtgui_filelist_view_create(view, "d:\\", "*.*", 5, 40, 200, 150); #else fview = rtgui_filelist_view_create(view, "/", "*.*", 5, 40, 200, 150); #endif fview->on_item = demo_fview_on_item; return view; }
/* 创建用于演示menu控件的视图 */ rtgui_view_t* demo_gui_menu(rtgui_view_t* parent_view) { rtgui_view_t *view; rtgui_menu_t *main_menu, *sub_menu, *toolmenu; /* 先创建一个演示用的视图 */ view = demo_view_create(parent_view, "MENU View"); /* 1.使用动态方式创建菜单 */ main_menu = rtgui_menu_create(view, "menu", 5, 40, RTGUI_MENU_NORMAL); sub_menu = rtgui_menu_create(view, "File", 0, 0, RTGUI_MENU_POPUP); rtgui_menu_append(sub_menu, 0, 0x20001, "New", RT_NULL); rtgui_menu_append(sub_menu, 0, 0x20002, "Open", RT_NULL); rtgui_menu_append(sub_menu, 0, 0x20003, "Save", RT_NULL); rtgui_menu_append(sub_menu, 0, 0x20004, "Print", RT_NULL); rtgui_menu_append(sub_menu, 0, 0x20005, "Exit", RT_NULL); rtgui_menu_append(main_menu, RTGUI_MENU_POPUP, (rt_uint32_t)sub_menu, sub_menu->name, RT_NULL); sub_menu = rtgui_menu_create(view, "EditDocument", 0, 0, RTGUI_MENU_POPUP); rtgui_menu_append(sub_menu, 0, 0x30001, "Cut", RT_NULL); rtgui_menu_append(sub_menu, 0, 0x30002, "Copy", RT_NULL); rtgui_menu_append(sub_menu, 0, 0x30002, "Paste", RT_NULL); rtgui_menu_append(sub_menu, 0, 0x30003, "Find...", RT_NULL); toolmenu = rtgui_menu_create(view, "Toolbars", 0, 0, RTGUI_MENU_POPUP); rtgui_menu_append(toolmenu, 0, 0x50001, "File Tools", RT_NULL); rtgui_menu_append(toolmenu, 0, 0x50002, "build Tools", RT_NULL); rtgui_menu_append(sub_menu, RTGUI_MENU_POPUP, (rt_uint32_t)toolmenu, toolmenu->name, RT_NULL); rtgui_menu_append(main_menu, RTGUI_MENU_POPUP, (rt_uint32_t)sub_menu, sub_menu->name, RT_NULL); sub_menu = rtgui_menu_create(view, "View", 0, 0, RTGUI_MENU_POPUP); rtgui_menu_append(sub_menu, 0, 0x40001, "Status bar", RT_NULL); rtgui_menu_append(sub_menu, 0, 0x40001, "Tool bar", RT_NULL); rtgui_menu_append(sub_menu, 0, 0x40001, "Project window", RT_NULL); rtgui_menu_append(sub_menu, 0, 0x40001, "Books window", RT_NULL); rtgui_menu_append(sub_menu, 0, 0x40001, "Functions window", RT_NULL); rtgui_menu_append(sub_menu, 0, 0x40001, "Full screen", RT_NULL); rtgui_menu_append(main_menu, RTGUI_MENU_POPUP, (rt_uint32_t)sub_menu, sub_menu->name, RT_NULL); rtgui_menu_append(main_menu, 0, 0x10004, "Help", RT_NULL); /* 2.使用静态方式创建菜单 */ /* 菜单的一些功能还在调试中... */ return view; }
/* 创建用于演示label控件的视图 */ rtgui_view_t* demo_gui_label(rtgui_view_t* parent_view) { rtgui_view_t* view; rtgui_label_t* label; rtgui_font_t* font; /* 先创建一个演示用的视图 */ view = demo_view_create(parent_view, "Label View"); /* 创建一个label控件 */ label = rtgui_label_create(view, "Red Left", 10, 40, 200, 20); /* 设置label控件上的文本对齐方式为:左对齐 */ RTGUI_WIDGET_TEXTALIGN(label) = RTGUI_ALIGN_LEFT|RTGUI_ALIGN_CENTER_VERTICAL; /* 设置label控件的前景色为红色 */ RTGUI_WIDGET_FOREGROUND(label) = red; RTGUI_WIDGET_BACKGROUND(label) = white; label = rtgui_label_create(view, "Blue Right", 10, 65, 200, 20); RTGUI_WIDGET_TEXTALIGN(label) = RTGUI_ALIGN_RIGHT|RTGUI_ALIGN_CENTER_VERTICAL; RTGUI_WIDGET_FOREGROUND(label) = blue; RTGUI_WIDGET_BACKGROUND(label) = white; label = rtgui_label_create(view, "Green Center", 10, 90, 200, 20); RTGUI_WIDGET_TEXTALIGN(label) = RTGUI_ALIGN_CENTER_HORIZONTAL|RTGUI_ALIGN_CENTER_VERTICAL; RTGUI_WIDGET_FOREGROUND(label) = green; RTGUI_WIDGET_BACKGROUND(label) = white; label = rtgui_label_create(view, "12 font",10, 115, 200, 20); /* 设置字体为12点阵的asc字体 */ font = rtgui_font_refer("asc", 12); RTGUI_WIDGET_FONT(label) = font; RTGUI_WIDGET_BACKGROUND(label) = white; label = rtgui_label_create(view, "16 font", 10, 140, 200, 20); font = rtgui_font_refer("asc", 16); RTGUI_WIDGET_FONT(RTGUI_WIDGET(label)) = font; RTGUI_WIDGET_BACKGROUND(label) = white; return view; }
/* 创建用于演示textbox控件的视图 */ rtgui_view_t* demo_gui_textbox(rtgui_view_t* parent_view) { rtgui_view_t* view; /* 先创建一个演示用的视图 */ view = demo_view_create(parent_view, "TextBox View"); rtgui_label_create(view, "名字: ", 5, 40, 50, 20); rtgui_textbox_create(view, "bernard",5, 60, 200, 20, RTGUI_TEXTBOX_NONE); rtgui_label_create(view, "邮件: ", 5, 80, 50, 20); rtgui_textbox_create(view, "*****@*****.**", 5, 100, 200, 20, RTGUI_TEXTBOX_NONE); rtgui_label_create(view, "密码: ", 5, 120, 50, 20); rtgui_textbox_create(view, "rt-thread", 5, 140, 200, 20, RTGUI_TEXTBOX_MASK); rtgui_label_create(view, "主页: ", 5, 160, 50, 20); rtgui_textbox_create(view, "http://www.rt-thread.org", 5, 180, 200, 20, RTGUI_TEXTBOX_NONE); return view; }
rtgui_view_t *demo_gui_progressbar(rtgui_view_t* parent_view) { rtgui_view_t *view; rtgui_progressbar_t *hbar, *vbar; rtgui_timer_t *timer = RT_NULL; /* create a demo view */ view = demo_view_create(parent_view, "ProgressBar View"); rtgui_label_create(view, "邦峠序業訳:", 5, 40, 100, 20); hbar = rtgui_progressbar_create(view, RTGUI_HORIZONTAL, 100, 10, 70, 150, 15); rtgui_label_create(view, "換岷序業訳:", 5, 90, 100, 20); vbar = rtgui_progressbar_create(view, RTGUI_VERTICAL, 100, 10, 110, 15, 60); timer = rtgui_timer_create(20, RT_TIMER_FLAG_PERIODIC, hbar_timeout, hbar); rtgui_timer_start(timer); timer = rtgui_timer_create(20, RT_TIMER_FLAG_PERIODIC, vbar_timeout, vbar); rtgui_timer_start(timer); return view; }
/* 创建用于DC Buffer操作演示用的视图 */ rtgui_view_t *demo_gui_dc_buffer(rtgui_view_t* parent_view) { rtgui_view_t *view; if (dc_buffer == RT_NULL) { rtgui_rect_t rect = {0, 0, 50, 50}; /* 创建 DC Buffer,长 50,宽 50 */ dc_buffer = rtgui_dc_buffer_create(50, 50); RTGUI_DC_FC(dc_buffer) = blue; rtgui_dc_fill_rect(dc_buffer, &rect); RTGUI_DC_FC(dc_buffer) = red; rtgui_dc_draw_circle(dc_buffer, 25, 25, 10); } view = demo_view_create(parent_view, "缓冲DC演示"); if (view == RT_NULL) return RT_NULL; /* 设置成自己的事件处理函数 */ rtgui_widget_set_event_handler(view, dc_buffer_event_handler); return view; }
rtgui_view_t *demo_gui_scrollbar(rtgui_view_t* parent_view) { rtgui_view_t *view; rtgui_scrollbar_t* hbar; rtgui_scrollbar_t* vbar; /* create a demo view */ view = demo_view_create(parent_view, "ScrollBar View"); rtgui_label_create(view, "horizontal bar:", 5, 40, 150, 20); hbar = rtgui_scrollbar_create(view, 5, 65, 20, 100, RTGUI_HORIZONTAL); rtgui_scrollbar_set_range(hbar, 10); rtgui_scrollbar_set_page_step(hbar, 5); rtgui_scrollbar_set_line_step(hbar, 1); rtgui_label_create(view, "vertical bar:", 5, 90, 150, 20); vbar = rtgui_scrollbar_create(view, 10, 115, 20, 80, RTGUI_VERTICAL); rtgui_scrollbar_set_range(vbar, 5); rtgui_scrollbar_set_page_step(vbar, 3); rtgui_scrollbar_set_line_step(vbar, 1); return view; }