控件之CToolTipCtrl(加入仿系统目录树视图)

翻译|其它|编辑:郝浩|2007-09-17 10:40:46.000|阅读 990 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

说明:这些代码是建立在仿系统目录树视图之上的。(在  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); 


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:csdn

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP