在CDrawView类中,增加了对鼠标左键和右键的消息响应函数。
在CDrawView类的头文件中,已经声明了
private:
CPoint m_old;在CDrawView::OnLButtonDown中,记录下了原点的位置。
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
m_old = point; //记录原点的位置
CView::OnLButtonDown(nFlags, point);
}
在CDrawView::OnLButtonUp中,进行画线
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
CWindowDC dc(GetDesktopWindow()); //
dc.MoveTo(m_old);
dc.LineTo(point);
CView::OnLButtonUp(nFlags, point);
}编译没有问题,但是结果非常不正确。
不能在非客户区画线。鼠标移到非客户区的话,应用程序会切换。
在客户区画线,线条会显示在客户区之外。开发环境是xp(sp2)+vc6.0
在CDrawView类的头文件中,已经声明了
private:
CPoint m_old;在CDrawView::OnLButtonDown中,记录下了原点的位置。
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
m_old = point; //记录原点的位置
CView::OnLButtonDown(nFlags, point);
}
在CDrawView::OnLButtonUp中,进行画线
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
CWindowDC dc(GetDesktopWindow()); //
dc.MoveTo(m_old);
dc.LineTo(point);
CView::OnLButtonUp(nFlags, point);
}编译没有问题,但是结果非常不正确。
不能在非客户区画线。鼠标移到非客户区的话,应用程序会切换。
在客户区画线,线条会显示在客户区之外。开发环境是xp(sp2)+vc6.0
{
CWindowDC dc(GetDesktopWindow()); //
dc.MoveTo(m_old);
dc.LineTo(point);
CView::OnLButtonUp(nFlags, point);
} 鼠标操作的point都是屏幕坐标的,而dc操作都是客户区坐标,两者需要转换
这句不是获取非客户区的dc吗?
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
ClientToScreen(&point); //加上这条语句CWindowDC dc(GetDesktopWindow()); //
dc.MoveTo(m_old);
dc.LineTo(point);
CView::OnLButtonUp(nFlags, point);
}
ClientToScreen(&point); 这句也加上了。但是还是只能在客户区画线。鼠标不能离开应用程序,如果鼠标移到非客户区的话,应用程序会切换。
该函数响应的是客户区事件,当然对NC_(非客户)消息无法响应!
这个函数的用法是得到一个桌面窗口的dc吧?得到这个dc之后,就应该可以在桌面窗口画线了啊!
另外,调用一下:Invalidate();
定义一个全局变量CPoint pt;
在视类里的两个消息响应函数:
OnLButtonDown: pt = point;
ClientToScreen(&pt);OnLButtonUp: CWindowDC dc(GetDesktopWindow()); //
dc.MoveTo(pt);
ClientToScreen(&point);
dc.LineTo(point);
在框架类里加两个消息(WM_NCLBUTTONUP,WM_NCLBUTTONDOWM,响应非客户区域左键点击)相应函数:
OnNcLButtonDown:pt = point;OnNcLButtonUp:
CWindowDC dc(GetDesktopWindow());
dc.MoveTo(pt);
dc.LineTo(point);
在视类里的两个消息响应函数:
OnLButtonDown: pt = point;
ClientToScreen(&pt); OnLButtonUp: CWindowDC dc(GetDesktopWindow()); //
dc.MoveTo(pt);
ClientToScreen(&point);
dc.LineTo(point);
在框架类里加两个消息(WM_NCLBUTTONUP,WM_NCLBUTTONDOWM,响应非客户区域左键点击)相应函数:
OnNcLButtonDown:pt = point; OnNcLButtonUp:
CWindowDC dc(GetDesktopWindow());
dc.MoveTo(pt);
dc.LineTo(point);