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);
    
    
}
posted @ 2008-11-03 00:10  jcss  阅读(737)  评论(0编辑  收藏  举报