我创建toolbar的时候,设了CBRS_TOOLTIPS,然后怎么显示提示呢?谢谢!

解决方案 »

  1.   

    tooltip是显示在button上的吗?
    刚下载了一个例子,是直接做在button上面的。我要的不是这个,我的button上本身没有文字,
    而是希望鼠标移动到button上后,就出现一个文字提示,
    请问怎么做?
      

  2.   

    tooltip是 另外的控间的,如下
    /* CREATE A TOOLTIP CONTROL OVER THE ENTIRE WINDOW AREA */
    void CreateMyTooltip (HWND hwnd)
    {
                     // struct specifying control classes to register
        INITCOMMONCONTROLSEX iccex; 
        HWND hwndTT;                 // handle to the ToolTip control
              // struct specifying info about tool in ToolTip control
        TOOLINFO ti;
        unsigned int uid = 0;       // for ti initialization
        char strTT[30] = "This is your ToolTip string.";
        LPTSTR lptstr = strTT;
        RECT rect;                  // for client area coordinates    /* INITIALIZE COMMON CONTROLS */
        iccex.dwICC = ICC_WIN95_CLASSES;
        iccex.dwSize = sizeof(INITCOMMONCONTROLSEX);
        InitCommonControlsEx(&iccex);    /* CREATE A TOOLTIP WINDOW */
        hwndTT = CreateWindowEx(WS_EX_TOPMOST,
            TOOLTIPS_CLASS,
            NULL,
            WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            hwnd,
            NULL,
            ghThisInstance,
            NULL
            );    SetWindowPos(hwndTT,
            HWND_TOPMOST,
            0,
            0,
            0,
            0,
            SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);    /* GET COORDINATES OF THE MAIN CLIENT AREA */
        GetClientRect (hwnd, &rect);    /* INITIALIZE MEMBERS OF THE TOOLINFO STRUCTURE */
        ti.cbSize = sizeof(TOOLINFO);
        ti.uFlags = TTF_SUBCLASS;
        ti.hwnd = hwnd;
        ti.hinst = ghThisInstance;
        ti.uId = uid;
        ti.lpszText = lptstr;
            // ToolTip control will cover the whole window
        ti.rect.left = rect.left;    
        ti.rect.top = rect.top;
        ti.rect.right = rect.right;
        ti.rect.bottom = rect.bottom;    /* SEND AN ADDTOOL MESSAGE TO THE TOOLTIP CONTROL WINDOW */
        SendMessage(hwndTT, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti); } 
      

  3.   

    首先谢过楼上的朋友。继续请教各位还有具体详细的例子吗?怎么得到鼠标移动到该按键上的消息?我是基于dialog做的。
      

  4.   

    处理TTN_NEEDTEXT
    可参考一下
    mk:@MSITStore:F:\Program%20Files\Microsoft%20Visual%20Studio\MSDN\2001APR\1033\vcmfc.chm::/html/_mfc_ctoolbarctrl.3a_.handling_tool_tip_notifications.htm
      

  5.   

    很简单,
    只要在与toolbar里command相同id的string资源中用\n分割,加上注释即可--\n之后的字符串将出现在提示中。
    例如:
    toolbar中有一按钮“文件”的command id是IDC_OPENFILE
    那么,你需要做的就是在string 资源中加入一条id同样是IDC_OPENFILE,
    内容是:Open File \n 打开文件。
    在运行的时候,就会提示 "打开文件"了
      

  6.   

    楼上说的可能不行,在Dialog中,默认是没有处理TTN_NEEDTEXT,楼上的仅是加了资源,并不会显示,应该自己加上消息映射在三个地方加上响应代码1. afx_msg BOOL OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult);
    2.ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipText )
    3.BOOL CNetManagerDlg::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)
    {
    ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);

    // UNICODEÏûÏ¢
    TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
    TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
    //TCHAR szFullText[512];
    CString strTipText;
    CString strStatusText;
    UINT nID = pNMHDR->idFrom;

    if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
    pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
    {
    // idFromΪ¹¤¾ßÌõµÄHWND 
    nID = ::GetDlgCtrlID((HWND)nID);
    }

    if (nID != 0) //²»Îª·Ö¸ô·û
    {
    strTipText.LoadString(nID);
    int len =strTipText.Find('\n',0);
    strStatusText = strTipText.Left(len);
    strTipText = strTipText.Mid(len+1);
    SetToolTips(strStatusText);

    #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_NEEDTEXTA)
    {
    _wcstombsz(pTTTA->szText, strTipText,sizeof(pTTTA->szText));
    }
    else
    {
    lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
    }
    #endif
    *pResult = 0;
    // Ê¹¹¤¾ßÌõÌáʾ´°¿ÚÔÚ×îÉÏÃæ
    ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,SWP_NOACTIVATE|
    SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER); 
    return TRUE;
    }
    return TRUE;
    }
    想来楼主应该知道加载何处,当然你生成工具栏的时候已经设置了TOOLTIP风格了.
      

  7.   

    如果只想在按钮上动态显示tooltip,那么DeautyFan(悲情浪子) 已经说了,当然他的方法没有用MFC,显得有点繁琐,如果想让鼠标在按钮上移动时在状态条上显示提示,那么可以参考楼上的老兄所说的,但如果你的按钮有Disabled的,那么可能会有点问题,关键是Disabled的按钮会响应移入,但不响应移出,此时,需要在PreTranslateMsg里处理一下: if(pMsg->message== WM_MOUSELEAVE)
    {
    if(pMsg->hwnd == m_wndToolBar.GetSafeHwnd())
    {
    int index = m_wndToolBar.GetToolBarCtrl().GetHotItem();
    if(index < 0)
    {
    CString stem;
    CWnd * pStatic = GetDlgItem(IDC_STC_STATEBAR);
    pStatic->GetWindowText(stem);
    if(stem != "就绪")
    {
    pStatic->SetWindowText("就绪");
    }
    }
    }
    }