你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【安富莱STemWin教程】第47章 LISTBOX-列表框控件

[复制链接]
baiyongbin2009 发布时间:2015-3-6 11:32
特别说明:完整STemWin的1-60期教程和配套实例下载地址:链接
第47章 LISTBOX-列表框控件

    本期教程讲解STemWin支持的列表框控件。
    47. 1 列表框控件介绍
    47. 2 官方WIDGET_ListBox实例
    47. 3 对话框上使用列表控件
    47. 4 总结
47.1 列表框控件介绍
    列表框用于选择列表的一个元素。创建的列表框可以没有环绕的框架窗口,如下所示,或者作为FRAMEWIN控件的子窗口建立。列表框中的项目被选定后,会突出显示。注意,所选项目的背景色取决于列表框窗口是否有输入焦点。
47.1.png
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的使用,这个例子在模拟器中的位置:
47.2.png
源码如下(程序中进行了详细的注释):
  1. ----------------------------------------------------------------------
  2. File        : WIDGET_ListBox.c
  3. Purpose     : Example demonstrating the LISTBOX widget
  4. ----------------------------------------------------------------------
  5. */

  6. #include "GUI.h"
  7. #include "FRAMEWIN.h"
  8. #include "LISTBOX.h"
  9. #include <stddef.h>

  10. #define SPEED 1000

  11. /*******************************************************************
  12. *
  13. *       static variables
  14. *
  15. ********************************************************************
  16. */

  17. static const GUI_ConstString _ListBox[] = {
  18. "English", "Deutsch", NULL
  19. };

  20. /*******************************************************************
  21. *
  22. *       _ShowSeveralFunctions
  23. */
  24. static void _ShowSeveralFunctions(LISTBOX_Handle hListBox) {
  25.   int NumEntries, i;

  26.   /* 增加垂直滚动条 */
  27.   GUI_DispStringAtCEOL("SCROLLBAR_CreateAttached", 5, 55);
  28.   GUI_Delay(SPEED);
  29.   SCROLLBAR_CreateAttached(hListBox, SCROLLBAR_CF_VERTICAL);
  30.   GUI_Delay(SPEED * 0.75);

  31.   /* 增加字符串 */
  32.   GUI_DispStringAtCEOL("LISTBOX_AddString", 5, 55);
  33.   GUI_Delay(SPEED);
  34.   LISTBOX_AddString(hListBox, "Fran鏰is");
  35.   GUI_Delay(SPEED / 6);
  36.   LISTBOX_AddString(hListBox, "Japanese");
  37.   GUI_Delay(SPEED / 6);
  38.   LISTBOX_AddString(hListBox, "Italiano");
  39.   GUI_Delay(SPEED / 6);
  40.   LISTBOX_AddString(hListBox, "Espa駉l");
  41.   GUI_Delay(SPEED / 6);
  42.   LISTBOX_AddString(hListBox, "Other language ...");
  43.   GUI_Delay(SPEED * 0.6);

  44.   /* 设置输入焦点 */
  45.   GUI_DispStringAtCEOL("WM_SetFocus", 5, 55);
  46.   GUI_Delay(SPEED * 0.9);
  47.   WM_SetFocus(hListBox);
  48.   GUI_Delay(SPEED * 0.7);

  49.   /* 设置字体 */
  50.   GUI_DispStringAtCEOL("LISTBOX_SetFont", 5, 55);
  51.   GUI_Delay(SPEED * 0.9);
  52.   LISTBOX_SetFont(hListBox, &GUI_Font13B_1);
  53.   GUI_Delay(SPEED * 0.7);

  54.   /* 增加选项 */
  55.   GUI_DispStringAtCEOL("LISTBOX_IncSel", 5, 55);
  56.   GUI_Delay(SPEED);
  57.   NumEntries = LISTBOX_GetNumItems(hListBox);
  58.   for (i = 0; i < NumEntries - 1; i++) {
  59.     LISTBOX_IncSel(hListBox);
  60.     GUI_Delay(SPEED / 6);
  61. }
  62.   GUI_Delay(SPEED / 4);


  63.   /* 自动增加滚动条 */
  64.   GUI_DispStringAtCEOL("Optional automatic scrollbar", 5, 55);
  65.   GUI_Delay(SPEED);
  66.   LISTBOX_SetAutoScrollH(hListBox, 1);
  67.   LISTBOX_SetAutoScrollV(hListBox, 1);
  68.   GUI_Delay(SPEED * 0.75);


  69.   /* Set font */
  70.   /* 设置字体 */
  71.   GUI_DispStringAtCEOL("LISTBOX_SetFont", 5, 55);
  72.   GUI_Delay(SPEED);
  73.   LISTBOX_SetFont(hListBox, &GUI_Font16B_1);
  74.   GUI_Delay(SPEED * 0.75);

  75.   /* 递增选择 */
  76.   GUI_DispStringAtCEOL("LISTBOX_DecSel", 5, 55);
  77.   GUI_Delay(SPEED);
  78.   for (i = 0; i < NumEntries - 1; i++) {
  79.     LISTBOX_DecSel(hListBox);
  80.     GUI_Delay(SPEED / 6);
  81. }
  82.   GUI_Delay(SPEED / 4);

  83.   /* 更改滚动条的属性 */
  84.   GUI_DispStringAtCEOL("Change scrollbar width", 5, 55);
  85.   GUI_Delay(SPEED * 0.7);
  86.   {
  87. /* 得到滚动条的句柄 从而去修改滚动条的属性 */
  88.     SCROLLBAR_Handle hScrollH = WM_GetDialogItem(hListBox, GUI_ID_HSCROLL);
  89.     SCROLLBAR_Handle hScrollV = WM_GetDialogItem(hListBox, GUI_ID_VSCROLL);
  90.     SCROLLBAR_SetWidth(hScrollV, 14);
  91.     GUI_Delay(SPEED / 4);
  92.     SCROLLBAR_SetWidth(hScrollH, 14);
  93.     GUI_Delay(SPEED * 0.6);
  94.   }


  95.   /* 设置列表框的大小 */
  96.   GUI_DispStringAtCEOL("Change size of listbox", 5, 55);
  97.   GUI_Delay(SPEED * 0.75);
  98.   WM_ResizeWindow(hListBox, -15, 0);
  99.   GUI_Delay(SPEED / 4);
  100.   WM_ResizeWindow(hListBox, 0, -15);
  101.   GUI_Delay(SPEED / 4);
  102.   WM_ResizeWindow(hListBox, 15, 0);
  103.   GUI_Delay(SPEED / 4);
  104.   WM_ResizeWindow(hListBox, 0, 15);
  105.   GUI_Delay(SPEED / 2);


  106.   /* 设置相应的项目禁能 注意0是第一个项目 */
  107.   GUI_DispStringAtCEOL("LISTBOX_SetItemDisabled", 5, 55);
  108.   GUI_Delay(SPEED);
  109.   LISTBOX_SetItemDisabled(hListBox, 4, 1);
  110.   GUI_Delay(SPEED * 0.75);


  111.   /* 设置使能多个项目的选择 */
  112.   GUI_DispStringAtCEOL("LISTBOX_SetMulti", 5, 55);
  113.   GUI_Delay(SPEED);
  114.   LISTBOX_SetMulti(hListBox, 1);
  115.   GUI_Delay(SPEED * 0.75);

  116.   /* 选择项目 */
  117.   GUI_DispStringAtCEOL("LISTBOX_SetItemSel", 5, 55);
  118.   GUI_Delay(SPEED);
  119.   LISTBOX_SetItemSel(hListBox, 0, 1);
  120.   GUI_Delay(SPEED / 4);
  121.   LISTBOX_SetItemSel(hListBox, 1, 1);
  122.   GUI_Delay(SPEED / 4);
  123.   LISTBOX_SetItemSel(hListBox, 2, 1);
  124.   GUI_Delay(SPEED * 0.8);

  125.   /* 删除列表框 */
  126.   GUI_DispStringAtCEOL("LISTBOX_Delete", 5, 55);
  127.   GUI_Delay(SPEED * 1.1);
  128.   LISTBOX_Delete(hListBox);
  129.   GUI_Delay(SPEED * 0.75);
  130. }

  131. /*******************************************************************
  132. *
  133. *       _DemoListBox
  134. */
  135. static void _DemoListBox(void) {
  136.   LISTBOX_Handle hListBox;

  137.   /* 显示标题 */
  138.   GUI_SetBkColor(0xB00000);
  139.   GUI_SetColor(0xFFFFFF);
  140.   GUI_SetFont(&GUI_Font24_ASCII);
  141.   GUI_DispStringHCenterAt("Listbox - Sample", 160, 5);
  142.   GUI_Delay(SPEED / 2);

  143.   /* 创建列表框 */
  144.   GUI_SetFont(&GUI_Font8x16);
  145.   GUI_SetTextAlign(GUI_TA_LEFT);
  146.   GUI_DispStringAtCEOL("using", 5, 40);
  147.   GUI_DispStringAtCEOL("LISTBOX_Create", 5, 55);
  148.   GUI_Delay(SPEED * 0.9);
  149.   hListBox = LISTBOX_Create(_ListBox, 100, 80, 120, 115, WM_CF_SHOW);
  150.   GUI_Delay(SPEED * 0.75);

  151.   /* 功能演示 */
  152.   _ShowSeveralFunctions(hListBox);
  153.   /* Clear display */
  154.   GUI_Clear();
  155.   GUI_Delay(SPEED * 1.5);
  156. }

  157. /*******************************************************************
  158. *
  159. *       _DemoListBoxAsChild
  160. */
  161. static void _DemoListBoxAsChild(void) {
  162.   FRAMEWIN_Handle hFrame;
  163.   LISTBOX_Handle hListBox;

  164.   /* 显示标题 */
  165.   GUI_SetBkColor(0xB00000);
  166.   GUI_SetColor(0xFFFFFF);
  167.   GUI_SetFont(&GUI_Font24_ASCII);
  168.   GUI_DispStringHCenterAt("Listbox as child - Sample", 160, 5);
  169.   GUI_Delay(SPEED / 2);

  170.   /* 创建窗口框架 */
  171.   GUI_SetFont(&GUI_Font8x16);
  172.   GUI_SetTextAlign(GUI_TA_LEFT);
  173.   GUI_DispStringAtCEOL("using", 5, 40);
  174.   GUI_DispStringAtCEOL("FRAMEWIN_Create", 5, 55);
  175.   GUI_Delay(SPEED);
  176.   hFrame = FRAMEWIN_Create("List box", NULL, WM_CF_SHOW, 100, 80, 120, 140);
  177.   FRAMEWIN_SetFont(hFrame, &GUI_Font16B_ASCII);
  178.   FRAMEWIN_SetActive(hFrame, 1);
  179.   GUI_Delay(SPEED * 0.75);


  180.   /* 创建列表框 */
  181.   GUI_DispStringAtCEOL("LISTBOX_CreateAsChild", 5, 55);
  182.   GUI_Delay(SPEED);
  183.   /* 其实坐标0,0,水平和垂直的大小如果设置为0的话,那么将默认为父窗口的用户区大小 */
  184.   hListBox = LISTBOX_CreateAsChild(_ListBox, WM_GetClientWindow(hFrame), 0, 0, 0, 0, WM_CF_SHOW);
  185.   GUI_Delay(SPEED * 0.75);

  186.   _ShowSeveralFunctions(hListBox);

  187.   /* 删除框架窗口*/
  188.   GUI_DispStringAtCEOL("FRAMEWIN_Delete", 5, 55);
  189.   GUI_Delay(SPEED);
  190.   FRAMEWIN_Delete(hFrame);
  191.   GUI_Delay(SPEED * 0.75);

  192.   /* 清除显示 */
  193.   GUI_Clear();
  194.   GUI_Delay(SPEED * 1.5);
  195. }

  196. /*******************************************************************
  197. *
  198. *       MainTask
  199. *
  200. *       Demonstrates LISTBOX widget
  201. *
  202. ********************************************************************
  203. */

  204. void MainTask(void) {
  205.   GUI_Init();
  206.   WM_SetDesktopColor(0xB00000);
  207.   GUI_Exec();
  208.   while(1) {
  209.     _DemoListBox();
  210.     _DemoListBoxAsChild();
  211.   }
  212. }
复制代码
这个例子的实际现象效果如下:
47.3.png
47.3 对话框上使用列表框控件
    用uCGUIBulder4.0建立如下界面(分辨率480*272):
47.4.png
    为列表框添加成员的方法如下:
47.5.png
    将生成的代码直接复制到模拟器或者开发板上面运行,实际显示效果如下(生成的代码在本期教程配套的例子中):
47.6.png
47.4 总结
     本期教程主要是跟大家讲解了列表框控件的使用,希望大家可以把本期教程中讲的这两个例子跑跑,然后自己设计一个相关的例子进行试验学习。教程中只是使用了部分的列表框控件API,其它的API大家都可以试试。

收藏 评论2 发布时间:2015-3-6 11:32

举报

2个回答
zfz0122 回答时间:2015-3-6 12:52:45
谢谢分享 1.png
wambob 回答时间:2015-3-6 12:59:27
谢谢分享

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版