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

【安富莱STemWin教程】第37章 窗口管理器之ToolTip使用

[复制链接]
baiyongbin2009 发布时间:2015-2-27 11:46
特别说明:完整STemWin的1-60期教程和配套实例下载地址:链接
第37章 窗口管理器之ToolTip使用

    本期教程跟大家讲一下STemWin自带的tooltip使用方法,对于外接鼠标设备的时候,这个控件就比较的有用。如果是用触摸进行操作的话,这个控件就用不上了。
    37. 1 ToolTips介绍
    37. 2 ToolTips实例
    37. 3 总结
37.1 ToolTips介绍
     关于ToolTips,大家应该比较的熟悉,只是不知道它专业的名字。下面这个就是ToolTips:
37.1.png
    现在STemWin5.22版本支持的API如下:
37.2.png
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.png
37.3 总结
    在外接鼠标的时候,才能有效的利用TOOLTIP控件。如果没有外接鼠标的时候,这个控件的意义就不大了。

收藏 评论3 发布时间:2015-2-27 11:46

举报

3个回答
lkl0305 回答时间:2015-2-27 15:16:59
多谢分享
大器所成 回答时间:2015-2-27 16:31:12
留下脚印,感谢分享
dsjsjf 回答时间:2015-3-1 16:06:10
     

所属标签

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 手机版