2012-01-07 120 views
0

私はCScrollViewでGDIを使用していくつかのグラフィックスとテキストを描画しています。私はズーム機能を実装する必要があります。ズームをからに変更する必要があります。にズームする必要はありません。ここでGDI描画されたMFCのCScrollViewでズームを実装する方法

は私の最高のアイデアです:

  1. SetWindowExt/SetViewportExtと

    使用MM_ANISOTROPICマッピングモード...このアプローチの問題は、それがテキストを拡大縮小しないということです。 MFCにテキストの拡大/縮小を強制する方法はありますか?私が考えることができるのは、選択したズーム値に応じてテキストのフォントサイズを設定することだけですが、これがうまくいくかどうかはわかりません...

  2. blessにはStretchBltを使用し、 (SetScrollSizesで設定された)適切なサイズのクライアント領域に移動します。これは、テキストスケーリングの問題を解決します。

また、プロセスでアンチエイリアス効果があることが望ましいです。私は上記の両方の方法でこれを達成すべきだと思っていますが、どちらが良く見えるかはわかりません。また、後で(ドキュメント/ビューアーキテクチャからのMFCの標準実装を使用して)印刷/印刷プレビュー機能を実装する必要があります。そのため、互換性があるメソッドが必要です。

お願いします。行く方法と理由。他のオプションもありますか?

答えて

0

私は質問で提案した2番目の方法を使用しましたが、DDBの代わりにDIBを使用しました(ではなくStretchDIBits())。これは、特にビッグビットマップを使用しているときや印刷するときに問題が少ないことが判明した。

1

MFCを使用しているときは、実際にマッピングモードを混乱させたくありません.MFC自体は、少なくとも印刷プレビュー機能に使用しています。

SetWorldTransformがうまくいくかどうかはわかります。少なくともベクトル/トゥルータイプのフォントでは、それ以外のものと一緒にテキストを拡大縮小します。 SetWorldTransformが機能する前に、SetGraphicsModeGM_ADVANCEDと電話する必要があります。

+0

返事ありがとうございます、Jerry。残念なことに、あなたが言及したメソッドには2つの問題があります:DrawText APIを使用して描画されたテキストを拡大縮小したり、アンチエイリアス効果を持たない(おそらく座標とサイズの論理的な変換を行うためですが、LineTo関数は、 )。だから、私は上記の2番目の方法で私を残します(mem dcとStretchBltを描く) - それについてどう思いますか?あなたはそれをお勧めできますか? –

関連する問題