PFN_DrvSetPointerShape
コールバックシグネチャ
DWORD PFN_DrvSetPointerShape(
SURFOBJ* param0,
SURFOBJ* param1,
SURFOBJ* param2,
XLATEOBJ* param3,
INT param4,
INT param5,
INT param6,
INT param7,
RECTL* param8,
DWORD param9
);パラメーター
| フィールド | 型 |
|---|---|
| param0 | SURFOBJ* |
| param1 | SURFOBJ* |
| param2 | SURFOBJ* |
| param3 | XLATEOBJ* |
| param4 | INT |
| param5 | INT |
| param6 | INT |
| param7 | INT |
| param8 | RECTL* |
| param9 | DWORD |
公式ドキュメント
DrvSetPointerShape 関数は、ドライバーがポインターをディスプレイ上に描画している場合はそれを取り除き、新しいポインター形状の設定を試み、指定された位置に新しいポインターをディスプレイ上に表示するよう、ドライバーに要求するために使用されます。
戻り値
戻り値は、次のいずれかの値になります。
| リターンコード | 説明 |
|---|---|
| 廃止されています。ドライバーがこの値を返した場合、GDI はドライバーのポインターを無効にし、ソフトウェアによるシミュレーションに戻します。 | |
| ドライバーは形状を受け入れます。その形状はハードウェアでサポートされており、GDI は他の描画がポインターを上書きすることを考慮する必要がありません。 | |
| ドライバーはこの形状をサポートしていないため、GDI がシミュレートする必要があります。 | |
| ドライバーは通常この形状をサポートしていますが、通常とは異なる理由で失敗しました。 |
解説(Remarks)
DrvSetPointerShape は、ディスプレイドライバーでは省略可能です。ただし、この関数を実装する場合は、DrvMovePointer も実装する必要があります。
psoMask と psoColor が指す SURFOBJ 構造体の iUniq メンバーは、ポインターごとに一意の値になります。ドライバーは、この情報をこれらの構造体の一意な dhsurf ハンドルと組み合わせて、カーソルをキャッシュする際のキャッシュキーとして使用できます。
fl パラメーターに SPS_ALPHA が設定されている場合、psoMask は NULL であり、psoColor は 32bpp の BGRA サーフェスを指します。ピクセルごとのアルファ値は、対応するポインターのピクセルと、その下にあるデスクトップのピクセルとの不透明度を示します。ソースのアルファ形式は乗算済み (premultiplied) です。つまり、ソースサーフェスの各カラーチャネルには対応するアルファ値があらかじめ乗算されており、ブレンド時の乗算処理が不要になります。
既定のアルファカーソルは大部分が白黒で、幅広いアルファ値を持ちます。ただし、アプリケーションが任意のカーソルを指定できるため、色に関する制限はありません。アルファ付きポインターの一般的なサイズは、アルファのない一般的なポインターよりも寸法が約 8 ピクセル大きくなります。これは、結果として得られるポインタービットマップの形状を広げるぼかしフィルターによって実現される影の効果に対応するためです。大多数のポインターは、64x64 ピクセル以下のビットマップになります。
ドライバーは、DrvEnablePDEV が返す DEVINFO 構造体の flGraphicsCaps2 メンバーに GCAPS2_ALPHACURSOR フラグを設定することで、ピクセルごとのアルファ値を持つポインターを処理できることを示します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)