VC编程之Tooltip工具提示控件的使用
小标 2018-07-13 来源 : 阅读 1262 评论 0

摘要:本文主要向大家介绍了VC编程之Tooltip工具提示控件的使用,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。

本文主要向大家介绍了VC编程之Tooltip工具提示控件的使用,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。

如何为一个控件创建一个工具提示控件How to Create a Tooltip for a Control
1.创建一个基于对话框的工程TestToolTip;

2.在对话框实现文件写入以下代码:

/*----------------------------------------------------------------------------- 
 Description: 创建控件的Tooltip 
-----------------------------------------------------------------------------*/ 
HWND CreateToolTip(int toolID, HWND hDlg, PTSTR pszText) 

    if (!toolID || !hDlg || !pszText) 
    { 
        return FALSE; 
    } 
    HWND hwndTool = GetDlgItem(hDlg, toolID); 
 
    HWND hwndTip = CreateWindowEx(NULL, 
                                  TOOLTIPS_CLASS, 
                                  NULL, 
                                  WS_POPUP | TTS_ALWAYSTIP | TTS_BALLOON, 
                                  CW_USEDEFAULT, 
                                  CW_USEDEFAULT, 
                                  CW_USEDEFAULT, 
                                  CW_USEDEFAULT, 
                                  hDlg, 
                                  NULL, 
                                  AfxGetInstanceHandle(), 
                                  NULL); 
 
    if (!hwndTool || !hwndTip) 
    { 
        return (HWND)NULL; 
    } 
 
    TOOLINFO toolInfo = {0}; 
    toolInfo.cbSize = sizeof(TOOLINFO); 
    toolInfo.hwnd = hDlg; 
    toolInfo.uFlags = TTF_IDISHWND | TTF_SUBCLASS; 
    toolInfo.uId = (UINT_PTR)hwndTool; 
    toolInfo.lpszText = pszText; 
    SendMessage(hwndTip, TTM_ADDTOOL, 0, (LPARAM)&toolInfo); 
 
    return hwndTip; 

   


3.在对话框OnInitDialog()函数添加代码:

   

    CreateToolTip(IDOK, m_hWnd, _T("这是按钮的ToolTip语句")); 

   


4.编译运行,鼠标移到对话框按钮上,暂停鼠标移动,截图如下:

如何创建一个矩形区域的工具提示控件 How to Create a Tooltip for a Rectangular Area

1.创建一个基于对话框的工程TestToolTip;
2.在对话框实现文件写入以下代码:

   

/*----------------------------------------------------------------------------- 
 Description: 创建矩形区域ToolTip 
-----------------------------------------------------------------------------*/ 
void CreateToolTipForRect(HWND hwndParent) 

    HWND hwndTT = CreateWindowEx(WS_EX_TOPMOST, 
                                 TOOLTIPS_CLASS, 
                                 NULL, 
                                 WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP, 
                                 CW_USEDEFAULT, 
                                 CW_USEDEFAULT, 
                                 CW_USEDEFAULT, 
                                 CW_USEDEFAULT, 
                                 hwndParent, 
                                 NULL, 
                                 AfxGetInstanceHandle(), 
                                 NULL); 
 
    SetWindowPos(hwndTT, 
                 HWND_TOPMOST, 
                 0, 0, 0, 0, 
                 SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); 
 
    TOOLINFO ti = {0}; 
    ti.cbSize = sizeof(TOOLINFO); 
    ti.uFlags = TTF_SUBCLASS; 
    ti.hwnd = hwndParent; 
    ti.hinst = AfxGetInstanceHandle(); 
    ti.lpszText = _T("这是你的ToolTip语句"); 
 
    GetClientRect(hwndParent, &ti.rect); 
 
    SendMessage(hwndTT, TTM_ADDTOOL, 0, (LPARAM)(LPTOOLINFO)&ti); 

   


代码中,第9行的设置WS_POPUP风格,当CreateWindowEx一个Tooltip时,总是具有WS_POPUP和WS_EX_TOOLWINDOW风格,不管在创建的时候你是否指定。TTS_NOPREFIX指示当光标在一个工具上时显示工具提示,不管工具提示的属主窗口是否是处于活动状态。没有这个风格,则只有当工具的属主窗口是活动的时候才会显示工具提示控件,否则不显示。TTS_ALWAYSTIP这个风格禁止系统将&字符从一个字符串中去掉。如果一个工具提示控件没有TTS_NOPREFIX风格,则系统自动去掉&字符,让应用程序用同一个字符串作为菜单项和工具提示控件中的文本。
3.在对话框OnInitDialog()函数添加代码:

    CreateToolTipForRect(m_hWnd);    //对话框提示 
    CreateToolTipForRect(GetDlgItem(IDOK)->m_hWnd);    //“确定”按钮提示 

   


