+ -
当前位置:首页 → 问答吧 → GDi+ ondraw() 图像被销毁

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//调试程序时将这句注释掉了
}

作者: wyw9122   发布时间: 2011-12-03

UP!帮顶!

作者: sduwuyuwenzjx   发布时间: 2011-12-03