rainbowzc

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::

给对话框上的按钮加上动态的提示

给按钮加上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。

posted on 2008-07-06 13:18  ct  阅读(396)  评论(0编辑  收藏  举报