如何弹出鼠标提示?我要在鼠标移到view客户区的时候弹出鼠标提示,请问要怎么做??,用什么来弹出鼠标提示?

解决方案 »

  1.   

    CString str="mystring";CDC* pDC=new CDC;pDC=GetDC();pDC->TextOut(x,y,str,str.GetLength());
      

  2.   

    是不是tooltips啊创建一个ctooltips对象啊 ON_NOTIFY_EX(TTN_NEEDTEXTW, 0, OnToolTipText)
    ON_NOTIFY_EX(TTN_NEEDTEXTA, 0, OnToolTipText)
    处理上面的消息
      

  3.   

    1.在CView中加入类变量CToolTipCtrl m_toolTip;
    2.加入消息处理函数
    //{{AFX_MSG(CEMapView)
    //}}AFX_MSG
    afx_msg BOOL OnToolTipText(UINT id, NMHDR * pNMHDR, LRESULT * pResult);
    DECLARE_MESSAGE_MAP()
    3.加入消息映射
    BEGIN_MESSAGE_MAP(CEMapView, CView)
    //{{AFX_MSG_MAP(CEMapView)
    //}}AFX_MSG_MAP
    ON_NOTIFY_EX(TTN_NEEDTEXTW, 0, OnToolTipText)
    ON_NOTIFY_EX(TTN_NEEDTEXTA, 0, OnToolTipText)
    END_MESSAGE_MAP()
    4.创建提示
    int CEMapView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
    {
    if (CView::OnCreate(lpCreateStruct) == -1)
    return -1;

    EnableToolTips(TRUE);

    CRect rcTool(0, 0, 1000, 1000); if (m_toolTip.Create(this, TTS_ALWAYSTIP) 
     && m_toolTip.AddTool(this, LPSTR_TEXTCALLBACK, &rcTool, TOOLTIP_ID) )
    {
    m_toolTip.SendMessage(TTM_SETMAXTIPWIDTH, 0, SHRT_MAX);
    m_toolTip.SendMessage(TTM_SETDELAYTIME, TTDT_AUTOPOP, SHRT_MAX);
    m_toolTip.SendMessage(TTM_SETDELAYTIME, TTDT_INITIAL, 200);
    m_toolTip.SendMessage(TTM_SETDELAYTIME, TTDT_RESHOW, 200);
    } return 0;
    }
    5.传递消息给提示控件
    BOOL CEMapView::PreTranslateMessage(MSG* pMsg) 
    {
    if (::IsWindow(m_toolTip.m_hWnd) && pMsg->hwnd == m_hWnd)
    {
    switch(pMsg->message)
    {
    case WM_LBUTTONDOWN:
    case WM_MOUSEMOVE:
    case WM_LBUTTONUP:
    case WM_RBUTTONDOWN:
    case WM_MBUTTONDOWN:
    case WM_RBUTTONUP:
    case WM_MBUTTONUP:
    m_toolTip.RelayEvent(pMsg);
    break;
    }
    }

    return CView::PreTranslateMessage(pMsg);
    }
    6.激活设置提示
    m_toolTip.SetToolRect(this, TOOLTIP_ID, &rcTool);//TOOLTIP_ID自己定义的ID
    m_toolTip.Activate(TRUE);
    7.提示消息函数
    BOOL CEMapView::OnToolTipText(UINT id, NMHDR * pNMHDR, LRESULT * pResult)
    {
    CPoint ptCursorPos;
    VERIFY(::GetCursorPos(&ptCursorPos));
    ScreenToClient(&ptCursorPos); CRect rcClient;
    GetClientRect(&rcClient); TOOLTIPTEXT* pTTT = (TOOLTIPTEXT*)pNMHDR;
    pTTT->szText[0] = '\0'; if (!rcClient.PtInRect(ptCursorPos))
    return FALSE; TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
    TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
             LPCTSTR lpszInfoText = _T("Tool tips");//设置提示内容
             int nStrLen = _tcslen(lpszInfoText);
    #ifndef _UNICODE
    if (pNMHDR->code == TTN_NEEDTEXTA)
    lstrcpyn(pTTTA->szText, lpszInfoText, nStrLen);
    else
    _mbstowcsz(pTTTW->szText, lpszInfoText, nStrLen);
    #else
    if (pNMHDR->code == TTN_NEEDTEXTA)
    _wcstombsz(pTTTA->szText, lpszInfoText, nStrLen);
    else
    lstrcpyn(pTTTW->szText, lpszInfoText, nStrLen);
    #endif
    *pResult = 0; return TRUE;
    }
    //具体的函数可以查看MSDN
      

  4.   

    to wuxfBrave(升星了,休息休息)
    用的ToolTips消息处理结果,是不是就是实现VC编程中的那种黄色的提示便签?
    (当鼠标在一个函数上面停留一会儿,就会出现一个便签。)
    上次我在论坛看了,他们都讨论用一个对话框,实现这个便签功能,你如果用这个方法就实现了这个功能,那真的很厉害。
      

  5.   

    是啊就用上面的方法就可以阿,
    实现类似vc的功能,要结合处理WM_MOUSEMOVE的消息,判断当前鼠标下的东西是什么东西,如果是需要提示的东西,就激活tooltips,设置提示的显示rect,并且记下需要提示的内容
    然后在OnToolTipText中填入即可
    m_toolTip.SetToolRect(this, TOOLTIP_ID, &rcTool);//TOOLTIP_ID自己定义的ID
    m_toolTip.Activate(TRUE);
    不需要就m_toolTip.Activate(FALSE);