4.编译运行,鼠标移到对话框上,暂停鼠标移动,截图如下:

 

如何实现跟踪工具提示控件 How to Implement Tracking Tooltips
1.创建一个基于对话框的工程TestToolTip;
2.在对话框实现文件写入以下代码:

   

HWND CreateTrackingToolTip(int toolID, HWND hDlg, WCHAR *pText) 

    HWND hwndTT = CreateWindowEx(WS_EX_TOPMOST, 
                                 TOOLTIPS_CLASS, 
                                 NULL, 
                                 WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP, 
                                 CW_USEDEFAULT, 
                                 CW_USEDEFAULT, 
                                 CW_USEDEFAULT, 
                                 CW_USEDEFAULT, 
                                 hDlg, 
                                 NULL, 
                                 AfxGetInstanceHandle(), 
                                 NULL); 
 
    if (!hwndTT) 
    { 
        return NULL; 
    } 
 
    g_toolItem.cbSize = sizeof(TOOLINFO); 
    g_toolItem.uFlags = TTF_IDISHWND | TTF_TRACK | TTF_ABSOLUTE; 
    g_toolItem.hwnd = hDlg; 
    g_toolItem.hinst = AfxGetInstanceHandle(); 
    g_toolItem.lpszText = pText; 
    g_toolItem.uId = (UINT_PTR)hDlg; 
 
    GetClientRect(hDlg, &g_toolItem.rect); 
 
    SendMessage(hwndTT, TTM_ADDTOOL, 0, (LPARAM)(LPTOOLINFO)&g_toolItem); 
 
    return hwndTT; 

   


3.在对话框OnInitDialog()函数添加代码:


1

   

    g_hwndTrackingTT = CreateTrackingToolTip(IDOK, m_hWnd, _T("ToolTip")); 

   


4.添加对话框的WM_MOUSELEAVE事件,代码如下:

   

/*----------------------------------------------------------------------------- 
 Description: 鼠标移出窗口,停用ToolTip 
-----------------------------------------------------------------------------*/ 
void CTestToolTipDlg::OnMouseLeave() 

    ::SendMessage(g_hwndTrackingTT, TTM_TRACKACTIVATE, (WPARAM)FALSE, (LPARAM)&g_toolItem); 
    g_TrackingMouse = FALSE; 
    CDialog::OnMouseLeave(); 

   


5.添加对话框的WM_MOUSEMOVE事件,代码如下:

   

/*----------------------------------------------------------------------------- 
 Description: 鼠标移动,ToolTip更新信息 
-----------------------------------------------------------------------------*/ 
void CTestToolTipDlg::OnMouseMove(UINT nFlags, CPoint point) 

    static int oldX, oldY; 
    int newX, newY; 
 
    if (!g_TrackingMouse) 
    { 
        TRACKMOUSEEVENT tme = {sizeof(TRACKMOUSEEVENT)}; 
        tme.hwndTrack = m_hWnd; 
        tme.dwFlags = TME_LEAVE; 
 
        TrackMouseEvent(&tme); 
 
        ::SendMessage(g_hwndTrackingTT, TTM_TRACKACTIVATE, (WPARAM)TRUE, (LPARAM)&g_toolItem); 
 
        g_TrackingMouse = TRUE; 
    } 
 
    newX = point.x; 
    newY = point.y; 
 
    if ((newX != oldX) || (newY != oldY)) 
    { 
        oldX = newX; 
        oldY = newY; 
 
        WCHAR coords[12]; 
        swprintf_s(coords, ARRAYSIZE(coords), _T("%d, %d"), newX, newY); 
 
        g_toolItem.lpszText = coords; 
        ::SendMessage(g_hwndTrackingTT, TTM_SETTOOLINFO, 0, (LPARAM)&g_toolItem); 
 
        POINT pt = {newX, newY}; 
        ::ClientToScreen(m_hWnd, &pt); 
        ::SendMessage(g_hwndTrackingTT, TTM_TRACKPOSITION, 0, (LPARAM)MAKELONG(pt.x + 10, pt.y - 20)); 
    } 
    CDialog::OnMouseMove(nFlags, point); 

    

 

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言VC/MFC频道!


本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程