我是这样创建工具条的:
if(!m_TBar.Create(this, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_TOOLTIPS |CBRS_FLYBY | CBRS_BORDER_BOTTOM) || !m_TBar.LoadToolBar(IDR_TOOLBAR_USER))
{
    TRACE("对话框中增加工具条失败");
    EndDialog(IDCANCEL);
}
为什么没有TOOLTIPS提示呢?

解决方案 »

  1.   

    TOOLTIP需要自己加
    // Dialog Data
    //{{AFX_DATA(CSIMTOOLDlg)
    enum { IDD = IDD_SIMTOOL_DIALOG };
    CInfobarCtrl m_InfoBar;
    CListCtrl m_OutlookBar;
    //}}AFX_DATA // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CSIMTOOLDlg)
    public:
    virtual BOOL PreTranslateMessage(MSG* pMsg);
    protected:
    virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
    //}}AFX_VIRTUAL// Implementation
    protected:
    HICON m_hIcon; // Generated message map functions
    //{{AFX_MSG(CSIMTOOLDlg)
    virtual BOOL OnInitDialog();
    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    //}}AFX_MSG
    BOOL OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult);
    DECLARE_MESSAGE_MAP()
    };BEGIN_MESSAGE_MAP(CSIMTOOLDlg, CDialogResize)
    //{{AFX_MSG_MAP(CSIMTOOLDlg)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    //}}AFX_MSG_MAP
    ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)
    ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText)
    END_MESSAGE_MAP()BOOL CSIMTOOLDlg::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)
    {
        ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW); // need to handle both ANSI and UNICODE versions of the message
    TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
    TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
    TCHAR szFullText[256];
    CString cstTipText;
    CString cstStatusText; UINT nID = pNMHDR->idFrom;
    if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
    pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
    {
    // idFrom is actually the HWND of the tool
    nID = ((UINT)(WORD)::GetDlgCtrlID((HWND)nID));
    } if (nID != 0) // will be zero on a separator
    {
    AfxLoadString(nID, szFullText);
    // this is the command id, not the button index
    AfxExtractSubString(cstTipText, szFullText, 1, '\n');
    AfxExtractSubString(cstStatusText, szFullText, 0, '\n');
    } // Non-UNICODE Strings only are shown in the tooltip window...
    if (pNMHDR->code == TTN_NEEDTEXTA)
    lstrcpyn(pTTTA->szText, cstTipText,
                (sizeof(pTTTA->szText)/sizeof(pTTTA->szText[0])));
    else
    _mbstowcsz(pTTTW->szText, cstTipText,
                (sizeof(pTTTW->szText)/sizeof(pTTTW->szText[0])));
    *pResult = 0; // bring the tooltip window above other popup windows
    ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE);    // message was handled
    return TRUE;
    }BOOL CSIMTOOLDlg::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if (m_hWnd)
        {
            if (IsWindow(m_ToolTipCtrl.m_hWnd))
    m_ToolTipCtrl.RelayEvent(pMsg);
        }
    return CDialogResize::PreTranslateMessage(pMsg);
    }
      

  2.   

    比较乱。。主要就是OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)函数和PreTranslateMessage(MSG* pMsg) 
    OnToolTipText你作为一个消息相应声名在上面的代码中可以找到他的声名
      

  3.   

    转为基于MFC的对话框添加ToolTip的简单方法
    此方法适用于MFC派生类,在基于对话框的类中测试通过。具体步骤如下:
    1、选择“Project”菜单,然后“Set Active Project” 。
    2、选择“Project”菜单 -->“Add to Project” -->“Components and Controls” -->“VC++ Components” --> “ToolTip Support” 
    3、选择“Insert” 
    4、在对话框资源中加入一个按钮,ID为IDC_ToolTip
    5、在 CDialog::OnInitDialog() 中找到下面的注释行:
       // TODO: Use one of the following forms to add controls:
       // m_tooltip.AddTool(GetDlgItem(IDC_), );
       // m_tooltip.AddTool(GetDlgItem(IDC_), "");
    然后在注释行后加入一行代码:
       m_tooltip.AddTool(GetDlgItem(IDC_ToolTip), "显示 ToolTip");
    经过上面的步骤之后:
    头文件(*.h)中会自动加入下面的代码:
       public:
          virtual BOOL PreTranslateMessage(MSG* pMsg);
    实现文件(*.cpp)会加入方法实现:
          PreTranslateMessage(MSG* pMsg);
      

  4.   

    在头文件的消息映射函数中加
    BOOL OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult);在CPP文件的中
    BEGIN_MESSAGE_MAP(CSIMTOOLDlg, CDialogResize)
    //{{AFX_MSG_MAP(CSIMTOOLDlg)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    //}}AFX_MSG_MAP
             // 下面的对应头文件中的函数声名
    ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)
    ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText)
    END_MESSAGE_MAP()然后在CPP中写函数体:这个函数你贴过去改一下类名就可以了
    BOOL C~Dlg::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)
    {
        ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW); // need to handle both ANSI and UNICODE versions of the message
    TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
    TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
    TCHAR szFullText[256];
    CString cstTipText;
    CString cstStatusText; UINT nID = pNMHDR->idFrom;
    if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
    pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
    {
    // idFrom is actually the HWND of the tool
    nID = ((UINT)(WORD)::GetDlgCtrlID((HWND)nID));
    } if (nID != 0) // will be zero on a separator
    {
    AfxLoadString(nID, szFullText);
    // this is the command id, not the button index
    AfxExtractSubString(cstTipText, szFullText, 1, '\n');
    AfxExtractSubString(cstStatusText, szFullText, 0, '\n');
    } // Non-UNICODE Strings only are shown in the tooltip window...
    if (pNMHDR->code == TTN_NEEDTEXTA)
    lstrcpyn(pTTTA->szText, cstTipText,
                (sizeof(pTTTA->szText)/sizeof(pTTTA->szText[0])));
    else
    _mbstowcsz(pTTTW->szText, cstTipText,
                (sizeof(pTTTW->szText)/sizeof(pTTTW->szText[0])));
    *pResult = 0; // bring the tooltip window above other popup windows
    ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE);    // message was handled
    return TRUE;
    }
      

  5.   

    至于PreTranslateMessage(MSG* pMsg)在类向导中就可以添加,你应该知道了
    他里面的代码就是这样
    BOOL CSIMTOOLDlg::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    // 
    if (m_hWnd)
        {
            if (IsWindow(m_ToolTipCtrl.m_hWnd))
    m_ToolTipCtrl.RelayEvent(pMsg);
        }
    return CDialogResize::PreTranslateMessage(pMsg);
    }m_ToolTipCtrl是你定义的tooltip, 在 头文件中定义
    CToolTipCtrl m_ToolTipCtrl;