请大家提点提点,MFC中有没有使鼠标只能在一个圆(圆弧)上运动的方法? 大家各抒己见,MFC中有没有使鼠标只能在一个指定了半径的圆(只是圆弧,不包括圆内)上运动的方法? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 指定了半径的圆(只是圆弧,不包括圆内)上运动的方法?是指在指定的区域内用指定的光标吗?拦截WM_MOUSEMOVE消息,GetCursorPos函数得到光标位置,PtInRegion来判断是否在指定的区域内,在就setcursor设定光标,不在设定另一个光标 只在曲线上运动,这个有点难,一般思路还是处理WM_MOUSEMOVE,通过鼠标的位置来设定光标,不过很难做好,可以试试这样,先将圆的曲线坐标算好,存在一数组中,在WM_MOUSEMOVE中检查鼠标位置,如果不在曲线上,将光标拉到曲线上距离鼠标当前位置最近的点上来。 这么说还真是麻烦呢,还以为会有什么MFC库函数可用呢.... 不是清除你想要做的到底是什么;不过我感觉用mousemove消息应该是可以,圆弧的方程你已经知道了,你可以根据当前鼠标的位置来计算啊,比如根据当前鼠标的位置(100,200),你就根据横坐标100来计算圆弧上的纵坐标啊,然后将光标移到弧线上。如果要在上面响应左键或右键,也是同样的,只是根据方程稍微转换下位置坐标而已。 是不是这个意思,楼主可以试试看。void CXXXView::OnMouseMove(UINT nFlags, CPoint point) { CPoint ptCenter(200,200); double r = 100; double R = sqrt( (point.x - ptCenter.x)*(point.x - ptCenter.x) + (point.y - ptCenter.y)*(point.y - ptCenter.y)); if( fabs(R-r) < 1.0) return; CPoint ptOut; ptOut.x = ptCenter.x + (point.x - ptCenter.x) * r / R; ptOut.y = ptCenter.y + (point.y - ptCenter.y) * r / R; ClientToScreen(&ptOut); SetCursorPos(ptOut.x, ptOut.y);} 有关单选按钮 在线等,急 请教一个关于CImageList类的问题 按钮按下的问题 大家说是做一个程序员好还是做软件测试员好呢? 大家多帮忙,visual assist的问题 MFC的程序移植到SDK下有啥好的技巧吗?(150,online) 怎样解决旋转中的万向锁? 子窗口悬浮的问题 关于WORD格式一问???来者不拒!!! 够朋友的,进来看一看! 一道困扰办公室半个小时的争论 用VC开发的MapX如何实现地名地物的查找?
拦截WM_MOUSEMOVE消息,GetCursorPos函数得到光标位置,PtInRegion来判断是否在指定的区域内,在就setcursor设定光标,不在设定另一个光标
不过我感觉用mousemove消息应该是可以,圆弧的方程你已经知道了,你可以根据当前鼠标的位置来计算啊,比如根据当前鼠标的位置(100,200),你就根据横坐标100来计算圆弧上的纵坐标啊,然后将光标移到弧线上。
如果要在上面响应左键或右键,也是同样的,只是根据方程稍微转换下位置坐标而已。
void CXXXView::OnMouseMove(UINT nFlags, CPoint point)
{
CPoint ptCenter(200,200);
double r = 100;
double R = sqrt( (point.x - ptCenter.x)*(point.x - ptCenter.x) + (point.y - ptCenter.y)*(point.y - ptCenter.y));
if( fabs(R-r) < 1.0)
return;
CPoint ptOut;
ptOut.x = ptCenter.x + (point.x - ptCenter.x) * r / R;
ptOut.y = ptCenter.y + (point.y - ptCenter.y) * r / R;
ClientToScreen(&ptOut);
SetCursorPos(ptOut.x, ptOut.y);
}