硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5027|回复: 2
收起左侧

[emWin教程入门篇] 【STemWin教程】第37章 窗口管理器之ToolTip使用

[复制链接]

740

主题

1326

回帖

3546

积分

管理员

春暖花开

Rank: 9Rank: 9Rank: 9

积分
3546
QQ
发表于 2015-2-15 19:54:44 | 显示全部楼层 |阅读模式
特别说明:完整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控件。如果没有外接鼠标的时候,这个控件的意义就不大了。
努力打造安富莱高质量微信公众号:点击扫描图片关注
回复

使用道具 举报

2

主题

18

回帖

24

积分

新手上路

积分
24
发表于 2016-4-1 17:15:08 | 显示全部楼层
能不能实现初次进入界面   如果在设定时间内没有任何动作  就自动显示Tip 告诉操作者每个控件意义
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2016-4-2 09:28:53 | 显示全部楼层

回 careyou1984 的帖子

careyou1984:能不能实现初次进入界面   如果在设定时间内没有任何动作  就自动显示Tip 告诉操作者每个控件意义 (2016-04-01 17:15) 
TIP控件在使用外置鼠标的时候比较好用。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-17 05:50 , Processed in 0.063227 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表