1、在基于对话框的MFC应用程序中使用Tooltip,首先在Dlg类的头文件中定义一个变量:  

     CToolTipCtrl m_iToolTips;

    2、在Dlg类的OnInitDialog中添加代码:   

       EnableToolTips(TRUE);
   m_iToolTips.Create(this);
   m_iToolTips.Activate(TRUE);
  m_iToolTips.SetDelayTime();
  m_iToolTips.AddTool(GetDlgItem(IDC_BTN_SELECT), _T("选择ocx/dll控件"));
  m_iToolTips.AddTool(GetDlgItem(IDC_EDIT_OCX_PATH), _T("ocx/dll控件路径"));
   m_iToolTips.AddTool(GetDlgItem(IDC_BTN_REGISTER), _T("注册"));
  m_iToolTips.AddTool(GetDlgItem(IDC_BTN_UNREGISTER), _T("反注册"));
  m_iToolTips.AddTool(GetDlgItem(IDC_BTN_ISREGISTED), _T("是否注册"));
  m_iToolTips.SetTipBkColor(RGB(,,));   //背景色为白色
  m_iToolTips.SetTipTextColor(RGB(,,)); //字体颜色为黑色

    3、重载PreTranslateMessage函数

     BOOL CControlRegisterDlg::PreTranslateMessage( MSG* pMsg )
     {
    switch(pMsg->message)
    {
    case WM_MOUSEMOVE:
    m_iToolTips.RelayEvent(pMsg);
    break;
    default:
    break;
    }
    return CDialog::PreTranslateMessage(pMsg);
     }

    4、编译运行

    

    ToolTip是Win32中一个通用控件,MFC中为其生成了一个类CToolTipCtrl。

   CToolTipCtrl是用来显示单行文本的弹出框,可以给继承自CFrameWnd(提供了一个缺省的TTN_NEEDTEXT消息处理函数)的Windows控件添加一些提示信息。要使用它,包含3个步骤:

    • Enabling Tool Tips
    • Handling TTN_NEEDTEXT Notification for Tool Tips
    • The TOOLTIPTEXT Structure

   也就是说:

   第一步需要先打开这个功能(Tool Tips)。EnableToolTips

   第二步需要处理TTN_NEEDTEXT消息,并不是必须的。

   第三步是利用TOOLTIPTEXT结构体提供的信息,设置提示内容。AddTool

   CToolTipCtrl控件提供的功能只限于文本显示相关操作,对于复杂的ToolTip功能该控件可能满足不了要求,所以需要自定义ToolTips控件。  

   相关实现可参考:https://www.codeproject.com/Articles/18382/Custom-ToolTips-for-MFC-Projects

  补充:上述基本使用对于模态对话框正常,但是对于非模态对话框,PreTranslateMessage函数并没有被调用,那么非模态对话框如何响应PreTranslateMessage函数呢?使用钩子函数来实现:

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
 
class CMyApp : public CWinApp
{
public:
    BOOL InitInstance();
    int ExitInstance();

static LRESULT CALLBACK GetMessageProc(int nCode, WPARAM wParam, LPARAM lParam);

    HHOOK  m_hHook;

};

LRESULT CALLBACK CMyApp::GetMessageProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    LPMSG lpMsg = (LPMSG)lParam;

if(AfxGetApp()->PreTranslateMessage(lpMsg))
    {
        lpMsg->message = WM_NULL;
        lpMsg->lParam = 0L;
        lpMsg->wParam = ;
    }

// Passes the hook information to the next hook procedure in the current hook chain.
    return ::CallNextHookEx(theApp.m_hHook, nCode, wParam, lParam);
}

BOOL CMyApp::InitInstance()
{
    BOOL bInit = CWinApp::InitInstance();
    if (bInit)
    {
        m_hHook = ::SetWindowsHookEx(WH_GETMESSAGE,
                                     GetMessageProc,
                                     AfxGetInstanceHandle(),
                                     GetCurrentThreadId());

ASSERT(m_hHook);
    }

return bInit;
}

int CMyApp::ExitInstance()
{
    UnhookWindowsHookEx(m_hHook);
    return CWinApp::ExitInstance();
}

