找到了一个老外写的很好用的ToolTip, 但是有两个小问题,终于解决了,拿出来和大家分享下。
问题1:
有时候出现这样的情况,鼠标划上去后立马弹出提示,然后消失,最后又弹出一次;
问题2:
提示框弹出后默认只显示5秒钟就消失了, 这样时间太短了,提示的内容还没看完就消失了。
解决方法:
问题1:m_TT.SetDelayTime(TTDT_RESHOW, 1000);//鼠标划上过1秒后弹出提示;
问题2:m_TT.SetDelayTime(TTDT_AUTOPOP, 10000);//弹出提示后停留10秒钟
源码:
LRESULT OnInitDialog(UINT , WPARAM , LPARAM, BOOL& bHandled)
{
TTInit();
bHandled = FALSE;
return TRUE;
}
LRESULT OnMouse(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
{
T* pT = (T*)this;
bHandled = FALSE;
if(m_TT.IsWindow())
m_TT.RelayEvent((LPMSG)pT->GetCurrentMessage());
return 0;
}
// Implementation
private:
HWND GetHWND( UINT idTool )
{ return ::GetDlgItem( *(T*)this, idTool );}
static BOOL CALLBACK SetTool( HWND hTool, LPARAM pDlg)
{
T* pT = (T*)pDlg;
int idTool = ::GetWindowLong(hTool, GWL_ID);
if ( idTool != IDC_STATIC )
{
CToolInfo ToolInfo( pT->m_uToolFlags, hTool, 0, 0, (LPTSTR)idTool );
pT->m_TT.AddTool( &ToolInfo );
}
return TRUE;
}
};
} // namespace WTL
#endif // __TTDLG_H__
用法:
1.将上面的代码写入一个头文件中, 如:ToolTipDlg.h
2.在需要用的对话框中包含这个头文件, 并使其继承于CToolTipDlg类, 如:
3.如果要显示当鼠标滑动到某个静态文本控件上时弹出提示。首先,将IDC_STATIC改为其他的(如:IDC_TOOL_TIP);然后,将属性中的Notify设置为TRUE;最后,打开String Table, ID为先前修改后的ID(如:IDC_TOOL_TIP), 标题为提示框中要显示的内容, 换行的话可以加/n。
简单的用法就是上面这样子的, 至于其他的用法可以看源码给出的函数。