第3版emWin教程第46章 emWin6.x窗口管理器之ToolTip的使用

Posted Simon223

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第3版emWin教程第46章 emWin6.x窗口管理器之ToolTip的使用相关的知识,希望对你有一定的参考价值。

教程不断更新中:第3版emWin教程和ThreadX GUIX教程开工,双管齐下,GUIX更新至第28章,emWin更新至第48章(2021-09-13) - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz!http://www.armbbs.cn/forum.php?mod=viewthread&tid=98429

第46章       emWin6.x窗口管理器之ToolTip的使用

本章节为大家讲解emWin自带的ToolTip使用方法,对于外接鼠标设备的时候,这个控件就比较的有用,如果是用触摸进行操作的话,这个控件就用不上了,但作为emWin的知识点也跟大家进行简单的讲解,知道有这么个控件即可。

目录

46.1 初学者重要提示

46.2 ToolTips介绍

46.3 ToolTips实例

46.4 总结


46.1 初学者重要提示

1、  本章节作为一个介绍性的知识跟大家进行讲解,以后的项目中用到的机会很小。

2、  窗口管理器这块的API函数应该是emWin手册所有章节中函数最多的,ToolTip的API函数也属于这部分。下图是中文版手册里面API函数位置:

 

下图是英文版手册里面API函数的位置:

 

46.2 ToolTips介绍

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

 

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

 

关于这几个函数的就不给大家依次做介绍了,我们直接通过实例来看如何操作这些函数。

46.3 ToolTips实例

这个Demo主要是实现为对话框上面的两个按钮控件和一个文本控件都添加了ToolTip提示功能,源代码如下(可以将其直接复制到开发板或者模拟器上面运行)。

#include "DIALOG.h"



/*
*********************************************************************************************************
*	                          变量
*********************************************************************************************************
*/
static const TOOLTIP_INFO _aInfo[] = //--------------(1)
{
	{ GUI_ID_BUTTON0, "I am Button 0"},
	{ GUI_ID_BUTTON1, "I am Button 1" },
	{ GUI_ID_TEXT0, "I am TEXT 0" },
};

/*
*********************************************************************************************************
*	                       GUI_WIDGET_CREATE_INFO类型数组
*********************************************************************************************************
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
    { FRAMEWIN_CreateIndirect,  "armfly",   0,               0,  0,  320,240,0,0},
	{ TEXT_CreateIndirect,      "ARM",     GUI_ID_TEXT0,    30,30,300,25, 0,0},
	{ BUTTON_CreateIndirect,    "BUTTON0",  GUI_ID_BUTTON0,  30, 70,120,40, 0,0},
    { BUTTON_CreateIndirect,    "BUTTON1",  GUI_ID_BUTTON1,  30,125,120,40, 0,0},

};

/*
*********************************************************************************************************
*	函 数 名: _cbCallback
*	功能说明: 对话框回调函数		
*	形    参: pMsg  回调参数 
*	返 回 值: 无
*********************************************************************************************************
*/
static void _cbCallback(WM_MESSAGE * pMsg) 
{
    int NCode, Id;
    WM_HWIN hWin = pMsg->hWin;

    switch (pMsg->MsgId) 
    {
        case WM_INIT_DIALOG:

			//
			//初始化框架窗口
			//
			FRAMEWIN_SetFont(hWin,&GUI_Font24B_ASCII);
			FRAMEWIN_SetTextAlign(hWin,GUI_TA_VCENTER|GUI_TA_CENTER);
			FRAMEWIN_SetTitleHeight(hWin,30);

			//
			//初始化文本控件
			//
			TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT0), &GUI_Font24B_ASCII);
            break;
			
        case WM_KEY:
            switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key) 
            {
                case GUI_KEY_ESCAPE:
                    GUI_EndDialog(hWin, 1);
                    break;
                case GUI_KEY_ENTER:
                    GUI_EndDialog(hWin, 0);
                    break;
            }
            break;
			
        case WM_NOTIFY_PARENT:
            Id = WM_GetId(pMsg->hWinSrc); 
            NCode = pMsg->Data.v;        
            switch (Id) 
            {
                case GUI_ID_OK:
                    if(NCode==WM_NOTIFICATION_RELEASED)
                        GUI_EndDialog(hWin, 0);
                    break;
                case GUI_ID_CANCEL:
                    if(NCode==WM_NOTIFICATION_RELEASED)
                        GUI_EndDialog(hWin, 0);
                    break;
            }
            break;
			
        default:
            WM_DefaultProc(pMsg);
    }
}

/*
*********************************************************************************************************
*	函 数 名: MainTask
*	功能说明: GUI主函数
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
void MainTask(void) 
{
    WM_HWIN hDlg;
	WM_TOOLTIP_HANDLE hInfo;

	
	/* 初始emWin */
	GUI_Init();
	
	/* 窗口使能使用内存设备,防止闪烁 */
	WM_SetCreateFlags(WM_CF_MEMDEV);  

    /* 创建一个对话框 */
    hDlg = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);

	/* 给对话框上的文件控件和两个按钮控件都添加ToolTip */
	hInfo = WM_TOOLTIP_Create(hDlg, _aInfo, GUI_COUNTOF(_aInfo)); //--------------(2)

	while (1)
	{
		GUI_Delay(10);
	}
}

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

TOOLTIP_INFO类型结构体的定义如下:

 

2、创建一个属于hDlg对话框的ToolTip,

控件ID为GUI_ID_BUTTON0的按钮显示的文本是"I am Button 0"。

控件ID为GUI_ID_BUTTON1的按钮显示的文本是"I am Button 1"。

控件ID为GUI_ID_TEXT0的按钮显示的文本是"I am TEXT 0"。

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

 

46.4 总结

本章节简单的为大家介绍了ToolTip功能,对于初学者来说,知道有这么个功能即可。一般情况下,在外接鼠标的时,才能有效的利用ToolTip功能,如果没有外接鼠标的时候,这个功能的意义就不大了。

以上是关于第3版emWin教程第46章 emWin6.x窗口管理器之ToolTip的使用的主要内容,如果未能解决你的问题,请参考以下文章

第3版emWin教程第41章 emWin6.x窗口管理器基础知识(重要)

第3版emWin教程第43章 emWin6.x窗口管理器实例(含自定义消息)

第3版emWin教程第42章 emWin6.x窗口管理器之回调消息类型

第3版emWin教程第45章 emWin6.x窗口管理器之定时器使用

第3版emWin教程第36章 emWin6.x光标

第3版emWin教程第37章 emWin6.x抗锯齿