私はSetViewportExt()
とSetViewportExtEx()
に関する奇妙な動作に陥っています。SetWindowExtとSetWindowExtExの奇妙さ(負の高さ、逆さの逆)
私の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));
は今、私は3奇妙なに遭遇していますメタファイル(
CMetaFileDC
)に私のの表示内容は、メタファイルで上下が逆です。しかし、SetViewportExt()
コールをSetViewportExtEx()
コールで置き換えると、メタファイルは正しいです。違いは、SetViewportExtEx()
はマイナスのビューポートの高さを設定していますが、私の渡された値は確実にプラスです。メタファイルを正しく取得するには負のビューポートの高さが必要です。 - 一方、
SetViewportExtEx()
をデフォルトとして使用すると、印刷プレビューには何も表示されないが表示されます。また、SetViewportExtEx()
を呼び出すと、ビューポートの高さが負になります。これがおそらく原因です。 - ノーマルビューレンダリング(MFCビュー)では、
SetViewportExt()
とSetViewportExtEx()
の両方が正のビューポートの高さになります。
だから、誰もこの2つの質問に答えますか?
- なぜ私はポジティブ1を渡すものの
SetViewportExtEx()
は、メタファイルおよび印刷プレビューレンダリングで負の値としての私のビューポートの高さを設定しない一体? - 最後に逆さまにならないようにメタファイルのレンダリングで負のビューポートの高さが必要なのはなぜですか?
私の知恵がここで終わって以来、誰かがこれに対する答えを持っているかどうかは不思議です。 :-)
ご提案いただきありがとうございます。残念ながら、これは私のためには機能しませんでした。 – Fabian
もう少しメタファイルの問題をデバッグするとき、私はあなたからこの文に関連していくつかを見つけました。「出力イメージはオフセットされ、間違ってスケールされました。メタファイルはHORZSIZEデバイスキャップを使用して境界を判断しますが、このサイズは一部のOSバージョンでは間違っていると考えられています(Win7では大きすぎ、Vistaでは小さすぎます)。 また、MS Wordにメタメージを挿入すると、それは面白いことに、既定のスケール(例えば75%)を得ています。上記のバグを補うと思います。そのスケールでは、そこに正しいサイズがあります。 MSが何かを混乱させたように見える。 – Fabian
参照:http://thetweaker.wordpress.com/2011/11/13/reading-monitor-physical-dimensions-orgetting-the-edid-the-right-way/ – Fabian