我需要实时监控鼠标现在的位置,所以在OnMouseMove中加入了如下代码(简化过了):
CDC* pdc=GetDC();
char string[20];
memset(string,0,20);
sprintf(string,"%ld",point.x);
pdc->TextOut(200,200,string);
memset(string,0,20);
sprintf(string,"%ld",point.y);
pdc->TextOut(200,220,string);
CView::OnMouseMove(nFlags, point);
上面代码的作用就是将鼠标现在的位置输出,但是现在的问题是,当我有规律地移动鼠标时(如从左往右),发现输出的相应的位置坐标却不是有规律地变化,甚至不同的时间在同一个点上的输出也不一样(窗口的位置当然没有变化),因为我要用这个坐标进行计算,所以这样……请大家帮忙,谢谢了:)

解决方案 »

  1.   

    void CProgram51View::OnLButtonUp(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default CRect r;
    GetClientRect(&r); //获取窗口位置信息
    char * s;
    if (point.x>r.right/2) //判断鼠标是否在窗口右半部分
    if(point.y>r.bottom/2) //判断鼠标是否在窗口下半部分
    s="你现在位于第四区";
    else
    s="你现在位于第一区";
    else
    if(point.y>r.bottom/2)
    s="你现在位于第三区";
    else
    s="你现在位于第二区";
    MessageBox(s,"位置提示",MB_OK|MB_ICONEXCLAMATION);//弹出对话框
    CView::OnLButtonUp(nFlags, point);
    }void CProgram51View::OnMouseMove(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    CProgram51Doc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    pDoc->Text=IntToCStr(point.x)+","+IntToCStr(point.y);//将鼠标位置转化为字答串
    mPoint.x=point.x+20; //获取鼠标位置字符串输出位置
    mPoint.y=point.y;
    Invalidate(); //刷新视图
    CView::OnMouseMove(nFlags, point);
    }
    //自定义将整型值转化为字符串的函数
    CString CProgram51View::IntToCStr(int Num)
    {int i;
    CString strnum="";
    char c;while(Num>0)
    {
    i=Num%10; //求余取Num的最后一位值
    c='0';
    c=c+i; //取得Num最后一位的ASCII码字符值
    strnum+=(char)c;//将Num最后一位的ASCII码字符加入字符串中
    Num=Num/10; //将Num右移
    }
    strnum.MakeReverse(); //将字符串首尾倒置得到正确的字符串顺序
    return strnum;
    }
    void CProgram51View::OnDraw(CDC* pDC)
    {
    CProgram51Doc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
    pDC->TextOut(mPoint.x,mPoint.y,pDoc->Text);}
    类似的鼠标位置的程序,你看看,如果想要整个程序,可以留下你的邮箱
      

  2.   

    哈哈,发现了,出错的原因主要是没有写Invalidate();;
    但加上以后会闪烁,那个就不是这里的问题了,谢谢各位:)