本人需要让光标沿着曲线行走并显示十字线.
光标倒是可以沿着曲线行走.但是显示十字线却异常!不能显示十字线.如果去掉 SetCursorPos(client.left+point.x,client.top+ptside.y); 这行代码则可以显示.只是曲线不能沿着曲线行走.沿着曲线行走:在视图中.根据point.x 找到曲线对应y .移动光标到达即可.在MOUSEMOVE中处理.曲线显示在视图中RectCoord 矩形框内部.
处理完毕后.在onpaint里取得当前光标点位置并画十字线.代码如下:void CCurveCtrl::OnMouseMove(UINT nFlags, CPoint point)
{
................
if(m_bShowCross)
{
.......
if (iPoint<=-1) iPoint=0;
for (;(iPoint>-1)&& (iPoint < pCurve->m_ArrPoint.GetSize()-1);)
{
float fVside = k * fHori + b;
CPoint ptside;
CalculatePoint(fHori, fVside, ptside);
CRect client;
GetClientRect(&client);
ClientToScreen(&client);
::ClipCursor(&client);//锁定鼠标移动范围在客户区
SetCursorPos(client.left+point.x,client.top+ptside.y);
point.y=ptside.y;
::ClipCursor(NULL);//释放鼠标锁定
break;
}
}
....... Invalidate();
..
}void CCurveCtrl::OnPaint() CPoint point;
GetCursorPos(&point);
ScreenToClient(&point);
if(PtInRect(m_RectCoord, point))
{
// cross lines
if (/*!m_bEdit &&*/ m_bShowCross)
{
// color: using m_crAxis
CPen pentmp(PS_SOLID, 1, m_crAxis);
CPen *pOldPentmp=pdc->SelectObject(&pentmp); pdc->MoveTo(point.x, m_RectCoord.top);
pdc->LineTo(point.x, m_RectCoord.bottom);
pdc->MoveTo(m_RectCoord.left, point.y);
pdc->LineTo(m_RectCoord.right, point.y);
pdc->SelectObject(pOldPentmp);
}
光标倒是可以沿着曲线行走.但是显示十字线却异常!不能显示十字线.如果去掉 SetCursorPos(client.left+point.x,client.top+ptside.y); 这行代码则可以显示.只是曲线不能沿着曲线行走.沿着曲线行走:在视图中.根据point.x 找到曲线对应y .移动光标到达即可.在MOUSEMOVE中处理.曲线显示在视图中RectCoord 矩形框内部.
处理完毕后.在onpaint里取得当前光标点位置并画十字线.代码如下:void CCurveCtrl::OnMouseMove(UINT nFlags, CPoint point)
{
................
if(m_bShowCross)
{
.......
if (iPoint<=-1) iPoint=0;
for (;(iPoint>-1)&& (iPoint < pCurve->m_ArrPoint.GetSize()-1);)
{
float fVside = k * fHori + b;
CPoint ptside;
CalculatePoint(fHori, fVside, ptside);
CRect client;
GetClientRect(&client);
ClientToScreen(&client);
::ClipCursor(&client);//锁定鼠标移动范围在客户区
SetCursorPos(client.left+point.x,client.top+ptside.y);
point.y=ptside.y;
::ClipCursor(NULL);//释放鼠标锁定
break;
}
}
....... Invalidate();
..
}void CCurveCtrl::OnPaint() CPoint point;
GetCursorPos(&point);
ScreenToClient(&point);
if(PtInRect(m_RectCoord, point))
{
// cross lines
if (/*!m_bEdit &&*/ m_bShowCross)
{
// color: using m_crAxis
CPen pentmp(PS_SOLID, 1, m_crAxis);
CPen *pOldPentmp=pdc->SelectObject(&pentmp); pdc->MoveTo(point.x, m_RectCoord.top);
pdc->LineTo(point.x, m_RectCoord.bottom);
pdc->MoveTo(m_RectCoord.left, point.y);
pdc->LineTo(m_RectCoord.right, point.y);
pdc->SelectObject(pOldPentmp);
}
void CtestMFCView::OnMouseMove(UINT nFlags, CPoint point)
{
static bool a=false;
if(a){a=false; return;}
a=true;