VC中用CPPToolTip轻松实现工具提示

CPPToolTip是一款强大的工具提示库,支持HTML-lite语法、CSS样式、菜单等特性。本文介绍如何在对话框、工具栏及菜单中使用该库,并通过实例展示了创建及配置提示的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CPPToolTip是一个非常棒的工具提示实现,它支持HTML-lite语句、CSS样式表、菜单、工具条、淡入淡出、超链接、动画、表格等等超强功能。

 

一、使用CPPToolTip的第一步:文件的引用

 

文件
描述
PPTooltip.h
PPTooltip.cpp
CPPTooltip 类

PPHtmlDrawer.h PPHtmlDrawer.cpp

CPPHtmlDrawer类. 在tooltip里画出HTML字符串。

PPDrawManager.h
PPDrawManager.cpp

CPPDrawManager类是一组图形处理方法集
CeXDib.h
CeXDib.cpp
CCeXDib类,感谢Davide Pizzolato 和 Davide Calabro的提供. 这个类实现了背景特效.

 

 

如果需要使用背景特效,需要定义USE_SHADE:

 

在 PPDrawManager.h 中

 

如果需要使用背景特效,需要定义USE_SHADE:

在 PPDrawManager.h 中 #define USE_SHADE

 

 

二、CPPToolTip的基本使用方法:创建CPPToolTip对象

 

1
CPPToolTip m_tooltip;

然后创建窗口,对于对话框程序,可以在OnInitDialog中

 

1
2
CDialog::OnInitDialog();
m_tooltip.Create(this);

然后可以调用AddTool为其它控件注册工具提示,例如:

 

1
m_tooltip.AddTool(GetDlgItem(IDC_BUTTON1), _T("IDC_BUTTON1控件的工具提示"));

可以为某个区域添加工具提示,例如:

 

1
m_tooltip.AddTool(this, _T("方框中的Tooltip"),  CRect (100, 100, 200, 200));

另外,你需要在PreTranslateMessage中用RelayEvent将鼠标消息传递到工具提示控件中。

 

1
2
3
4
BOOL ... ::PreTranslateMessage(MSG* pMsg)
{
    m_tooltip.RelayEvent(pMsg); 
}
三、为工具条添加工具提示
1)在CMainFrame头文件中创建CPPToolTip对象:
1
CPPToolTip m_tooltip;
2)在CMainFrame::OnCreate() 中调用AddToolBar方法:
1
2
3
4
5
6
7
8
9
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    ...
    m_tooltip.Create(this);
    //为工具条添加工具提示
  
    m_tooltip.AddToolBar(&m_wndToolBar);
    return 0;
}
3)用RelayEvent传递鼠标消息
1
2
3
4
BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
    m_tooltip.RelayEvent(pMsg);
}
四、为菜单添加工具提示
1)在CMainFrame头文件中创建CPPToolTip对象:
1
CPPToolTip m_tooltip;
2)在CMainFrame::OnCreate() 中调用Create方法:
1
m_tooltip.Create(this);
3)取消注释行,启用菜单工具提示
在PPTooltip.h 中
1
#define PPTOOLTIP_USE_MENU
4)在CMainFrame添加两个消息处理
1
2
3
4
5
6
7
8
9
10
void CMainFrame::OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSubMenu)
{
     m_tooltip.OnMenuSelect(nItemID, nFlags, hSubMenu);
     CFrameWnd::OnMenuSelect(nItemID, nFlags, hSubMenu);
}
  
void CMainFrame::OnEnterIdle(UINT nWhy, CWnd* pWho)
{
     m_tooltip.OnEnterIdle(nWhy, pWho);
}
5)用RelayEvent传递鼠标消息
1
2
3
4
BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
    m_tooltip.RelayEvent(pMsg); 
}
CPPToolTip还有很多超棒的功能期待您的发现。

 

 

CPPToolTip控件 链接:http://www.codeproject.com/KB/miscctrl/pptooltip.aspx 截图: 1 CPPToolTip控件介绍 Files Description PPTooltip.h PPTooltip.cpp CPPTooltip class PPHtmlDrawer.h PPHtmlDrawer.cpp CPPHtmlDrawer class. It's need to drawing HTML string in tooltip body PPDrawManager.h PPDrawManager.cpp CPPDrawManager class is a set of methods to work with graphics. CeXDib.h CeXDib.cpp CCeXDib class thanks to Davide Pizzolato and Davide Calabro. This class use for extend background's effect. Extend background effects by Davide Pizzolato and Davide Calabro become available if defined USE_SHADE: in PPDrawManager.h #define USE_SHADE 2 在普通窗体控件中使用 2.1 创建CPPToolTip对象 CPPToolTip m_tooltip; 2.2 在窗口初始化函数OnInitDialog中: // Create the CPPToolTip object m_tooltip.Create(this); 2.3 添加提示控件 m_tooltip.AddTool(GetDlgItem(IDC_BUTTON1), _T("Tooltip to the control IDC_BUTTON1")); 或者: m_tooltip.AddTool(this, _T("Tooltip for rectangle area"),CRect (100, 100, 200, 200)); 2.4 拦截处理鼠标消息 BOOL ... ::PreTranslateMessage(MSG* pMsg) { m_tooltip.RelayEvent(pMsg); } 3 在工具栏中使用 3.1 在CMainFrame中定义CPPToolTip对象 CPPToolTip m_tooltip; 3.2 在CMainFrame的OnCreate函数中创建CPPToolTip对象,添加工具栏提示 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { ... m_tooltip.Create(this); //Adds tooltip for toolbar m_tooltip.AddToolBar(&m_wndToolBar); return 0; } 3.3 截取和处理鼠标消息 BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) { m_tooltip.RelayEvent(pMsg); } 4 在菜单中使用 4.1 在CMainFrame中定义CPPToolTip变量 CPPToolTip m_tooltip; 4.2 在CMainFrame的OnCreate()函数中创建CPPToolTip对象 m_tooltip.Create(this); 4.3 Uncomments a line to enable a work with menus. in PPTooltip.h #define PPTOOLTIP_USE_MENU 4.4 为CMainFrame添加两个事件处理对象 //选中菜单事件 void CMainFrame::OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSubMenu) { m_tooltip.OnMenuSelect(nItemID, nFlags, hSubMenu); CFrameWnd::OnMenuSelect(nItemID, nFlags, hSubMenu); } //闲置状态事件 void CMainFrame::OnEnterIdle(UINT nWhy, CWnd* pWho) { m_tooltip.OnEnterIdle(nWhy, pWho); } 4.5 截取和处理鼠标消息 BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) { m_tooltip.RelayEvent(pMsg); }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值