[原创]让对话框的控件支持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的对话框就完成了。