BOOL CMyToolTipCtrl::AddWindowTool(CWnd *pWnd, LPCTSTR pszText)
{
TOOLINFO ti;
ti.cbSize=sizeof(TOOLINFO);
ti.hinst=AfxGetInstanceHandle();
ti.hwnd=pWnd->GetParent()->GetSafeHwnd();
ti.uFlags=TTF_SUBCLASS|TTF_IDISHWND;
ti.uId=(UINT)pWnd->GetSafeHwnd();
ti.lpszText=(LPTSTR)pszText;
if((bool)SendMessage(TTM_ADDTOOL,0,(LPARAM)&ti))
{
this->MessageBox(_T("s"));
return true;
}
else
{
this->MessageBox(_T("f"));
return false;
}}上面是一个CToolTipCtrl的派生类的一个函数。下面是BOOL Ctemp2Dlg::OnInitDialog()中的调用。
tt.Create(this);
tt.AddWindowTool(GetDlgItem(IDOK),_T("这个是确定按钮!"));为什么还是不会出现提示文本?一直返回FALSE,难道还有什么其它的东西要写?
那个CMyToolTipCtrl是我从光盘提供的代码拿过来的,应该不会有问题,书中的例子可以正常运行。
EnableToolTips(TRUE);
tt.Create(this);
tt.Activate(TRUE);
tt.AddTool(GetDlgItem(IDC_IDOK),_T("这个是确定按钮"));//重写PreTranslateMessage函数BOOL PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
m_ToolTipCtl.RelayEvent(pMsg); return CDialog::PreTranslateMessage(pMsg);
}
这种方法好像只能用于CToolTipCtrl的父窗口。现在我这个CToolTipCtrl的父窗口上有好几个控件。要提示这些控件不能用这种方法的好像?
如我理解不对,请指正。
上面引用错了,不好意思,应该引用1楼的。
这种方法好像只能用于CToolTipCtrl的父窗口。现在我这个CToolTipCtrl的父窗口上有好几个控件。要提示这些控件不能用这种方法的好像?
如我理解不对,请指正。
我现在要实现一个CMyToolTipCtrl().只要调用AddWindowTool就可以用于大多数的控件。
看过一个自定义的ToolTip, 好像控件也会要在例如鼠标消息触发时,发送一个特定的Tip消息,而ToolTip就获取这Tip消息并给出你要的提示,在AddTool时,ToolTip会记录与它绑定控件。这过程好像少不了。理解不是很深,个人看法。
这个函数下都可以捕捉的到,而CToolTipCtrl类使用的是鼠标移动到某个控件上来弹出提示窗口
,所以在这我们需要捕捉到这个消息并发送给CToolTipCtrl类,以便提示窗口能够弹出。而在
CToolTipCtrl类中接受并处理这消息的函数就是RelayEvent()函数,所以加上吧
则需要多次调用这个函数才可以。RelayEvent()函数可以接收并处理
所有绑定的控件,这个不用担心。
{
// TODO: 在此添加专用代码和/或调用基类
m_ToolTipCtl.RelayEvent(pMsg); return CDialog::PreTranslateMessage(pMsg);
}