GDi+ ondraw() 图像被销毁
时间:2011-12-03
来源:互联网
本人菜鸟,真的是不知道怎么解决了啊,实在不好意思
我在单文档中建立了一个Graphics对象,然后在ondraw()中初始化了这两个对象,然后执行了绘图的程序,初始化程序由于需要使用到当前DC,所以没放到构造函数中,而是在ondraw()中判断标识位,程序执行了之后发现没有图像输出,分析起来我又看不出毛病,我稍微改动了下程序Debug了一下,发现,不是没有输出,而是,在第一次执行的时候,执行了初始化代码,然后执行绘图,就形成了输出了,然后继续执行,就跳过了初始化程序,直接执行绘图的程序,可是这时候就没有输出了
我就一直想搞清楚,这个使用GDi+画出来的图像是什么时候被销毁的?如果说是在Graphics对象被销毁时销毁,我这次保存了Graphics对象啊
//头文件中定义:
CDC memDC1;//用于保存原图像
CDC memDC2;//用于保存放大后的图像
POINT midPoint;//缩放后当前DC的中点坐标,初始化为当前DC中的中点坐标
float times;//保存memDC2中图像相对memDC1中放大了多少倍
int flag;//标识onDraw是否是第一次执行
CRect rect;
int width;//初始图片宽度
int height;//初始图片高度
Gdiplus::Graphics * gr1;
Gdiplus::Graphics * gr2;
//我的ondraw()
void Couter_newView::OnDraw(CDC* pDC)
{
Couter_newDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
if(flag==0)//第一次执行时初始化
{
memDC1.CreateCompatibleDC(pDC);
memDC2.CreateCompatibleDC(pDC);
gr1=Graphics::FromHDC(memDC1.GetSafeHdc());//后来改用gr1=Graphics::FromHDC(pDC->GetSafeHdc());进行调试,测试可行性
gr2=Graphics::FromHDC(memDC2.GetSafeHdc());
times=1;
width=wywlist.getWidth();
height=wywlist.getHeight();
this->GetClientRect(&rect);
midPoint.x=rect.Width()/2;
midPoint.y=rect.Height()/2;
flag=1;
}
wywlist.readFile1(gr1,"china.zb1");//读入文件绘图
wywlist.readFile2(&memDC1,"china.zj1");//读入文件绘图
copyDC(times);//memDC1拷贝到memDC2
wywlist.readFile3(gr2,times,"china.zb1");//读入文件绘图
this->GetClientRect(&rect);
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&memDC2,(int)(midPoint.x-((rect.Width())/2/times)),(int)(midPoint.y-((rect.Height())/2/times)),SRCCOPY);//将memDC2中的指定坐标输出到当前DC//调试程序时将这句注释掉了
}
我在单文档中建立了一个Graphics对象,然后在ondraw()中初始化了这两个对象,然后执行了绘图的程序,初始化程序由于需要使用到当前DC,所以没放到构造函数中,而是在ondraw()中判断标识位,程序执行了之后发现没有图像输出,分析起来我又看不出毛病,我稍微改动了下程序Debug了一下,发现,不是没有输出,而是,在第一次执行的时候,执行了初始化代码,然后执行绘图,就形成了输出了,然后继续执行,就跳过了初始化程序,直接执行绘图的程序,可是这时候就没有输出了
我就一直想搞清楚,这个使用GDi+画出来的图像是什么时候被销毁的?如果说是在Graphics对象被销毁时销毁,我这次保存了Graphics对象啊
//头文件中定义:
CDC memDC1;//用于保存原图像
CDC memDC2;//用于保存放大后的图像
POINT midPoint;//缩放后当前DC的中点坐标,初始化为当前DC中的中点坐标
float times;//保存memDC2中图像相对memDC1中放大了多少倍
int flag;//标识onDraw是否是第一次执行
CRect rect;
int width;//初始图片宽度
int height;//初始图片高度
Gdiplus::Graphics * gr1;
Gdiplus::Graphics * gr2;
//我的ondraw()
void Couter_newView::OnDraw(CDC* pDC)
{
Couter_newDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
if(flag==0)//第一次执行时初始化
{
memDC1.CreateCompatibleDC(pDC);
memDC2.CreateCompatibleDC(pDC);
gr1=Graphics::FromHDC(memDC1.GetSafeHdc());//后来改用gr1=Graphics::FromHDC(pDC->GetSafeHdc());进行调试,测试可行性
gr2=Graphics::FromHDC(memDC2.GetSafeHdc());
times=1;
width=wywlist.getWidth();
height=wywlist.getHeight();
this->GetClientRect(&rect);
midPoint.x=rect.Width()/2;
midPoint.y=rect.Height()/2;
flag=1;
}
wywlist.readFile1(gr1,"china.zb1");//读入文件绘图
wywlist.readFile2(&memDC1,"china.zj1");//读入文件绘图
copyDC(times);//memDC1拷贝到memDC2
wywlist.readFile3(gr2,times,"china.zb1");//读入文件绘图
this->GetClientRect(&rect);
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&memDC2,(int)(midPoint.x-((rect.Width())/2/times)),(int)(midPoint.y-((rect.Height())/2/times)),SRCCOPY);//将memDC2中的指定坐标输出到当前DC//调试程序时将这句注释掉了
}
作者: wyw9122 发布时间: 2011-12-03
UP!帮顶!
作者: sduwuyuwenzjx 发布时间: 2011-12-03
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28