[原创]让对话框的控件支持tooltips

让对话框的控件支持tooltips

absolute8511(别名cool8511)于2008-11-7

环境:VC6

参考了网上的一些资料和自己的总结,简单实现了对话框控件的tooltips显示功能。

具体实现如下:

在VC6中对任意一个对话框资源都有一个对话框类相对应。假设类名叫COperPanel。

1. 为要显示tooltips的控件添加字符串资源。

比如有个按钮叫IDC_BUTTON_ZOOMIN,那么在string table中添加一个字符串资源,ID为IDC_BUTTON_ZOOMIN,caption就是tooltips,我这里填上"放大指定区域"。

2.在对话框类中添加消息映射

在消息映射的位置添加一句 ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnToolTipNotify)
如下:

BEGIN_MESSAGE_MAP(COperPanel, CDialog)
//{{AFX_MSG_MAP(COperPanel)
ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnToolTipNotify)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

OnToolTipNotify是消息处理函数名称,可以随便取,只要对应即可

3. 在对话框类中添加消息处理函数

首先在类头文件中声明函数

//{{AFX_MSG(COperPanel)

afx_msg BOOL OnToolTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult );
//}}AFX_MSG

然后实现如下

BOOL COperPanel::OnToolTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult )
{
    TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
//Identifier of the control sending a message
    UINT nID =pNMHDR->idFrom;
    if (pTTT->uFlags & TTF_IDISHWND)
    {
        // idFrom is actually the HWND of the tool
        nID = ::GetDlgCtrlID((HWND)nID);
        if(nID)
        {
            pTTT->lpszText = MAKEINTRESOURCE(nID);
            pTTT->hinst = AfxGetResourceHandle();
            return(TRUE);
        }
    }
    return(FALSE);

}

至此,完成了tooltips的消息处理。

4. 启用对话框的tooltips

在对话框创建后,调用 EnableToolTips(true); 来启用对话框的tooltips,这样就全部完成了。现在该对话框在任何情况下都可以显示控件的tooltips了。

比如我在view中创建了一个非模态对话框用于操作,添加如下代码,其中m_operationPanel就是一个COperPanel对象。

if(!m_operationPanel.Create(IDD_OPERATIONGROUP,this))
{
   MessageBox("Fatal error:Fail to create dialog!");
   exit(0);
}
//使能tooltips显示功能
m_operationPanel.EnableToolTips(true);
m_operationPanel.ShowWindow(SW_SHOW);

这样一个可以显示tooltips的对话框就完成了。

原文地址:https://www.cnblogs.com/absolute8511/p/1649617.html