VC 重绘问题 例如:画线画矩形画圆等等都由用户操作(类似WINDOW自带的画图软件),要怎么解决重绘问题

 我来答
百度网友38c8e98
2011-10-25 · TA获得超过2657个赞
知道小有建树答主
回答量:1131
采纳率:0%
帮助的人:580万
展开全部
用MetaFile来解决
MetaFile是绘图函数二进制记录的集合,MetaFile可以保存在内存,也可以保存在磁盘
每次用户绘图,既在hdc上绘制,也在MetaFile中绘制,在WM_PAINT中播放MetaFile
case WM_CREATE:
hdc=GetDC(hwnd);
hmetadc=CreateMetaFile("D:\\1.wmf");

// hbitmap=CreateCompatibleBitmap(hmetadc,50,100);
// SelectObject(hmetadc,hbitmap);
SelectObject(hmetadc,GetStockObject(BLACK_BRUSH));
Ellipse(hmetadc,0,0,50,100);

CloseMetaFile(hmetadc);
ReleaseDC(hwnd,hdc);
break;
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);

hmetafile=GetMetaFile("D:\\1.wmf");
SetWindowOrgEx(hdc,-100,-100,NULL);
PlayMetaFile(hdc,hmetafile);
DeleteMetaFile(hmetafile);

EndPaint(hwnd,&ps);
break;
我习惯了用旧版的MetaFile,还有增强版的MetaFile,比较复杂
更多追问追答
追问
OnPaint的写在OnDraw里了,能运行了,文件1.wmf也有保存下来,不过没图的,也没解决重绘
void CDrawView::OnDraw(CDC* pDC)
{
// TODO: add draw code for native data here
pDC->BeginPath();
HMETAFILE hmetafile=GetMetaFile("D:\\1.wmf");
SetWindowOrgEx(pDC->m_hDC,-100,-100,NULL);
PlayMetaFile(pDC->m_hDC,hmetafile);
DeleteMetaFile(hmetafile);
pDC->EndPath();
}
追答
DeleteMetaFile(hmetafile);
要去掉这句,删除了再次PAINT的时候又清空了
匿名用户
2011-10-24
展开全部
采用双缓冲区了。
画图在内存上画,然后Bitblt上去。
追问
刚才我去看了一下,不过这些都是写在OnDraw里的,而我的绘画都在鼠标弹起事件里
追答
鼠标弹起,只是用来记录一些点吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
何处淬吴钩
2011-10-24 · TA获得超过5043个赞
知道大有可为答主
回答量:2947
采纳率:50%
帮助的人:2390万
展开全部
记录下你画图的参数(如线的两个端点、圆的圆心与半径等),在OnDraw或OnPaint中再把已经画好的图形重新绘制一次。
更多追问追答
追问
怎么保存?能详细点么,谢谢,(要是这样保存了,怎么实现橡皮刷?(可以不用考虑= =))
追答
比如,矩形,记录下左上角顶点坐标和右下角顶点坐标就可以了,而圆,记下圆的外接矩形就成了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
KNOWS2
2011-10-24
知道答主
回答量:6
采纳率:0%
帮助的人:9948
展开全部
可以参考下写电子白板的程序
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式