微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 第37章 窗口管理器之ToolTip使用

第37章 窗口管理器之ToolTip使用

时间:10-02 整理:3721RD 点击:
第37章 窗口管理器之ToolTip使用

    本期教程跟大家讲一下STemWin自带的tooltip使用方法,对于外接鼠标设备的时候,这个控件就比较的有用。如果是用触摸进行操作的话,这个控件就用不上了。

    37. 1 ToolTips介绍

    37. 2 ToolTips实例

    37. 3 总结

37.1 ToolTips介绍

    关于ToolTips,大家应该比较的熟悉,只是不知道它专业的名字。下面这个就是ToolTips:



现在STemWin5.22版本支持的API如下:



37.2 ToolTips实例

    下面通过一个实例跟大家讲解一下ToolTips的使用,这个例子可以直接复制到模拟器或者开发板上面运行。

  1. #include <stddef.h>
  2. #include "stdio.h"
  3. #include "GUI.h"
  4. #include "DIALOG.h"

  5. #include "WM.h"
  6. #include "BUTTON.h"
  7. #include "CHECKBOX.h"
  8. #include "DROPDOWN.h"
  9. #include "EDIT.h"
  10. #include "FRAMEWIN.h"
  11. #include "LISTBOX.h"
  12. #include "MULTIEDIT.h"
  13. #include "RADIO.h"
  14. #include "SLIDER.h"
  15. #include "TEXT.h"
  16. #include "PROGBAR.h"
  17. #include "SCROLLBAR.h"
  18. #include "LISTVIEW.h"

  19. static int Count;
  20. /*********************************************************************
  21. *
  22. *       Dialog resource
  23. *
  24. * This table conatins the info required to create the dialog.
  25. * It has been created by ucGUIbuilder.
  26. */

  27. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  28.     { FRAMEWIN_CreateIndirect,  "armfly",            0,                       0,  0,  800,480,FRAMEWIN_CF_MOVEABLE,0},
  29.     { BUTTON_CreateIndirect,    "BUTTON0",           GUI_ID_BUTTON0,          82, 122,162,37, 0,0},
  30.     { BUTTON_CreateIndirect,    "BUTTON1",           GUI_ID_BUTTON1,          357,123,152,35, 0,0},
  31. { TEXT_CreateIndirect,      "0000",              GUI_ID_TEXT0,            278,264,300,48, 0,0}
  32. };

  33. /*****************************************************************
  34. **      FunctionName:void PaintDialog(WM_MESSAGE * pMsg)
  35. **      Function: to initialize the Dialog items
  36. **                                                      
  37. **      call this function in _cbCallback --> WM_PAINT
  38. *****************************************************************/

  39. void PaintDialog(WM_MESSAGE * pMsg)
  40. {
  41.     WM_HWIN hWin = pMsg->hWin;

  42. }

  43. /*****************************************************************
  44. **      FunctionName:void InitDialog(WM_MESSAGE * pMsg)
  45. **      Function: to initialize the Dialog items
  46. **                                                      
  47. **      call this function in _cbCallback --> WM_INIT_DIALOG
  48. *****************************************************************/

  49. void InitDialog(WM_MESSAGE * pMsg)
  50. {
  51.     WM_HWIN hWin = pMsg->hWin;
  52.     //
  53.     //FRAMEWIN
  54.     //
  55.     FRAMEWIN_SetFont(hWin,&GUI_Font24B_ASCII);
  56.     FRAMEWIN_SetTextAlign(hWin,GUI_TA_VCENTER|GUI_TA_CENTER);
  57.     FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0);
  58.     FRAMEWIN_AddMaxButton(hWin, FRAMEWIN_BUTTON_RIGHT, 1);
  59.     FRAMEWIN_AddMinButton(hWin, FRAMEWIN_BUTTON_RIGHT, 2);
  60.     FRAMEWIN_SetTitleHeight(hWin,30);

  61. //
  62.     //GUI_ID_TEXT0
  63.     //
  64.     TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT0),&GUI_FontD36x48);

  65. }

  66. /*********************************************************************
  67. *
  68. *       Dialog callback routine
  69. */
  70. static void _cbCallback(WM_MESSAGE * pMsg)
  71. {
  72.     int NCode, Id;
  73. char buf[10];
  74.     WM_HWIN hWin = pMsg->hWin;

  75.     switch (pMsg->MsgId)
  76.     {
  77. case WM_TIMER:
  78.             Count++;
  79. sprintf(buf, "%04d", Count);
  80. TEXT_SetText(WM_GetDialogItem(hWin,GUI_ID_TEXT0), (const char *)buf);
  81. WM_RestartTimer(pMsg->Data.v, 100);
  82.             break;
  83. case WM_PAINT:
  84.             PaintDialog(pMsg);
  85.             break;
  86.         case WM_INIT_DIALOG:
  87.             InitDialog(pMsg);
  88.             break;
  89.         case WM_KEY:
  90.             switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
  91.             {
  92.                 case GUI_KEY_ESCAPE:
  93.                     GUI_EndDialog(hWin, 1);
  94.                     break;
  95.                 case GUI_KEY_ENTER:
  96.                     GUI_EndDialog(hWin, 0);
  97.                     break;
  98.             }
  99.             break;
  100.         case WM_NOTIFY_PARENT:
  101.             Id = WM_GetId(pMsg->hWinSrc);
  102.             NCode = pMsg->Data.v;        
  103.             switch (Id)
  104.             {
  105.                 case GUI_ID_OK:
  106.                     if(NCode==WM_NOTIFICATION_RELEASED)
  107.                         GUI_EndDialog(hWin, 0);
  108.                     break;
  109.                 case GUI_ID_CANCEL:
  110.                     if(NCode==WM_NOTIFICATION_RELEASED)
  111.                         GUI_EndDialog(hWin, 0);
  112.                     break;
  113.                 case GUI_ID_BUTTON0:
  114.                     switch(NCode)
  115.                     {
  116.                         case WM_NOTIFICATION_CLICKED:
  117.                             break;
  118.                         case WM_NOTIFICATION_RELEASED:

  119.                             break;
  120.                         case WM_NOTIFICATION_MOVED_OUT:

  121.                             break;
  122.                     }
  123.                     break;
  124.                 case GUI_ID_BUTTON1:
  125.                     switch(NCode)
  126.                     {
  127.                         case WM_NOTIFICATION_CLICKED:

  128.                             break;
  129.                         case WM_NOTIFICATION_RELEASED:

  130.                             break;
  131.                         case WM_NOTIFICATION_MOVED_OUT:

  132.                             break;
  133.                     }
  134.                     break;

  135.             }
  136.             break;
  137.         default:
  138.             WM_DefaultProc(pMsg);
  139.     }
  140. }

  141. static const TOOLTIP_INFO _aInfo[] = {(1)
  142. { GUI_ID_BUTTON0, "I am Button 0"},
  143. { GUI_ID_BUTTON1, "I am Button 1" },
  144. { GUI_ID_TEXT0, "I am TEXT 0" },
  145. };

  146. /*********************************************************************
  147. *
  148. *       MainTask
  149. *
  150. **********************************************************************
  151. */
  152. void MainTask(void)
  153. {
  154.     WM_HWIN hDlg;
  155. WM_HTIMER hTimer;
  156. WM_TOOLTIP_HANDLE hInfo;
  157. WM_TOOLTIP_HANDLE hToolTip;
  158. Count = 0;
  159. /*
  160.    使能窗口使用内存设备,这样可以有效避免闪烁 放在GUI_Init前面就包括桌面
  161.    窗口,如果放在后面就不包括桌面窗口。
  162. */
  163. WM_SetCreateFlags(WM_CF_MEMDEV);  
  164. GUI_Init();
  165. WM_SetDesktopColor(GUI_BLUE);      /* Automacally update desktop window */
  166. PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
  167. FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);
  168. PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
  169. BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);
  170. CHECKBOX_SetDefaultSkin(CHECKBOX_SKIN_FLEX);
  171. DROPDOWN_SetDefaultSkin(DROPDOWN_SKIN_FLEX);
  172. SCROLLBAR_SetDefaultSkin(SCROLLBAR_SKIN_FLEX);
  173. SLIDER_SetDefaultSkin(SLIDER_SKIN_FLEX);
  174. HEADER_SetDefaultSkin(HEADER_SKIN_FLEX);
  175. RADIO_SetDefaultSkin(RADIO_SKIN_FLEX);
  176. /* 创建一个对话框 */
  177.     hDlg = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);
  178. hTimer = WM_CreateTimer(WM_GetClientWindow(hDlg), 0, 100, 0);

  179. hInfo = WM_TOOLTIP_Create(hDlg, _aInfo, GUI_COUNTOF(_aInfo));(2)
  180. hToolTip = WM_TOOLTIP_Create(hDlg, NULL, 0);(3)
  181. WM_TOOLTIP_AddTool(hToolTip, WM_GetClientWindow(hDlg), "I am a ToolTip");(4)
  182. while (1)
  183. {
  184. GUI_Delay(500);
  185. }
  186. }

复制代码

1. 创建一个TOOLTIP_INFO类型的数组。用于给两个按钮和一个文本框使用。

2. 创建一个属于hDlg对话框的TOOLTIP。用于给两个按钮和一个文本框提供提示。

3. 再创建一个TOOLTIP。

4. 这句比较的关键,这里是给对话框中的window控件添加TOOLTIP功能。

实际现象效果如下,这个是鼠标放到按钮上面时的提示效果:



37.3  总结

    在外接鼠标的时候,才能有效的利用TOOLTIP控件。如果没有外接鼠标的时候,这个控件的意义就不大了。


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top