vc画线的一点问题

tyanfeng_00 2012-08-18 03:42:14
我想用vc的MFC画一条线,要求画在OnDraw里面,并在画线的时候显示鼠标移动.
...全文
89 点赞 收藏 5
写回复
5 条回复
hj976122401 2012年08月19日
[Quote=引用 4 楼 的回复:]
可不可以具体点,我就准备通过OnLbuttonDown OnMouseMove OnLButtonUp函数来实现直线的绘制,但是具体怎么搞不是很明白.
[/Quote]

要一直让鼠标显示的话可以将设置鼠标光标的属性,可以用LoadStandardCursor()这个函数来设置光标的形状。然后在鼠标按下OnLButtonDown()函数里调用SetCapture()和SetCursor()来获取光标。接下来你再在OnLbuttonDown OnMouseMove OnLButtonUp添加你想划线的程序就可以了。

下面这个是我们VC课考试的编程题,你可以参考一下:

题目:用MFC做一个画线程序,要求:1,鼠标按下画线时鼠标成十字形一直显示;2,鼠标弹起时结束画线

下面是我的程序:

首先创建一个工程名为Draw的单文档程序

一、在CDrawView头文件里加上几个参数:

class CDrawView : public CView
{
protected: // create from serialization only
CDrawView();
DECLARE_DYNCREATE(CDrawView)
int m; //m用来判断鼠标是否按下
CPoint p1, p2; //p1,p2是记录两个点,画线时从p1到p2
HCURSOR m_hMyCursor; //定义光标类型
}

二、在初始化函数CDrawView里添加如下代码:

m = 0;//初始化变量,表示鼠标没有按下

m_hMyCursor = AfxGetApp()->LoadStandardCursor (MAKEINTRESOURCE(IDC_CROSS));//设置光标的形状

AfxGetApp->LoadStandardCursor();//加载光标,IDC_CROSS表示十字形


三、设置消息鼠标按下时,SetCapture();函数捕获光标。

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
SetCapture();//捕获光标
SetCursor(m_hMyCursor);//m_hMyCursor 在初始化时已经将他设置成十字形了
CClientDC dc(this);
m = 1; //表示鼠标已按下
p1 = point;
}

四、设置鼠标消息当鼠标弹起时

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
p2 = point;
CClientDC dc(this);
OnPrepareDC(&dc);
dc.MoveTo (p1);
dc.LineTo (p2);
m = 0; //表示鼠标已弹起
ReleaseCapture();//释放光标
}

五、添加设置鼠标移动过程的功能函数

void CDrawView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
static int n = 0;
switch(++n)
{
case 1:
p2 = point;
break;
case 2:
p1 = p2;
p2 = point;
n = 0;
break;
}
CClientDC dc(this);
OnPrepareDC(&dc);
if(1 == m) //如果鼠标按下,则画线
{
dc.MoveTo (p1);
dc.LineTo (p2);
}
CView::OnMouseMove(nFlags, point);
}


希望对你有帮助!
回复 点赞
tyanfeng_00 2012年08月18日
可不可以具体点,我就准备通过OnLbuttonDown OnMouseMove OnLButtonUp函数来实现直线的绘制,但是具体怎么搞不是很明白.
回复 点赞
starhuhu 2012年08月18日
如果 这样 光靠OnDraw是完不成任务的,
需要 定义全局鼠标位置的变量,
在OnLbuttonDown OnMouseMove OnLButtonUp中 改变这个变量
然后 在OnDraw里面绘制这个变量 ,记得擦出前面绘制的痕迹。

还有 要不断刷新OnDraw,因为OnDraw不会连续刷新的
回复 点赞
南京短暂的春天 2012年08月18日
貌似说的就是橡皮筋
如果你需要的话
可以把MFC windows编程那里的例子拿出来看下
有现成的
回复 点赞
starhuhu 2012年08月18日
是不是 像橡皮筋一样的东西, 楼主说 鼠标移动,鼠标一直都在移动 啊 ?
描述清楚点
回复 点赞
发动态
发帖子
VC/MFC
创建于2007-09-28

7898

社区成员

42.1w+

社区内容

VC/MFC相关问题讨论
社区公告
暂无公告