初学者求教.如何保持LineTo()出来的线条不被擦除?????

chengyumao 2004-10-04 05:08:25
代码如下.
void CGraphDlg::OnMouseMove(UINT nFlags, CPoint point)
{
if (nFlags&MK_LBUTTON)
{
vMyDC->LineTo(vOldPoint);
vMyDC->MoveTo(point);
}
CDialog::OnMouseMove(nFlags, point);
}
是一个用鼠标画线的程序,但只要一有刷新窗口的动作,图案就没了......>_<~~我用了SaveDC但没什么做用(只是移动时图像不被擦除,查资料后得知这个函数只保存DC相关参数,不保存图像),查了一下,难道要把它存成文件,然后再复原?????不用这么大动干戈吧......请高人指教啊.....一定给分....
...全文
99 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
pingpz 2004-10-07
我认为主要要搞清楚
vMyDC->LineTo(vOldPoint);
vMyDC->MoveTo(point);
画出来的图形保放在哪里!在vMyDC里吗?还是在View里?
小弟很想知道!
回复
chengyumao 2004-10-06
.....谢谢楼上的方法,解决了,回头查查这个CMetaFileDC 类。。。。。。。怎么从没听说过。。。。。呵
回复
lezhanhong 2004-10-05
不好意思啊?还没有写完就发了。重来。
用CMetaFileDC类试一下。具体如下:
1.在你的CGraphDlg类中加一个private的变量 CMetaFileDC* m_pMF;
2.在OnInitDialog中初始化。
m_pMF=new CMetaFileDC;
m_pMF->Create();
3.把你的OnMouseMove改为
void CGraphDlg::OnMouseMove(UINT nFlags, CPoint point)
{
if (nFlags&MK_LBUTTON)
{
vMyDC->LineTo(vOldPoint);
m_pMF->LineTo(vOldPoint);
vMyDC->MoveTo(point);
m_pMF->MoveTo(point);
}
CDialog::OnMouseMove(nFlags, point);
}
4.在OnPaint()中将下面一段改成这样
else
{
CPaintDC dc(this);
HMETAFILE hmf=m_pMF->Close();
dc.PlayMetaFile(hmf);
CMetaFileDC* temp=new CMetaFileDC;
temp->Create();
temp->PlayMetaFile(hmf);
DeleteMetaFile(hmf);
delete m_pMF;
m_pMF=temp;
CDialog::OnPaint();
}
5.重载WM_DESTROY消息将m_pMF释放。
m_pMF->Close();
delete m_pMF;
回复
lezhanhong 2004-10-05
用CMetaFileDC类试一下。具体如下:
1.在你的CGraphDlg类中加一个private的变量 CMetaFileDC* m_pMF;
2.在OnInitDialog中初始化。
m_pMF=new CMetaFileDC;
m_pMF->Create();

回复
tengfei2005 2004-10-05
在OnDraw里用LineTo就可以拉
回复
chengyumao 2004-10-05
顶一顶啊........还有灭人帮一帮啊.........
回复
chengyumao 2004-10-04
.......如果真的只能保存的话,CDC类有没有什么只存画过路径的方法??实在没有的话,我只好自己记录鼠标动作了.........~~~~T_T~~~
回复
kugou123 2004-10-04
应该还是要保存图形的。不然刷新,什么都没了。
回复
chengyumao 2004-10-04
哦这个.........主要是因为用鼠标画的图不是确定的,如果要一次性重画出来的话不是要记录鼠标的移动了??
回复
cadinfo 2004-10-04
可以尝试其它的方法,尽量将绘图代码放在OnDraw中
例如你在鼠标移动时候只是改变变量状态,刷新时候在OnDraw中绘制图形
回复
相关推荐
发帖
图形处理/算法
创建于2007-09-28

1.9w+

社区成员

VC/MFC 图形处理/算法
申请成为版主
帖子事件
创建了帖子
2004-10-04 05:08
社区公告
暂无公告