1、创建一个CToolTipCtrl成员。
- CToolTipCtrl m_Ttc;
2、添加消息映射。在消息映射宏BEGIN_MESSAGE_MAP(CRDlg, CDialog)和END_MESSAGE_MAP()之间添加如下内容。
- ON_NOTIFY_EX( TTN_NEEDTEXT, 0, SetTipText )
3、声明消息处理函数
- BOOL SetTipText(UINT id, NMHDR * pTTTStruct, LRESULT * pRes) ;
4、打开工具消息提示功能。调用CToolTipCtrl的BOOL Create( CWnd* pParentWnd, DWORD dwStyle = 0 )函数创建一个CToolTipCtrl。添加在OnInitDialog()函数中。
- EnableToolTips(TRUE);
- m_Ttc.Create(this);
5、注册一个工具。如果只是给一个控件添加提示消息,可以直接将LPSTR_TEXTCALLBACK改为提示消息,不需要消息映射及消息处理函数,但只能给一个控件添加。
- m_Ttc.AddTool(GetDlgItem(IDC_RESET), LPSTR_TEXTCALLBACK);
- m_Ttc.AddTool(GetDlgItem(IDC_SHUFFLE), LPSTR_TEXTCALLBACK);
6、实现消息处理函数。
- BOOL CRubiksCubeDlg::SetTipText(UINT id, NMHDR * pTTTStruct, LRESULT * pRes)
- {
- TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pTTTStruct;
- UINT nID =pTTTStruct->idFrom;
- if (pTTT->uFlags & TTF_IDISHWND)
- {
- nID = ::GetDlgCtrlID((HWND)nID);
- switch(nID)
- {
- case(IDC_SHUFFLE):
- {
- strcpy(pTTT->lpszText,"随机");
- return TRUE;
- break;
- }
- case(IDC_RESET):
- {
- strcpy(pTTT->lpszText,"重置。");
- return TRUE;
- break;
- }
- }
- }
- return FALSE;
- }
7、在PreTranslateMessage中传递消息。
- BOOL CRubiksCubeDlg::PreTranslateMessage(MSG* pMsg)
- {
- m_Ttc.RelayEvent(pMsg);
- return CDialog::PreTranslateMessage(pMsg);
- }
OK。