我最近开始学习MFC,到目前为止,让我真正感到困惑的第一件事是增强型元文件,特别是这两个函数中矩形的目的和区别
BOOL CreateEnhanced(
CDC* pDCRef,
LPCTSTR lpszFileName,
LPCRECT lpBounds,
LPCTSTR lpszDescription
);
BOOL PlayEnhMetaFile(
_In_ HDC hdc,
_In_ HENHMETAFILE hemf,
_In_ const RECT *lpRect
);
我已经编写了一个函数
DrawLogo
来创建增强型图元文件,如下所示: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();
然后,我从另一个函数像这样“播放”它:
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范围。谁能提供解释?谢谢。
编辑:
按照要求:
最佳答案
传递给RECT
的PlayEnhMetaFile
仅用于缩放基于创建图元文件时提供的边界框绘制的图像。如果图元文件在边界框之外绘制,那么它也将在RECT
外部绘制。如果要将图像剪切为RECT
,则在播放图元文件之前在DC上设置剪切区域。如果要缩放图像以使其适合RECT
,则在创建图元文件时需要提供正确的边界框。
关于c++ - 关于增强型图元文件的说明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25087880/