学习心得:控件之CToolTipCtrl(加入仿系统目录树视图)

来源:互联网 发布:个人网址导航源码 编辑:程序博客网 时间:2024/03/29 05:46

说明:这些代码是建立在仿系统目录树视图之上的。(在vs2005下编译通过)

 一、首先在BrowseSysTreeDlg.h 中加入成员CToolTipCtrl* m_pToolTipCtrl。在资源里,Tree Control把ToolTip的属性设为True;

二、然后就是初始化,在BOOL CBrowseSysTreeDlg::OnInitDialog()加入如下代码:

     …………………………

      m_pToolTipCtrl = new CToolTipCtrl;         //记住要找个地方释放内存
      if (NULL == m_pToolTipCtrl || (!m_pToolTipCtrl->Create(this, TTS_ALWAYSTIP)))
                 return FALSE;
     m_pToolTipCtrl->AddTool(&m_ctrlTree, _T("szPath:"));         //加入

    ……………………

三、加入之后就是怎么获取消息了,这里是重载了PreTranslateMessage(MSG * pMsg),在ranslateMessage之前

截获WM_MOUSEMOVE,代码如下:

BOOL CBrowseSysTreeDlg::PreTranslateMessage(MSG * pMsg)
{
    
if(pMsg->message == WM_MOUSEMOVE && pMsg->hwnd == m_ctrlTree.m_hWnd)
    
{
        CPoint point(LOWORD(pMsg
->lParam),HIWORD(pMsg->lParam));
        HTREEITEM hItem 
= m_ctrlTree.HitTest(point);
        
if(hItem != NULL)
        
{
            LPNODEINFO    lpNodeInfo 
= (LPNODEINFO)m_ctrlTree.GetItemData(hItem);
            m_pToolTipCtrl
->UpdateTipText(lpNodeInfo->szPath,&m_ctrlTree);
            m_pToolTipCtrl
->RelayEvent(pMsg);
        }

    }

    
return CDialog::PreTranslateMessage(pMsg);
}

 

另一种方法:

1.在增加ToolTip时不指定显示的字串,而是使用LPSTR_TEXTCALLBACK。 
2.在窗口中增加消息映射 ON_NOTIFY_EX( TTN_NEEDTEXT, 0, SetTipText )。 
4.在窗口中增加一个函数用于动态提供显示内容,其原型为 BOOL SetTipText( UINT id, NMHDR * pTTTStruct, 3LRESULT * pResult ),下面的代码可以根据传入的参数判定应该显示的内容。 
     


BOOL CBrowseSysTreeDlg::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): 
            
//设置相应的显示字串 
            return TRUE; 
            
break
        
case(IDC_YOUR_CONTROL2) :
            
//设置相应的显示字串 
            return TRUE; 
            
break
        }

     }

     
return(FALSE); 
}
 


     

原创粉丝点击