|
特别说明:完整STemWin的1-60期教程和配套实例下载地址:链接 第47章 LISTBOX-列表框控件
本期教程讲解STemWin支持的列表框控件。
47. 1 列表框控件介绍
47. 2 官方WIDGET_ListBox实例
47. 3 对话框上使用列表控件
47. 4 总结
47.1 列表框控件介绍
列表框用于选择列表的一个元素。创建的列表框可以没有环绕的框架窗口,如下所示,或者作为FRAMEWIN控件的子窗口建立。列表框中的项目被选定后,会突出显示。注意,所选项目的背景色取决于列表框窗口是否有输入焦点。
47.1.1 列表框支持的通知代码
以下事件是列表框控件作为WM_NOTIFY_PARENT消息的一部分发送给其父窗口的:
消息 |
描述 |
WM_NOTIFICATION_CLICKED |
列表框已被点击。 |
WM_NOTIFICATION_RELEASED |
列表框已被释放。 |
WM_NOTIFICATION_MOVED_OUT |
列表框已被点击,且指针已从列表框处移开,没有释放。 |
WM_NOTIFICATION_SCROLL_CHANGED |
可选滚动条的滚动位置已更改。 |
WM_NOTIFICATION_SEL_CHANGED |
列表框的选择内容已更改。 |
47.2 官方WIDGET_ListBox实例
官方的这个实例很好的演示了LISTBOX的使用,这个例子在模拟器中的位置:
源码如下(程序中进行了详细的注释):
- ----------------------------------------------------------------------
- File : WIDGET_ListBox.c
- Purpose : Example demonstrating the LISTBOX widget
- ----------------------------------------------------------------------
- */
-
- #include "GUI.h"
- #include "FRAMEWIN.h"
- #include "LISTBOX.h"
- #include <stddef.h>
-
- #define SPEED 1000
-
- /*******************************************************************
- *
- * static variables
- *
- ********************************************************************
- */
-
- static const GUI_ConstString _ListBox[] = {
- "English", "Deutsch", NULL
- };
-
- /*******************************************************************
- *
- * _ShowSeveralFunctions
- */
- static void _ShowSeveralFunctions(LISTBOX_Handle hListBox) {
- int NumEntries, i;
-
- /* 增加垂直滚动条 */
- GUI_DispStringAtCEOL("SCROLLBAR_CreateAttached", 5, 55);
- GUI_Delay(SPEED);
- SCROLLBAR_CreateAttached(hListBox, SCROLLBAR_CF_VERTICAL);
- GUI_Delay(SPEED * 0.75);
-
- /* 增加字符串 */
- GUI_DispStringAtCEOL("LISTBOX_AddString", 5, 55);
- GUI_Delay(SPEED);
- LISTBOX_AddString(hListBox, "Fran鏰is");
- GUI_Delay(SPEED / 6);
- LISTBOX_AddString(hListBox, "Japanese");
- GUI_Delay(SPEED / 6);
- LISTBOX_AddString(hListBox, "Italiano");
- GUI_Delay(SPEED / 6);
- LISTBOX_AddString(hListBox, "Espa駉l");
- GUI_Delay(SPEED / 6);
- LISTBOX_AddString(hListBox, "Other language ...");
- GUI_Delay(SPEED * 0.6);
-
- /* 设置输入焦点 */
- GUI_DispStringAtCEOL("WM_SetFocus", 5, 55);
- GUI_Delay(SPEED * 0.9);
- WM_SetFocus(hListBox);
- GUI_Delay(SPEED * 0.7);
-
- /* 设置字体 */
- GUI_DispStringAtCEOL("LISTBOX_SetFont", 5, 55);
- GUI_Delay(SPEED * 0.9);
- LISTBOX_SetFont(hListBox, &GUI_Font13B_1);
- GUI_Delay(SPEED * 0.7);
-
- /* 增加选项 */
- GUI_DispStringAtCEOL("LISTBOX_IncSel", 5, 55);
- GUI_Delay(SPEED);
- NumEntries = LISTBOX_GetNumItems(hListBox);
- for (i = 0; i < NumEntries - 1; i++) {
- LISTBOX_IncSel(hListBox);
- GUI_Delay(SPEED / 6);
- }
- GUI_Delay(SPEED / 4);
-
-
- /* 自动增加滚动条 */
- GUI_DispStringAtCEOL("Optional automatic scrollbar", 5, 55);
- GUI_Delay(SPEED);
- LISTBOX_SetAutoScrollH(hListBox, 1);
- LISTBOX_SetAutoScrollV(hListBox, 1);
- GUI_Delay(SPEED * 0.75);
-
-
- /* Set font */
- /* 设置字体 */
- GUI_DispStringAtCEOL("LISTBOX_SetFont", 5, 55);
- GUI_Delay(SPEED);
- LISTBOX_SetFont(hListBox, &GUI_Font16B_1);
- GUI_Delay(SPEED * 0.75);
-
- /* 递增选择 */
- GUI_DispStringAtCEOL("LISTBOX_DecSel", 5, 55);
- GUI_Delay(SPEED);
- for (i = 0; i < NumEntries - 1; i++) {
- LISTBOX_DecSel(hListBox);
- GUI_Delay(SPEED / 6);
- }
- GUI_Delay(SPEED / 4);
-
- /* 更改滚动条的属性 */
- GUI_DispStringAtCEOL("Change scrollbar width", 5, 55);
- GUI_Delay(SPEED * 0.7);
- {
- /* 得到滚动条的句柄 从而去修改滚动条的属性 */
- SCROLLBAR_Handle hScrollH = WM_GetDialogItem(hListBox, GUI_ID_HSCROLL);
- SCROLLBAR_Handle hScrollV = WM_GetDialogItem(hListBox, GUI_ID_VSCROLL);
- SCROLLBAR_SetWidth(hScrollV, 14);
- GUI_Delay(SPEED / 4);
- SCROLLBAR_SetWidth(hScrollH, 14);
- GUI_Delay(SPEED * 0.6);
- }
-
-
- /* 设置列表框的大小 */
- GUI_DispStringAtCEOL("Change size of listbox", 5, 55);
- GUI_Delay(SPEED * 0.75);
- WM_ResizeWindow(hListBox, -15, 0);
- GUI_Delay(SPEED / 4);
- WM_ResizeWindow(hListBox, 0, -15);
- GUI_Delay(SPEED / 4);
- WM_ResizeWindow(hListBox, 15, 0);
- GUI_Delay(SPEED / 4);
- WM_ResizeWindow(hListBox, 0, 15);
- GUI_Delay(SPEED / 2);
-
-
- /* 设置相应的项目禁能 注意0是第一个项目 */
- GUI_DispStringAtCEOL("LISTBOX_SetItemDisabled", 5, 55);
- GUI_Delay(SPEED);
- LISTBOX_SetItemDisabled(hListBox, 4, 1);
- GUI_Delay(SPEED * 0.75);
-
-
- /* 设置使能多个项目的选择 */
- GUI_DispStringAtCEOL("LISTBOX_SetMulti", 5, 55);
- GUI_Delay(SPEED);
- LISTBOX_SetMulti(hListBox, 1);
- GUI_Delay(SPEED * 0.75);
-
- /* 选择项目 */
- GUI_DispStringAtCEOL("LISTBOX_SetItemSel", 5, 55);
- GUI_Delay(SPEED);
- LISTBOX_SetItemSel(hListBox, 0, 1);
- GUI_Delay(SPEED / 4);
- LISTBOX_SetItemSel(hListBox, 1, 1);
- GUI_Delay(SPEED / 4);
- LISTBOX_SetItemSel(hListBox, 2, 1);
- GUI_Delay(SPEED * 0.8);
-
- /* 删除列表框 */
- GUI_DispStringAtCEOL("LISTBOX_Delete", 5, 55);
- GUI_Delay(SPEED * 1.1);
- LISTBOX_Delete(hListBox);
- GUI_Delay(SPEED * 0.75);
- }
-
- /*******************************************************************
- *
- * _DemoListBox
- */
- static void _DemoListBox(void) {
- LISTBOX_Handle hListBox;
-
- /* 显示标题 */
- GUI_SetBkColor(0xB00000);
- GUI_SetColor(0xFFFFFF);
- GUI_SetFont(&GUI_Font24_ASCII);
- GUI_DispStringHCenterAt("Listbox - Sample", 160, 5);
- GUI_Delay(SPEED / 2);
-
- /* 创建列表框 */
- GUI_SetFont(&GUI_Font8x16);
- GUI_SetTextAlign(GUI_TA_LEFT);
- GUI_DispStringAtCEOL("using", 5, 40);
- GUI_DispStringAtCEOL("LISTBOX_Create", 5, 55);
- GUI_Delay(SPEED * 0.9);
- hListBox = LISTBOX_Create(_ListBox, 100, 80, 120, 115, WM_CF_SHOW);
- GUI_Delay(SPEED * 0.75);
-
- /* 功能演示 */
- _ShowSeveralFunctions(hListBox);
- /* Clear display */
- GUI_Clear();
- GUI_Delay(SPEED * 1.5);
- }
-
- /*******************************************************************
- *
- * _DemoListBoxAsChild
- */
- static void _DemoListBoxAsChild(void) {
- FRAMEWIN_Handle hFrame;
- LISTBOX_Handle hListBox;
-
- /* 显示标题 */
- GUI_SetBkColor(0xB00000);
- GUI_SetColor(0xFFFFFF);
- GUI_SetFont(&GUI_Font24_ASCII);
- GUI_DispStringHCenterAt("Listbox as child - Sample", 160, 5);
- GUI_Delay(SPEED / 2);
-
- /* 创建窗口框架 */
- GUI_SetFont(&GUI_Font8x16);
- GUI_SetTextAlign(GUI_TA_LEFT);
- GUI_DispStringAtCEOL("using", 5, 40);
- GUI_DispStringAtCEOL("FRAMEWIN_Create", 5, 55);
- GUI_Delay(SPEED);
- hFrame = FRAMEWIN_Create("List box", NULL, WM_CF_SHOW, 100, 80, 120, 140);
- FRAMEWIN_SetFont(hFrame, &GUI_Font16B_ASCII);
- FRAMEWIN_SetActive(hFrame, 1);
- GUI_Delay(SPEED * 0.75);
-
-
- /* 创建列表框 */
- GUI_DispStringAtCEOL("LISTBOX_CreateAsChild", 5, 55);
- GUI_Delay(SPEED);
- /* 其实坐标0,0,水平和垂直的大小如果设置为0的话,那么将默认为父窗口的用户区大小 */
- hListBox = LISTBOX_CreateAsChild(_ListBox, WM_GetClientWindow(hFrame), 0, 0, 0, 0, WM_CF_SHOW);
- GUI_Delay(SPEED * 0.75);
-
- _ShowSeveralFunctions(hListBox);
-
- /* 删除框架窗口*/
- GUI_DispStringAtCEOL("FRAMEWIN_Delete", 5, 55);
- GUI_Delay(SPEED);
- FRAMEWIN_Delete(hFrame);
- GUI_Delay(SPEED * 0.75);
-
- /* 清除显示 */
- GUI_Clear();
- GUI_Delay(SPEED * 1.5);
- }
-
- /*******************************************************************
- *
- * MainTask
- *
- * Demonstrates LISTBOX widget
- *
- ********************************************************************
- */
-
- void MainTask(void) {
- GUI_Init();
- WM_SetDesktopColor(0xB00000);
- GUI_Exec();
- while(1) {
- _DemoListBox();
- _DemoListBoxAsChild();
- }
- }
复制代码 这个例子的实际现象效果如下:
47.3 对话框上使用列表框控件
用uCGUIBulder4.0建立如下界面(分辨率480*272):
为列表框添加成员的方法如下:
将生成的代码直接复制到模拟器或者开发板上面运行,实际显示效果如下(生成的代码在本期教程配套的例子中):
47.4 总结
本期教程主要是跟大家讲解了列表框控件的使用,希望大家可以把本期教程中讲的这两个例子跑跑,然后自己设计一个相关的例子进行试验学习。教程中只是使用了部分的列表框控件API,其它的API大家都可以试试。 |
|