次の方法で共有


論理パレット

論理パレット は、アプリケーションが作成し、特定のデバイス コンテキストに関連付けるカラー パレットです。 論理パレットを使用すると、アプリケーションは特定のニーズを満たす色を定義して使用できます。 アプリケーションは、個別のデバイス コンテキストに使用したり、1 つのデバイス コンテキストに切り替えたりして、任意の数の論理パレットを作成できます。 アプリケーションで作成できるパレットの最大数は、システムのリソースによって異なります。

アプリケーションは、CreatePalette 関数を使用して論理パレットを作成します。 アプリケーションは、エントリの数と各エントリの色の値を指定する LOGPALETTE 構造体を塗りつぶし、アプリケーションは CreatePalette する構造体を渡します。 この関数は、後続のすべての操作でアプリケーションがパレットを識別するために使用するパレット ハンドルを返します。 論理パレットで色を使用するには、アプリケーションは、SelectPalette 関数を使用して、デバイス コンテキストにパレットを選択し、RealizePalette 関数を使用してパレットを実現します。 パレット内の色は、論理パレットが実現されるとすぐに使用できます。

アプリケーションでは、その論理パレットのサイズを、必要な色を表すだけのエントリに制限する必要があります。 アプリケーションでは、最大パレット サイズ (デバイスに依存する値) より大きい論理パレットを作成することはできません。 アプリケーションは、GetDeviceCaps 関数を使用して SIZEPALETTE 値を取得することで、最大サイズを取得できます。

アプリケーションは論理パレット内の特定のエントリに任意の色値を指定できますが、特定のデバイスですべての色を生成できるわけではありません。 システムにはサポートされている色を検出する方法はありませんが、アプリケーションはデバイスの色解像度を取得することで、これらの色の合計数を検出できます。 ピクセルあたりのカラー ビット数で指定された色解像度は、GetDeviceCaps 関数によって返される COLORRES 値と同じです。 色の解像度が 18 のデバイスには、262,144 色が含まれます。 アプリケーションがサポートされていない色を要求した場合、システムは適切な近似値を選択します。

論理パレットが作成されると、アプリケーションは SetPaletteEntries 関数を使用してパレット内の色を変更できます。 論理パレットが選択され、実現されている場合、パレットを変更しても、表示されている色にすぐには影響しません。 アプリケーションでは、UnrealizeObject を使用し、RealizePalette関数して色を更新する必要があります。 場合によっては、アプリケーションで論理パレットの選択の解除、非実現、選択、および実現を行い、要求されたとおりに色が確実に更新されるようにする必要がある場合があります。 アプリケーションが複数のデバイス コンテキストに論理パレットを選択した場合、論理パレットに対する変更は、選択されているすべてのデバイス コンテキストに影響します。

アプリケーションは、ResizePalette 関数を使用して、論理パレット内のエントリの数を変更できます。 アプリケーションでサイズが小さければ、残りのエントリは変更されません。 アプリケーションがサイズを拡張する場合、システムは新しい各エントリの色を黒 (0、0、0) に設定し、フラグを 0 に設定します。

アプリケーションは、GetPaletteEntries 関数を使用して、特定の論理パレット内のエントリの色とフラグの値を取得できます。 アプリケーションは、GetNearestPaletteIndex 関数を使用して、指定された色の値と最も一致する特定の論理パレット内のエントリのインデックスを取得できます。

アプリケーションで論理パレットが不要になった場合は、DeleteObject 関数を使用して削除できます。 アプリケーションは、パレットを削除する前に、論理パレットがデバイス コンテキストで選択されなくなったことを確認する必要があります。