不少的界面設計都須要有Tip提示,下面描述一下Tip的簡單使用方法:函數
1. 首先要New一個CToolTipCtrl的對象m_pContentTipthis
2. 調用CToolTipCtrl的create函數,指定其父窗口。能夠爲某個控件,也能夠爲this。通常設爲this。spa
m_pContentTip->Create( this, TTS_ALWAYSTIP );設計
3. AddTool。此函數是設置與某個控件關聯的Tip文本。此處能夠爲多個控件添加不一樣的提示信息。指針
m_pButtonTip->AddTool( GetDlgItem( 控件ID ), 文本 ); //#add 必定要用AddTool 不然不會顯示 AddTool(this,文本);也行.code
4. SetTipBkColor設置背景顏色。對象
5. SetTipTextColor設置文本顏色。圖片
6. 最重要的一步。在PreTranslateMessage函數中添加下面語句:ip
BOOL CTestToolTipDlg::PreTranslateMessage(MSG* pMsg)ci
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message== WM_LBUTTONDOWN ||
pMsg->message== WM_LBUTTONUP ||
pMsg->message== WM_MOUSEMOVE)
m_pToolTipCtrl.RelayEvent(pMsg);
return CDialog::PreTranslateMessage(pMsg);
}
另外,還可使用m_pContentTip->UpdateTipText函數來更新Tip信息。
動態改變ToolTip的顯示內容的方法及步驟:
上面所講的一、二、4步驟。
在增長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 TRUE;
}
注:
實際項目中經常重寫該類獲得 不一樣風格,甚至是在其中添加圖片,如CXInfoTip.
經常使用的擴展按鈕控件通常均封裝了一個CToolTipCtrl控件.
另外一篇:
二,動態改變ToolTip的顯示內容的方法及步驟:
1.上面所講的一、二、4步驟。
2.在增長ToolTip時不指定顯示的字串,而是使用LPSTR_TEXTCALLBACK。
3.在窗口中增長消息映射 ON_NOTIFY_EX( TTN_NEEDTEXT, 0, SetTipText )。
4.在窗口中增長一個函數用於動態提供顯示內容,其原型爲 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);
}
ToolTip是Win32中一個通用控件,MFC中爲其生成了一個類CToolTipCtrl,總的說來其使用方法是較簡單的,下面講一下它的通常用法和高級用法。
通常用法步驟:
1.添加CToolTipCtrl成員變量 m_tt。
2.在父窗口中調用EnableToolTips(TRUE);
3.在窗口的OnCreate(或者其餘適當的位置)中向ToolTip中添加須要顯示Tip的子窗口,並同時指定相應的顯示字串CToolTipCtrl::AddTool(pWnd,"string to display")。
4.重載父窗口的 BOOL PreTranslateMessage(MSG* pMsg) ,在函數中調用 m_tt.RelayEvent(pMsg)。
下面假設在窗口CWndYour中使用CToolTipCtrl
在類定義中添加變量說明:
class CWndYour:xxx
{
CToolTipCtrl m_tt;
}
在OnCreate中添加須要顯示Tip的子窗口
CWndYour::OnCreate(....)
{
EnableToolTips(TRUE);
m_tt.Create(this);
m_tt.Activate(TRUE);
CWnd* pW=GetDlgItem(IDC_CHECK1);//獲得窗口指針
m_tooltip.AddTool(pW,"Check1");//添加
........
}
在BOOL PreTranslateMessage(MSG* pMsg)中添加代碼BOOL CWndYour::PreTranslateMessage(MSG* pMsg){{m_tt.RelayEvent(pMsg);}return CParentClass::PreTranslateMessage(pMsg);}這樣當鼠標移動到相應的子窗口上時會顯示出相應的ToolTip。