none
怎么在vc2008中动态显示一点坐标! RRS feed

  • 问题

  • 怎么在vc2008中建立多文档应用程序,当鼠标移动到那时,自动在鼠标位置旁边动态显示哪一点坐标!显示格式(x,y);求大神指教!!!
    I can do!
    2011年4月8日 11:07

答案

  • 给你个CToolTipCtrl的实现:在View类中添加个CToolTipCtrl m_tt;成员变量

    在View类的虚函数OnInitialUpdate()中加入

    void CXXXView::OnInitialUpdate()
    {
     CView::OnInitialUpdate();
     
     // TODO: Add your specialized code here and/or call the base class
     EnableToolTips(TRUE);
     m_tt.Create(this);
     m_tt.Activate(TRUE);
     m_tt.AddTool(this);
    }

    在View类的虚函数PreTranslateMessage() 中加入:

    BOOL CXXXView::PreTranslateMessage(MSG* pMsg)
    {
     // TODO: Add your specialized code here and/or call the base class
     if(m_tt.GetSafeHwnd())
      m_tt.RelayEvent(pMsg);

     return CView::PreTranslateMessage(pMsg);
    }

    View中添加处理WM_MOUSEMOVE消息

    void CXXXView::OnMouseMove(UINT nFlags, CPoint point)
    {
     // TODO: Add your message handler code here and/or call default
     CString str;
     str.Format(_T("x: %d, y: %d"), point.x, point.y);
     m_tt.UpdateTipText(str, this);
     CView::OnMouseMove(nFlags, point);
    }


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    • 已标记为答案 lmjjw 2011年4月8日 12:35
    2011年4月8日 12:28
    版主

全部回复

  • 您可以在View类中处理WM_MOUSEMOVE消息,在该WM_MOUSEMOVE消息的消息响应函数中利用_TrackMouseEvent()来处理WM_MOUSEHOVER/WM_MOUSELEAVE消息,在WM_MOUSEHOVE中可以弹出一个非模态对话框来显示当前的坐标。
    或者使用CToolTipCtrl来显示,http://blogold.chinaunix.net/u/28371/showart_435462.html


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年4月8日 12:16
    版主
  • 给你个CToolTipCtrl的实现:在View类中添加个CToolTipCtrl m_tt;成员变量

    在View类的虚函数OnInitialUpdate()中加入

    void CXXXView::OnInitialUpdate()
    {
     CView::OnInitialUpdate();
     
     // TODO: Add your specialized code here and/or call the base class
     EnableToolTips(TRUE);
     m_tt.Create(this);
     m_tt.Activate(TRUE);
     m_tt.AddTool(this);
    }

    在View类的虚函数PreTranslateMessage() 中加入:

    BOOL CXXXView::PreTranslateMessage(MSG* pMsg)
    {
     // TODO: Add your specialized code here and/or call the base class
     if(m_tt.GetSafeHwnd())
      m_tt.RelayEvent(pMsg);

     return CView::PreTranslateMessage(pMsg);
    }

    View中添加处理WM_MOUSEMOVE消息

    void CXXXView::OnMouseMove(UINT nFlags, CPoint point)
    {
     // TODO: Add your message handler code here and/or call default
     CString str;
     str.Format(_T("x: %d, y: %d"), point.x, point.y);
     m_tt.UpdateTipText(str, this);
     CView::OnMouseMove(nFlags, point);
    }


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    • 已标记为答案 lmjjw 2011年4月8日 12:35
    2011年4月8日 12:28
    版主
  • 非常感谢你!谢谢!
    I can do!
    2011年4月8日 12:35