VC++ 元文件保存矢量图形

来源:互联网 发布:番茄工作法软件 编辑:程序博客网 时间:2024/05/17 22:12

 元文件的使用保存图形和重绘图形
  1:元文件设备上下文CMetaFileDC类,派生于CDC
  2:使用Windows元文件的步骤
     1:利用CMetaFileDC类的构造函数构造一个元文件对象,然后利用该类的Create成员函数创建一个Windows设备上下文,并与之前的对象关联起来
    Create()函数声明为 BOOL Create(LPCTSTR lpszFilename=null);
    lpszFilename是创建的元文件的 文件名,如果参数是NULL,创建的元文件就是一个内存元件
     2:在已创建的元元件DC对象中发送一系列GDI命令,如MoveTo()等
     3:命令发送后,调用Close成员函数关闭元文件设备上下文,返回元文件句柄(HMETAFILE类型)。
        HMETAFILE Close();
     4:以得到的元文件句柄为参数,利用CDC类的PlayMetaFile成员函数播放该文件,函数声明:
        BOOL PlayMetaFile(HMETAFILE hMF);
     5:播放完其中的命令后就不需要该元文件了,因为元文件也是资源,需要回收释放,调用DeleteMetaFile()函数
    BOOL DeleteMetaFile(HMETAFILE hMF);
实例:
m_meta.MoveTo(40,40);
 m_meta.LineTo(50,90);
 HMETAFILE h;
  h=m_meta.Close();
  m_meta.PlayMetaFile(h);
 m_meta.Create();
 DeleteMetaFile(h);

1、内存元文件1)创建元文件 CMetaFileDC m_dcMetaFile;2)初始化 m_dcMetaFile.Create();3)在OnLButtonUp中添加代码CClientDC dc(this);CPen pen(0,1,RGB(255,0,0));dc.SelectObject(&pen);m_dcMetaFile.SelectObject(&pen);CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));dc.SelectObject(pBrush);m_dcMetaFile.SelectObject(pBrush);switch(m_nDrawType){case 1:   dc.SetPixel(point,RGB(255,0,0));   m_dcMetaFile.SetPixel(point,RGB(255,0,0));   break;case 2:   dc.MoveTo(m_ptOrigin);   dc.LineTo(point);   m_dcMetaFile.MoveTo(m_ptOrigin);   m_dcMetaFile.LineTo(point);   break;case 3:   dc.Rectangle(CRect(m_ptOrigin,point));   m_dcMetaFile.Rectangle(CRect(m_ptOrigin,point));   break;case 4:   dc.Ellipse(CRect(m_ptOrigin,point));   m_dcMetaFile.Ellipse(CRect(m_ptOrigin,point));   break;default:   break;}4)、回放HMETAFILE hmetafile;hmetafile=m_dcMetaFile.Close();pDC->PlayMetaFile(hmetafile);m_dcMetaFile.Create();m_dcMetaFile.PlayMetaFile(hmetafile);DeleteMetaFile(hmetafile);2、本地元文件的保存与打开1)在文件/保存中添加代码HMETAFILE hmetafile;hmetafile=GetMetaFile("meta.wmf");m_dcMetaFile.PlayMetaFile(hmetafile);DeleteMetaFile(hmetafile);Invalidate();2)在文件/打开中添加代码HMETAFILE hmetafile;hmetafile=m_dcMetaFile.Close();CopyMetaFile(hmetafile,"meta.wmf");m_dcMetaFile.Create();DeleteMetaFile(hmetafile);3、兼容设备描述表CDC m_dcCompatible;OnLButtonUp中if(!m_dcCompatible.m_hDC){   m_dcCompatible.CreateCompatibleDC(&dc);   CRect rect;   GetClientRect(&rect);   CBitmap bitmap;   bitmap.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height());   m_dcCompatible.SelectObject(&bitmap);   m_dcCompatible.SelectObject(pBrush);  m_dcCompatible.BitBlt(0,0,rect.Width(),rect.Height(),&dc,0,0,SRCCOPY);}switch(m_nDrawType){case 1:   dc.SetPixel(point,RGB(255,0,0));   m_dcCompatible.SetPixel(point,RGB(255,0,0));   break;case 2:   dc.MoveTo(m_ptOrigin);   dc.LineTo(point);   m_dcCompatible.MoveTo(m_ptOrigin);   m_dcCompatible.LineTo(point);   break;case 3:   dc.Rectangle(CRect(m_ptOrigin,point));   m_dcCompatible.Rectangle(CRect(m_ptOrigin,point));   break;case 4:   dc.Ellipse(CRect(m_ptOrigin,point));   m_dcCompatible.Ellipse(CRect(m_ptOrigin,point));   break;default:   break;}OnDraw中CRect rect;GetClientRect(&rect);pDC->BitBlt(0,0,rect.Width(),rect.Height(),&m_dcCompatible,0,0,SRCCOPY);


 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 杏仁吃多了中毒怎么办 出轨怀孕了该怎么办呢 瑞安医保卡丢了怎么办 包裹一直在揽收怎么办 揽收超时的快件怎么办 快递被别人偷了怎么办 行驶证副本丢了怎么办 眼睛进了石灰粉怎么办 高铁网上没票了怎么办 限行尾号是字母怎么办 手指被刺扎肿了怎么办 手上进了小刺怎么办 招投标标书丢了怎么办 冒险岛2装备红了怎么办 宝宝屁股腌红了怎么办 宝宝肛门红痒怎么办啊 宝宝屁屁溃烂了怎么办 脸过敏起红疙瘩怎么办 一岁宝宝屁股红怎么办 屁眼肉凸出来了怎么办 陶笛声音变闷了怎么办 吃三七粉上火了怎么办 红枣核吞下去了怎么办 话梅核吞下去了怎么办 芒果和海鲜吃了怎么办 小孩咳嗽喉咙有痰怎么办 4岁宝宝喉咙有痰怎么办 20天新生儿有痰怎么办 孩子嗓子老是有痰怎么办 买的哈密瓜不甜怎么办 吉他琴颈变形了怎么办 hcg值长得慢怎么办 蚊子老在耳边叫怎么办 刚买来的鲜海参怎么办 天冷手指关节疼怎么办 未满一年驾龄上高速违章怎么办 榴莲太生剥开了怎么办 榴莲开了没熟怎么办 榴莲打开了没熟怎么办 榴莲开口了没熟怎么办 榴莲没熟打开了怎么办