CToolTipCtrl使用詳細解說

不少的界面設計都須要有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。

相關文章
相關標籤/搜索