如何用VC做出类似Web中当鼠标掠过指定区域时出现提示信息?既Java中的OnMouseOver效果。

解决方案 »

  1.   

    或者在OnMouseMove()里加入:
    CRect rc(0,0,300,300);//自己指定区域
    ScreenToClient(&rc);  
    if(rc.PtInRect(point))
    {
    CDC *dc=GetDC();
    dc->TextOut(rc.left,rc.top,"提示");
    }
      

  2.   

    Ctrl+W
    调出类向导,
    然后找到WM_MOUSEMOVE,击添加OnMouseMove()函数,
    然后在对应的函数里把如上代码加入即可
      

  3.   

    自己绘制一个tooltip,就是写字
      

  4.   

    www.vckbase.com 上慢慢去找吧
      

  5.   

    你可以试着在你的对话框上建一个picture control,
    ID设为IDC_PICTURE1;
    然后把刚才的代码改为:
    CRect rc;//自己指定区域
    GetDlgItem(IDC_MYPICTURE1)->GetWindowRect(&rc);
    ScreenToClient(&rc);  
    if(rc.PtInRect(point))
    {
    CDC *dc=GetDC();
    dc->TextOut(rc.left,rc.top,"提示");
    }
      

  6.   

    风老大,我就是按照你说的方法写的
    void CTP04Dlg::OnMouseMove(UINT nFlags, CPoint point)
    {
    CRect rc; CWnd* pWnd = GetDlgItem(IDC_EDIT1);
    pWnd->GetWindowRect(rc);

    if(rc.PtInRect(point))
    {
    CClientDC dc(this);
    dc.TextOut(0,0,"提示");
    }    
    CDialog::OnMouseMove(nFlags, point);
    }
    编译正常,可是没反应
      

  7.   

    我回答过一个相似的问题,用tooltip吧。
    方法如下:利用 VC++ 中的 WM_SETCURSOR 与 TTN_NEEDTEXT 1。编辑对话框控件的字符串资源 例如: IDC_DBBUTTON1 = "icedot \n 哈哈 tooltip", 其中字符串"icedot"将在鼠标移到控件上时显示在状态条上,字符串"哈哈 toolitp  "将作为 ToolTip 显示。 2。建立消息映射。 在对话框的头文件 (*.H) 中加入以下代码: protected:
        void SetStatusText(UINT nID=0);
        //{{AFX_MSG(CFileOp1)
        afx_msg void OnDestroy();
        afx_msg BOOL OnSetCursor(CWnd* pWnd, 
        UINT nHitTest, UINT message);
        //}}AFX_MSG
        afx_msg BOOL OnTipNotify( UINT id, NMHDR *
         pNMHDR, LRESULT * pResult );
        DECLARE_MESSAGE_MAP()在对话框的实现文件 (*.CPP) 中加入以下代码: BEGIN_MESSAGE_MAP(CFileOp1, CDialog)
        //{{AFX_MSG_MAP(CFileOp1)
        ON_WM_DESTROY()
        ON_WM_SETCURSOR()
        //}}AFX_MSG_MAP
        ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnTipNotify)
    END_MESSAGE_MAP()3。编辑消息处理函数。 BOOL CFileOp1::OnSetCursor
    (CWnd* pWnd, UINT nHitTest, UINT message) 
    {
    // TODO: Add your message handler 
     code here and/or call default
        if(pWnd==this)
            SetStatusText();
        else
        {
            TOOLTIPTEXT m_psttt;
            m_psttt.hdr.hwndFrom=m_hWnd;
            m_psttt.hdr.idFrom=pWnd- >GetDlgCtrlID();
            m_psttt.hdr.code=TTN_NEEDTEXT;
            m_psttt.uFlags= TTF_IDISHWND;
            SetStatusText(pWnd- >GetDlgCtrlID());
            this- >SendMessage(WM_NOTIFY,
            m_psttt.hdr.idFrom,(LPARAM)&m_psttt);
        }
    return CDialog::OnSetCursor
     (pWnd, nHitTest, message);
    }void CFileOp1::OnDestroy() 
    {
        SetStatusText();
        CDialog::OnDestroy();
    }void CFileOp1::SetStatusText(UINT nID)
    {
        if(nID==0)
            nID=AFX_IDS_IDLEMESSAGE;
        CWnd *pWnd=AfxGetMainWnd()- >GetDescendantWindow
        (AFX_IDW_STATUS_BAR);
        if(pWnd)
        {
            AfxGetMainWnd()- >SendMessage
            (WM_SETMESSAGESTRING ,nID);
            pWnd- >SendMessage(WM_IDLEUPDATECMDUI);
            pWnd- >UpdateWindow();
        }
    }BOOL CFileOp1::OnTipNotify( UINT id, NMHDR *
     pNMHDR, LRESULT * pResult )
    {
        TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
        UINT nID =pNMHDR- >idFrom;
        if (pTTT- >uFlags & TTF_IDISHWND)
        {
            nID = ::GetDlgCtrlID((HWND)nID);
            if(nID)
            {
            TCHAR szFullText[256];
            CString StrTipText;
            AfxLoadString(nID,szFullText);
            AfxExtractSubString(StrTipText,
            szFullText,1,'\n');
            if(!StrTipText.IsEmpty())
                strcpy(pTTT-  >lpszText,StrTipText);
                pTTT-  >hinst = AfxGetResourceHandle();
                return(TRUE);
            }
        }
        return(FALSE);
    }在 Stdafx.h 文件中加入以下指令:     #include 〈 afxpriv.h>
        #include 〈 afxres.h>
    将该对话框作为一个 SDI 或 MDI 应用程序的主框架的子窗口,生成这样一个对话框后,当你把鼠标移到某个控件 ( 必须有相应的字符串资源 )上时,就会出现该控件的 ToolTip 和状态条信息。 
    试试
      

  8.   

    void CTP04Dlg::OnMouseMove(UINT nFlags, CPoint point)
    {
    CRect rc; CWnd* pWnd = GetDlgItem(IDC_EDIT1);
    pWnd->GetWindowRect(rc);

    if(rc.PtInRect(point))
    {
    CClientDC dc(this);
    dc.TextOut(0,0,"提示");
    }    
    CDialog::OnMouseMove(nFlags, point);
    }
    麻烦请告知如何修改这段代码以实现功能好吗?
    前面用rc获得控件的区域,然后用PtInRect来检测鼠标是否在控件范围内。
    然后输入文本。
    请帮我修改一下这程序好吗?
      

  9.   

    你要SreentoClient一下吧?你这么得到的是屏幕的坐标,自然没反应。我做过一个HyperLink控件,做得比这个方法好,但是比这个复杂,直接在控件中判断鼠标位置。你要想要我晚上可以发给你,现在在公司没有
      

  10.   

    我具体说明一下:使用MFC创建基于对话框的程序,并对Dlg类映射WM_MOUSEMOVE消息,先修改OnMouseMove函数如下:void CTP05Dlg::OnMouseMove(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    CRect rc;
    CWnd* pWnd = GetDlgItem(IDC_EDIT1);
    pWnd->GetWindowRect(rc); ScreenToClient(&rc);  
    if(rc.PtInRect(point))
    {
    CDC *dc=GetDC();
    dc->TextOut(rc.left,rc.top,"提示");
    }
    CDialog::OnMouseMove(nFlags, point);
    }编译正常,却没有任何效果。版本为VS2003。
    诚心请教各位。
      

  11.   

    runner111,这里先谢过你了,我的信箱是[email protected],不限制大小。
      

  12.   

    呵呵,哪有那么复杂
    参考一个 CButtonST 的源码就什么都清楚了