VC中实现按钮提示
virtual BOOL Create( CWnd* pParentWnd, DWORD dwStyle = 0 );
pParentWnd是父窗口指针,通常用this就行了。dwStyle是样式,一般用默认值,即空着这个参数就可以了。
BOOL AddTool( CWnd* pWnd, UINT nIDText, LPCRECT lpRectTool = NULL, UINT_PTR nIDTool = 0 );
BOOL AddTool( CWnd* pWnd, LPCTSTR lpszText = LPSTR_TEXTCALLBACK, LPCRECT lpRectTool = NULL, UINT_PTR nIDTool = 0 );
AddTool函数用来添加要设置工具提示的控件。pWnd为该控件窗口指针。lpRectTool用来指定在什么区域显示工具提示。最简单的用法就是给出两个参数,一个是控件的窗口指针,一个是要提示的字符串。
要制作工具提示,只需要声明一个CToolTipCtrl类的对象,调用Create创建,再调用AddTool添加控件。如有多个控件,可逐个添加。
1. 在这个对话框的定义部分添加黑体部分:
class CMyDlg : public CDialog
{
……
CToolTipCtrl m_tt;
……
}
2. 在这个对话框的OnInitDialog()函数里,添加黑体部分:
BOOL CMyDlg::OnInitDialog()
{
……
EnableToolTips(TRUE);
m_tt.Create(this);
m_tt.Activate(TRUE);
m_tt.AddTool(GetDlgItem(IDC_BUTTON1),"这是一个按钮");
//IDC_BUTTON1是需要进行提示的按钮的ID值,这个函数的原型是
BOOL AddTool( CWnd* pWnd, LPCTSTR lpszText = LPSTR_TEXTCALLBACK, LPCRECT lpRectTool = NULL, UINT_PTR nIDTool = 0 );
m_tt.SetTipTextColor(RGB(0,0,255)); //提示文字颜色,非必需
m_tt.SetDelayTime(150); //出现提示前的延迟时间,非必需
……
}
3.重载对话框的PreTranslateMessage(MSG* pMsg)函数,添加黑体部分:
BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
{
m_tt.RelayEvent(pMsg);
return CDialog::PreTranslateMessage(pMsg);
}
在增加ToolTip时不指定显示的字串,而是使用LPSTR_TEXTCALLBACK。
在窗口中增加消息映射 ON_NOTIFY_EX( TTN_NEEDTEXT, 0, SetTipText )。
在窗口中增加一个函数用于动态提供显示内容,其原型为 BOOL SetTipText( UINT id, NMHDR * pTTTStruct, LRESULT * pResult ),下面的代码可以根据传入的参数判定应该显示的内容。
BOOL CWndYour::SetTipText( UINT id, NMHDR * pTTTStruct, LRESULT * pResult )
{
TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pTTTStruct;
UINT nID =pTTTStruct->idFrom; //得到相应窗口ID,有可能是HWND
if (pTTT->uFlags & TTF_IDISHWND) //表明nID是否为HWND
{
nID = ::GetDlgCtrlID((HWND)nID);//从HWND得到ID值,当然你也可以通过HWND值来判断
switch(nID)
case(IDC_YOUR_CONTROL1)
strcpy(pTTT->lpszText,your_string1);//设置
return TRUE;
break;
case(IDC_YOUR_CONTROL2)
//设置相应的显示字串
return TRUE;
break;
}
return(FALSE);
}