我需要实时监控鼠标现在的位置,所以在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);
上面代码的作用就是将鼠标现在的位置输出,但是现在的问题是,当我有规律地移动鼠标时(如从左往右),发现输出的相应的位置坐标却不是有规律地变化,甚至不同的时间在同一个点上的输出也不一样(窗口的位置当然没有变化),因为我要用这个坐标进行计算,所以这样……请大家帮忙,谢谢了:)
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);
上面代码的作用就是将鼠标现在的位置输出,但是现在的问题是,当我有规律地移动鼠标时(如从左往右),发现输出的相应的位置坐标却不是有规律地变化,甚至不同的时间在同一个点上的输出也不一样(窗口的位置当然没有变化),因为我要用这个坐标进行计算,所以这样……请大家帮忙,谢谢了:)
{
// 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);}
类似的鼠标位置的程序,你看看,如果想要整个程序,可以留下你的邮箱
但加上以后会闪烁,那个就不是这里的问题了,谢谢各位:)