<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    VC/MFC 當鼠標移到控件上時顯示提示信息

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    VC/MFC 當鼠標移到控件上時顯示提示信息

    ToolTip是Win32中一個通用控件,MFC中為其生成了一個類CToolTipCtrl,總的說來其使用方法是較簡單的,下面講一下它的一般用法和高級用法。 

    一般用法步驟:  

    添加CToolTipCtrl成員變量 m_tt。  

    在父窗口中調用EnableToolTips(TRUE);  

    在窗口的OnCreate(或者其他適當的位置)中向ToolTip中添加需要顯示Tip的子窗口,并同時指定相應的顯示字串CToolTipCtrl::AddTool(pWnd, "string to display ")。 

    重載父窗口的 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。  

    動態改變ToolTip的顯示內容的方法及步驟:  

    上面所講的1、2、4步驟。  

    在增加ToolTip時不指定顯示的字串,而是使用LPSTR_TEXTCALLBACK。  

    在窗口中增加消息映射 ON_NOTIFY_EX( TTN_NEEDTEXT, 0, SetTipText )。  

    在窗口中增加一個函數用于動態提供顯示內容,其原型為 BOOL SetTipText( UINT id, NMHDR * pTTTStruct, LRESULT * pResult ),下面的代碼可以根據傳入的參數判定應該顯示的內容。 

    [cpp] view plaincopy  
    1. BOOL CWndYour::SetTipText( UINT id, NMHDR * pTTTStruct, LRESULT * pResult )    
    2. {    
    3. TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pTTTStruct;     
    4. UINT nID =pTTTStruct-> idFrom; //得到相應窗口ID,有可能是HWND    
    5. if (pTTT-> uFlags & TTF_IDISHWND) //表明nID是否為HWND    
    6. {    
    7.   nID = ::GetDlgCtrlID((HWND)nID);//從HWND得到ID值,當然你也可以通過HWND值來判斷    
    8. switch(nID)    
    9. case(IDC_YOUR_CONTROL1)     
    10. strcpy(pTTT-> lpszText,your_string1);//設置    
    11. return TRUE;    
    12. break;    
    13. case(IDC_YOUR_CONTROL2)    
    14. //設置相應的顯示字串    
    15. return TRUE;    
    16. break;    
    17. }    
    18. return(FALSE);    
    19. }   


    另外的就是在相應函數中區分UNICODE編碼

    [cpp] view plaincopy  
      1. BOOL CPreParent::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)  
      2. {  
      3.     ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);  
      4.       
      5.     // UNICODE消息  
      6.     TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;  
      7.     TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;  
      8.     //TCHAR szFullText[512];  
      9.     CString strTipText;  
      10.     UINT nID = pNMHDR->idFrom;  
      11.       
      12.     if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||  
      13.         pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))  
      14.     {  
      15.         // idFrom為工具條的HWND   
      16.         nID = ::GetDlgCtrlID((HWND)nID);  
      17.     }  
      18.       
      19.     if (nID != 0) //不為分隔符  
      20.     {  
      21.         strTipText.LoadString(nID);  
      22.         strTipText = strTipText.Mid(strTipText.Find('\n',0)+1);  
      23.         //strTipText = _T("notify string");  
      24.           
      25. #ifndef _UNICODE  
      26.         if (pNMHDR->code == TTN_NEEDTEXTA)  
      27.         {  
      28.             lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText));  
      29.         }  
      30.         else  
      31.         {  
      32.             _mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText));  
      33.         }  
      34. #else  
      35.         if (pNMHDR->code == TTN_NEEDTEXTA)  
      36.         {  
      37.             _wcstombsz(pTTTA->szText, strTipText,sizeof(pTTTA->szText));  
      38.         }  
      39.         else  
      40.         {  
      41.             lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText));  
      42.         }  
      43. #endif  
      44.           
      45.         *pResult = 0;  
      46.           
      47.         //使工具條提示窗口在最上面  
      48.         ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,  
      49.             SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);   
      50.         return TRUE;  
      51.     }  
      52.     return TRUE;  
      53. }  
    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全