首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于增强MetaFile的解释

关于增强MetaFile的解释
EN

Stack Overflow用户
提问于 2014-08-01 20:06:20
回答 1查看 1.9K关注 0票数 1

最近,我开始学习MFC,到目前为止,我真正感到困惑的第一件事是增强的MetaFiles,特别是这两个函数中边界矩形的用途和区别。

代码语言:javascript
复制
BOOL CreateEnhanced( 
   CDC* pDCRef, 
   LPCTSTR lpszFileName, 
   LPCRECT lpBounds, 
   LPCTSTR lpszDescription  
);


BOOL PlayEnhMetaFile(
  _In_  HDC hdc,
  _In_  HENHMETAFILE hemf,
  _In_  const RECT *lpRect
);

我编写了一个函数DrawLogo,它创建了如下所示的增强MetaFile:

代码语言:javascript
复制
CMetaFileDC mf;
CString mf_name = CString("name.emf");
CRect bnds = CRect(0,0, 8000, 8000);
mf.CreateEnhanced(pDC, mf_name, &bnds, mf_name);
//some drawing...
mf.CloseEnhanced();

然后,我从另一个功能中“演奏”它:

代码语言:javascript
复制
CString mf_name = CString("name.emf");
DrawLogo(pDC);
HENHMETAFILE hmf;
hmf = GetEnhMetaFile(mf_name);
ENHMETAHEADER mfh;
GetEnhMetaFileHeader(hmf, sizeof(ENHMETAHEADER), &mfh);
int width = mfh.rclBounds.right - mfh.rclBounds.left;
int height = mfh.rclBounds.bottom - mfh.rclBounds.top;

TRACE("WIDTH = %d", width);
TRACE("HEIGHT = %d", height);

PlayEnhMetaFile(pDC->m_hDC, hmf, CRect(0, 0, width, height));

//and I draw a rect using same bounds
CRect frame = CRect(0, 0, width, height);
pDC->Rectangle(&frame);

因此,我的预期是图元文件将在frame CRect中,但事实并非如此--图像超出了rect边界。

有人能解释一下吗?谢谢。

编辑:

应要求:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-01 20:59:00

传递给PlayEnhMetaFilePlayEnhMetaFile仅用于缩放根据创建图元文件时提供的边界框绘制的图像。如果图元文件在边界框之外绘制,那么它也将在RECT之外绘制。如果您希望将图像裁剪为RECT,那么在播放图元文件之前,在DC上设置一个裁剪区域。如果要缩放图像以使其适合RECT,则在创建图元文件时需要提供正确的边界框。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25087880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档