【发布时间】:2012-04-02 02:32:20
【问题描述】:
我遇到了关于 SetViewportExt() 和 SetViewportExtEx() 的奇怪行为。
我的 MFC 应用程序使用MM_ISOTROPIC 映射来设置查看设备上下文并按如下方式配置设备上下文:
m_dc.SetMapMode( MM_ISOTROPIC );
// Set the window extent (document space)
CSize docSizeLP = GetDocumentSizeLP();
m_dc.SetWindowExt(docSizeLP.cx, docSizeLP.cy);
// Next set the viewport extent
CSize docSizeDP = GetDocumentSizeDP();
m_dc.SetViewportExt((int) (docSizeDP.cx * fZoom), (int) (docSizeDP.cy * fZoom));
现在我遇到了三个奇怪的事情:
- 将我的视图呈现到元文件 (
CMetaFileDC) 时,我的 视图内容在元文件中颠倒了。但是,如果我将SetViewportExt()调用替换为SetViewportExtEx()调用,则元文件是正确的。不同之处似乎在于SetViewportExtEx()设置了一个负视口高度,尽管我传递的值肯定是正的——而且我需要负视口高度才能使图元文件正确。 - 另一方面,使用
SetViewportExtEx()作为默认值会导致打印预览不显示任何内容。再次调用SetViewportExtEx()时,视口高度变为负数,这可能是这个原因。 - 在普通视图渲染(MFC 视图)中,
SetViewportExt()和SetViewportExtEx()都会产生正视口高度。
那么,有人对这两个问题有答案吗?
- 为什么
SetViewportExtEx()在图元文件和打印预览渲染中将我的视口高度设置为负值,尽管我通过了正值? - 为什么我的图元文件渲染需要负视口高度才能最终不倒置?
我很好奇是否有人对此有答案,因为我的智慧到此为止。 :-)
【问题讨论】: