为什么我加的提示有时出来有时不出来
并且大多时候不出来
就在心灰意冷的时候才出来!!!

解决方案 »

  1.   

    以下提供一篇工具栏中的ToolTip实现,可以转换到Button上去。1、选择按钮的风格中加入TOOLTIPS的风格。
    2、然后增加一个消息函数定义:
       afx_msg BOOL OnToolTipText(UINT, NMHDR *pNMHDR, LRESULT *pResult);
    3、增加消息映射:
       ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnToolTipText);
    4、消息函数实现:
       ………………………………
       TOOLTIPTEXTA *pTTTA = (TOOLTIPTEXTA *)pNMHDR;
       TOOLTIPTEXTW *pTTTW = (TOOLTIPTEXTW *)pNMHDR;
       
       CString strTipText;
       UINT uID = pNMHDR->idForm;
       
       if(pNMHDR->code == TTN_NEEDTEXTA && (pTTTA ->uFlags & TTF_IDISHWND_\) || pNMHDR->code ==  TTN_NEADTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
             uID = ::GetDlgCtrlID((HWND)uID);  //idForm位工具栏的HWND
       
        if(uID != 0)   //不为分割符
        {
           strTipText.LoadString(uID);
           strTipText = strTip.Mid(strTipText.Find('\n', 0) + 1);#ifndef _UNICODE
         if(pNMHDR->code == TTN_NEEDTEXTA)
             lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText));
         else
             _mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
    #else
         if(pNMHDR->code == TTN_NEEDTEXTW)
             _wcstombsz(pTTTA->szText, strTipText, sizeof(pTTTW->szText));
          else
             lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
    #endif     *pResult = 0;
         ::SetWindowPos(pNMHDR->hwndForm, HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOMOVE | SWP_NOOWNERZORDER);
         
         return TRUE;
         }
       
         return TRUE;
    }
      

  2.   

    谢谢您的解答
    我把这个程序块放进程序里,但是提示还是没有出来
    我想请教您几个问题:
       TOOLTIPTEXTA *pTTTA = (TOOLTIPTEXTA *)pNMHDR;
       TOOLTIPTEXTW *pTTTW = (TOOLTIPTEXTW *)pNMHDR;
       
       CString strTipText;
       UINT uID = pNMHDR->idForm;   
       
       if(pNMHDR->code == TTN_NEEDTEXTA && (pTTTA ->uFlags & TTF_IDISHWND_\) || pNMHDR->code ==  TTN_NEADTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
             uID = ::GetDlgCtrlID((HWND)uID);  //此时得到是对话条中的标识符个数   
        if(uID != 0)   //不为分割符
        {
           strTipText.LoadString(uID);     //是取出了string资源中的所有字串吗?msdn中讲是通过ID区分这些字符串的,把字符串放到一个事先准备的字串里,是这样的吗?那不是乱七八糟的了吗?
           strTipText = strTip.Mid(strTipText.Find('\n', 0) + 1);#ifndef _UNICODE
         if(pNMHDR->code == TTN_NEEDTEXTA)
             lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText));
         else
             _mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
    #else
         if(pNMHDR->code == TTN_NEEDTEXTW)
             _wcstombsz(pTTTA->szText, strTipText, sizeof(pTTTW->szText));
          else
             lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
    #endif     *pResult = 0;     //干什么用的?
         ::SetWindowPos(pNMHDR->hwndForm, HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOMOVE | SWP_NOOWNERZORDER);
         
         return TRUE;
         }
       
         return TRUE;
    }
      

  3.   

    Add a member to the CDialog or CWnd derived class in the header like: CToolTipCtrl    CTTDialog :: m_ToolTip;In the OnInitDialog or OnInitialUpdate, add: 
    m_ToolTip.Create (this);
    m_ToolTip.Activate (TRUE);CWnd*    pWnd = GetWindow (GW_CHILD);
    while (pWnd)
    {
        int nID = pWnd->GetDlgCtrlID ();
        if (nID != -1)
        {
            m_ToolTip.AddTool (pWnd, pWnd->GetDlgCtrlID ());
        }
        pWnd = pWnd->GetWindow (GW_HWNDNEXT);
    }To add a tooltip to a control, just add a string resource using the same ID as the control to get the tip. If I wanted the OK button to have a tip, I would add a string resource for IDOK.Also do not forget to put the following code to you dialog class: 
    BOOL CTTDialog :: PreTranslateMessage(MSG* pMsg) 
    {
        if (m_hWnd)
        {
            m_ToolTip.RelayEvent (pMsg);
            return CDialog::PreTranslateMessage(pMsg);
        }
        return (FALSE);
    }