質問

MFCの相対的な新人として、デバイスコンテキスト(DCS)がたくさん見られます。私はそれが描画と関係があることを漠然と理解していますが、詳細は私が見つけることができる場所であまりよく説明されていません。 「互換性のあるデバイスのコンテキスト」を作成することは何を意味し、なぜそれが重要なのですか? SelectObjectは何をしますか?また、最初にDCを互換性のあるものにする必要がありますか?

役に立ちましたか?

解決

デバイスのコンテキストは、描画が発生する場所にすぎないため、2つの異なるDCがある場合は、2つの異なる場所に描画されます。ファイルハンドルのようなものです。

デバイスのコンテキストは、画面上の不動産、またはメモリに存在するビットマップを指すことができます。おそらく他の場所でも、これらは私が今考えられる2つだけです。

互換性のあるコンテキストは、同じ基礎となるピクセル組織を持つコンテキストと、ピクセルあたりのビット数、ピクセルあたりのバイト、カラー組織などを意味します。メモリビットマップデバイスのコンテキストには、必要な組織を使用できますが、画面コンテキストはグラフィックカードのバッファーに(最終的に)関連する(モードなどによって異なります)非常に特定のピクセル組織があります。

互換性のあるコンテキストを持つことは、データの翻訳がほとんどまたはまったく必要ないため、画像データを転送するのに効率的です。もう1つの極端な場合、256カラーパレット、8ビットマップがあり、ピクセルごとにRGBAのそれぞれ8ビットを持つ画面にそれをブリットしようとする場合、最後のピクセルごとにコピーされているため、大幅なマッサージが必要であり、互換性のないコピーが必要です。ビットマップは非常に遅いです。 Win32 SDKドキュメントによると、少なくともBitblt()およびStretchBlt()は「ソースカラー形式を宛先形式に一致させる」ため、実行できます。

CreateCompatibledC()およびCreateCompatibleBitMap()を、すでに既存のコンテキストと互換性のある描画コンテキストを作成する方法の開始点として調査します。

SelectObject()は、デバイスコンテキスト内で現在アクティブになっているリソースを制御します。コンテキストには、現在のペン、ブラシ、フォント、およびビットマップがあります。これらは、より少ないパラメーターを指定できるようにすることにより、他のGDIコールの多くをよりシンプルにします。たとえば、Textout()を使用するときにフォントを指定する必要はありませんが、フォントを変更する場合は、SelectObject()が入ります。SelectObject()にフォントにハンドルを送信すると、返品値は有効なフォントのハンドルであり、その後の操作は新しいフォントを使用します。動作は、他の種類のリソース、ペン、ブラシなどで同じです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top