zoukankan      html  css  js  c++  java
  • 【第3版emWin教程】第46章 emWin6.x窗口管理器之ToolTip的使用

    教程不断更新中: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功能,如果没有外接鼠标的时候,这个功能的意义就不大了。

    微信公众号:armfly_com 安富莱论坛:www.armbbs.cn 安富莱淘宝:https://armfly.taobao.com
  • 相关阅读:
    C# @符号的多种使用方法
    C#抽象工厂简单实现类
    项目总结——谈谈封装(抽象工厂+反射+缓存机制)
    C#中String类的几个方法(IndexOf、LastIndexOf、Substring)
    String str 与 String str=new String("") 区别
    sql面试题
    [bzoj2038]莫队算法学习
    分治算法初步
    线段树训练
    [poj2104]可持久化线段树入门题(主席树)
  • 原文地址:https://www.cnblogs.com/armfly/p/15347821.html
Copyright © 2011-2022 走看看