给对话框上的按钮加上动态的提示
给按钮加上tooltip很简单:
- 1 给按钮添加一个CTooltipCtrl变量
class CTooltipButton : public CButton
{
…
protected:
CToolTipCtrl m_ctrlTip;
…
}
- 2 设置这个tooltip:
BOOL CTooltipButton::InitTooltip(int nStringID)
{
EnableToolTips();
m_ctrlTip.Create(this,TTS_ALWAYSTIP);m_ctrlTip.SetMaxTipWidth(10000);
m_ctrlTip.AddTool(this, nStringID);
m_ctrlTip.Activate(TRUE);return TRUE;
}
- 3 响应消息:
BOOL CTooltipButton::PreTranslateMessage(MSG* pMsg)
{
m_ctrlTip.RelayEvent(pMsg);return CButton::PreTranslateMessage(pMsg);
}
实现一个动态的tooltip也很简单
在调用AddTool时使用参数LPSTR_TEXTCALLBACK并在tooltip的parent响应TTN_NEEDTEXT(也就是TTN_GETDISPINFO)notify消息即可。
但是,如何给对话框中的按钮实现动态的提示呢?
按理说把上面两篇文章介绍的方法综合一下就行了,然而发现行不通,因为作为tooltip的parent,应该在button中相应WM_NOTIFY消息。但是button不能接受到WM_NOTIFY消息,即使它是tooltip的owner window。
怎么办?这个时候我的解决方法是把CTooltipCtrl从button中移到dialog中,让dialog成为tooltip的parent,而它可以得到WM_NOTIFY消息。
超过80个字符的tooltip
对于超过80个字符的tooltip,同样要用到LPSTR_TEXTCALLBACK,同样是响应WM_NOTIFY消息,这个时候,不能用button作为tooltip的parent。