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

     CToolTipCtrl m_iToolTips;

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

       EnableToolTips(TRUE);m_iToolTips.Create(this);m_iToolTips.Activate(TRUE);m_iToolTips.SetDelayTime(150);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(255,255,255));    //背景色为白色m_iToolTips.SetTipTextColor(RGB(0,0,0));         //字体颜色为黑色

    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 = 0;
    }

// 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();
}

转载于:https://www.cnblogs.com/MakeView660/p/6814339.html

VC++ ToolTip的简单使用相关推荐

  1. C#窗体设计中ToolTip的简单用法

    本文介绍C#窗体设计中ToolTip的简单用法. 操作流程 1.1. ToolTip信息提示框作用 C#中提供了信息提示框,这有很多用处,可以提示控件或者用户自定义的属性信息,而且可以自动弹出或者用户 ...

  2. VC环境下简单的贪吃蛇

    下午真无聊的不知道干什么了,翻翻自己以前写的代码,偶然看到大一时写的这个简单的贪吃蛇,自己玩了几把后还是决定发到博客吧.(实在无聊,打发时间) 注:完全基于VC++6.0环境,不支持Linux 下te ...

  3. VC++ 拖放编程简单Demo

    微软的编程类库都带有拖放编程的接口:下面看一个最简单demo:win7, vc6:新建一个对话框工程: 添加一个列表框控件:设置 接受文件 属性: 在 类向导-Class Info 做如下选择: 为W ...

  4. VC++环境OpenSSL简单编程入门

    OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份. SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在 ...

  5. vc++栈的简单实现

    栈的数据类型是先进后出 1 #ifndef __MYSTACK__ 2 #define __MYSTACK__ 3 #include <Windows.h> 4 typedef struc ...

  6. VC DataGrid控件使用总结

    MS CDataGrid控件用法详解 本文示例源代码或素材下载 .DataGrid控件是VC方便地用来显示数据的一个极好的网格控件,我不否认网上还有期它不少优秀的网格控件,但我总喜欢使用微软自已的东西 ...

  7. c 调用易语言dll字节集,总结VC与易语言DLL互相调用的方法

    在编写程序的时候往往需要调用到别的语言编写的DLL文件,下面先来看一下在易语言中如何调用VC编写的DLL呢,首先用VC编写一个简单的DLL文件,代码如下: int WINAPI add(int x,i ...

  8. win32 socket的一个简单的例子 控制台

     在visual c++里建两个win32控制台工程,分别编译下面的服务端和客户端 服务端: [cpp] view plaincopyprint? #include <windows.h&g ...

  9. 预警展示样式html,纯css3 Tooltip工具提示样式

    microtip.css是一款纯css3 Tooltip工具提示样式.microtip.css不用依赖任何js文件,就可以生成时尚的Tooltip效果.它是轻量级的,压缩后的版本小于1kb. 安装 可 ...

最新文章

  1. R语言dplyr包获取dataframe分组聚合汇总统计值实战(group_by() and summarize() ):均值、中位数、分位数、IQR、MAD、count、unique
  2. easyui-layout中的收缩层无法显示标题问题解决
  3. XamarinSQLite教程添加列
  4. 团队作业6——展示博客(Alpha版本)
  5. Spark集群的启动日志
  6. delphi 最全日期格式_DateUtils时间单元说明
  7. 软件架构(6)---软件架构设计的过程
  8. matlablib显示图片
  9. 【51单片机】按键控制多个舵机(可用于机械臂控制)
  10. Processing介绍及几个python模式下的案例
  11. 利用神经网络预测股票价格走势
  12. ROS学习笔记-用脚本发布cmd_vel话题
  13. c语言实验步骤与过程,实验一 C语言的运行环境和运行过程
  14. 机器学习——支持向量机(SVM)之超平面、间隔与支持向量
  15. Linux下C语言实现TCP文件传输
  16. python提取前几行数据_python读取文件的前几行
  17. [闲聊]随时汲取眼前所见色彩的蓝牙绘图笔ColorPillar
  18. java spark 朴素贝叶斯算法(naive-bayes)
  19. 天勤数据结构笔记——第六章 树与二叉树(代码)
  20. 基于element-upload的自定义图片裁剪上传

热门文章

  1. mysql数据库主要负责存储_MySQL默认数据库简介
  2. 金融计算器 npv_一个工具箱 之 净现值(NPV)计算器
  3. java ora 00911_ORA-00911错误
  4. mysql数据库的事物日志在哪里_mysql数据库中事务日志的作用
  5. 支持向量机python代码_支持向量机及python实现(一)
  6. if else语句_你敢信?if语句执行完,竟然也会执行else语句
  7. 新电脑怎么分盘_2020双十一预算一万该怎么组装电脑(含显示器)新媒体,视频剪辑等影视专业装机指南...
  8. python中start用法_Start Python 学习笔记(琐碎知识,持续更新。。。)
  9. 计算机安装与维修 等级,电脑升级究竟要怎么升级?维修多年的老师傅说出其中答案!...
  10. find vba 模糊_VBA积木代码方案:实现多重查找、模糊查找、清除值