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

2021-10-09 15:04:06 浏览数 (1)

教程不断更新中: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提示功能,源代码如下(可以将其直接复制到开发板或者模拟器上面运行)。

代码语言:javascript复制
#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功能,如果没有外接鼠标的时候,这个功能的意义就不大了。

0 人点赞