VC++ ToolTip的简单使用的更多相关文章

  1. 用VC调用EXCEL简单代码(转载自越长大越孤单,觉得很好)

    首先在stdafx.h里加入对IDispatch接口提供支持的头文件: #include <afxDisp.h> 再在应用程序类的InitInstance()函数里加入: AfxOleIn ...

  2. VC++ CArchive及简单的文件操作方法

    CArchive 方法用于存取文件 我向你推荐的是使用CArchive,它的使用方法简单且功能十分强大.首先还是用CFile声明一个对象,然后用这个对象的指针做参数声明一个CArchive对象,你就可 ...

  3. VC++ :实现简单的文件拖放(Drag and Drop)功能

    1) VC++ 6.0 新建一个基于对话框的MFC的工程,取名MfcDropFiles: 2) 去除默认的控件,包括确定/取消按钮,以及一个静态文本: 3) 在对话框空白区域拖放一个ListBox控件 ...

  4. C#Winform中ToolTip的简单用法,

    ToolTip它能够为我们的软件提供非常漂亮的提示信息,提高软件的可用性,给用户比较好的体验. 使用,在窗体加载时加载以下代码: var toolTip1 = new ToolTip(); toolT ...

  5. vc++实例创建简单窗体

    #include<windows.h>#include<stdio.h>LRESULT CALLBACK WinSunProc(HWND hwnd,UINT uMsg,WPAR ...

  6. vc++栈的简单实现

    栈的数据类型是先进后出 #ifndef __MYSTACK__ #define __MYSTACK__ #include <Windows.h> typedef struct Node { ...

  7. vc常用类总结(转载)

    常用类 CRect:用来表示矩形的类,拥有四个成员变量:top left bottom right.分别表是左上角和右下角的坐标.可以通过以下的方法构造: CRect( int l, int t, i ...

  8. libfacedetection简单使用记录

    目录 1.源码下载 2.编译 2.1.linux 2.2.Windows MINGW64 2.3.VS2017 NMake编译 3.简单测试程序 3.1.测试截图 3.2.测试代码如下 1.源码下载 ...

  9. 【UWP】仅在TextBlock文本溢出时显示Tooltip

    前言 这是我今天在回答SO问题时偶然遇到的,觉得可能还比较通用,就记录下来以供参考. 通常,我们使用ToolTip最简单的方式是这样: <TextBlock Text="Test&qu ...

随机推荐

  1. 使用 JavaScript 实现对 PDF 的全文索引

    Mozilla实验室最近已经收到了许多为一个项目做出的尝试,这一项目的野心令人印象深刻:在一个浏览器中仅仅使用Javascript来对PDF进行渲染.PDF文档的结构令人难以置信的复杂,因此要祝pdf ...

  2. spark结构化数据处理:Spark SQL、DataFrame和Dataset

    本文讲解Spark的结构化数据处理,主要包括:Spark SQL.DataFrame.Dataset以及Spark SQL服务等相关内容.本文主要讲解Spark 1.6.x的结构化数据处理相关东东,但 ...

  3. OCILIB开源的C/C++ Oracle驱动

    OCILIB是一个开源的.跨平台的Oracle驱动,可以高效的操作Oracle数据库. OCILIB库: - 提供丰富的.全特性的.容易使用的API - 运行在所有的Oracle平台 - 使用标准的I ...

  4. 一款基于TweenMax.js的网页幻灯片

    之前介绍了好多网页幻灯片.今天给大家带来一款基于TweenMax.js的网页幻灯片.这款幻灯片以不规则的碎片百叶窗的形式切换.切换效果非常漂亮.一起看下效果图: 在线预览   源码下载 实现的代码. ...

  5. plsql 只能识别32位的oracle解决办法

    http://www.cnblogs.com/ymj126/p/3712727.html#undefined

  6. DDD CQRS和Event Sourcing的案例:足球比赛

    在12月11日新的有关DDD CQRS和Event Sourcing演讲:改变心态- 以更加面向对象视角看待业务领域建模中,作者以足球比赛football Match为案例说明传统编程方法和CQRS的 ...

  7. [小技巧]diff的文件夹忽略使用方式

    当我们比较两个文件夹时经常需要忽略.svn或者.git,那么如下 diff -r -x ".git" -x "*.ko" -x "*.o" ...

  8. java资料——哈希表(散列表)(转)

    哈希表       散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度. ...

  9. hbase 部署

    hbase的部署相对于java来说就比较简单啦,主要过程如下: 1.下载hbase最新的稳定版 2.拷贝到相应的目录 3.修改conf目录下的hbase-env.sh,设置java 和不适用内置的zo ...

  10. ssh加密公私钥

    SSH公钥登录原理 在平时工作中我们经常要远程登录服务器,这就要用到SSH协议: $ ssh user@host 主要有两种登录方式:第一种为密码口令登录,第二种为公钥登录 密码口令登录 通过密码进行 ...