孙鑫vc学习笔记_第11课_part4

来源:互联网 发布:ueba 网络事件 编辑:程序博客网 时间:2024/06/05 02:28
 
#另外两种保存图形和重绘图形的方式01:47
(1)CMetaFileDC 源文件DC
×A Windows metafile contains a sequence of graphics device interface (GDI) commands that you can replay(重放) to create a desired image or text.
×相当于一个画布。绘制的时候是看不见的,绘好之后可以播放它。
×它包含的是绘制图形的各个命令。
CDC::PlayMetaFile用来播放源文件
 
1#CMetaFileDC m_dcMetaFile;
2#m_dcMetaFile.Create();//参数为NULL则一个内存源文件被创建
3#把绘图时的dc都换成m_dcMetaFile
4#ONDRAW中使用close来返回一个源文件的句柄
 HMETAFILE hmetaFile;
 hmetaFile=m_dcMetaFile.Close();
 pDC->PlayMetaFile(hmetaFile);//播放
//再次创建一个源文件
 m_dcMetaFile.Create();
//在源文件dc中播放先前的源文件,从而保存了上次的操作
 m_dcMetaFile.PlayMetaFile(hmetaFile);
//删除源文件资源
 DeleteMetaFile(hmetaFile);
 
#把源文件保存到文件中
添加菜单上打开和保存的命令响应
×CopyMetaFile
void CGraphicView::OnFileSave()
{
 // TODO: Add your command handler code here
 HMETAFILE hmetaFile;
 hmetaFile=m_dcMetaFile.Close();
 CopyMetaFile(hmetaFile,"meta.wmf");//扩展名一定的吗?
 m_dcMetaFile.Create();
 DeleteMetaFile(hmetaFile);
}
#打开文件
GetMetaFile××××××××××
//GetEnhMetaFile
void CGraphicView::OnFileOpen()
{
 // TODO: Add your command handler code here
 HMETAFILE hmetaFile;
 hmetaFile=GetMetaFile("meta.wmf");
 m_dcMetaFile.PlayMetaFile(hmetaFile);
 DeleteMetaFile(hmetaFile);
 Invalidate();
}
 
(2)使用兼容DC
#CDC m_dcCompatible;
#先判断兼容dc是否已经创建
 if(!m_dcCompatible.m_hDC)
 {
         m_dcCompatible.CreateCompatibleDC(&dc);
         CRect rect;
         GetClientRect(&rect); //客户区的大小
         CBitmap bitmap;
         //通过指定的宽和高来创建一个兼容位图
         bitmap.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height());
//如果要在兼容dc上绘图必须要选入一幅位图,导入的也行
         m_dcCompatible.SelectObject(&bitmap);
//m_dcCompatible.BitBlt(0,0,rect.Width(),rect.Height(),&dc,0,0,SRCCOPY);CreateCompatibleBitmap返回的位图对象只包含相应设备描述表中的位图的位图信息头,不包含颜色表和象素数据块。因此,选入该位图对象的设备描述表不能像选入普通位图对象的设备描述表一样应用,必须在SelectObject函数之后,调用BitBlt将原始设备描述表的颜色表及象素数据块拷贝到兼容设备描述表。
         m_dcCompatible.SelectObject(pBrush);
 }
同样把dc换成m_dcCompatible,由于是内存中dc,同样操作时是看不见的
OnDraw中贴图:
 CRect rect;
 GetClientRect(&rect);
 pDC->BitBlt(0,0,rect.Width(),rect.Height(),&m_dcCompatible,0,0,SRCCOPY);