DrvSetPointerShape 関数 (winddi.h)

DrvSetPointerShape 関数は、ドライバーがポインターをディスプレイから引き出すようドライバーに要求するために使用されます。新しいポインター図形の設定を試みる場合。および を使用して、指定した位置にあるディスプレイに新しいポインターを配置します。

構文

ULONG DrvSetPointerShape(
  [in] SURFOBJ  *pso,
  [in] SURFOBJ  *psoMask,
  [in] SURFOBJ  *psoColor,
  [in] XLATEOBJ *pxlo,
  [in] LONG     xHot,
  [in] LONG     yHot,
  [in] LONG     x,
  [in] LONG     y,
  [in] RECTL    *prcl,
  [in] FLONG    fl
);

パラメーター

[in] pso

描画するサーフェスを記述する SURFOBJ 構造体へのポインター。

[in] psoMask

AND-XOR マスクを定義する SURFOBJ 構造体へのポインター。 (AND-XOR マスクについては、「 モノクロ ポインターの描画」を参照してください)。このビットマップのサイズによって、ポインターのサイズが決まります。 ポインター サイズには暗黙的な制約はありませんが、最適なポインター サイズは 32 x 32、48 x 48、64 x 64 ピクセルです。 このパラメーターが NULL の場合、ポインターは透過的です。

[in] psoColor

カラー ポインターの色を定義する SURFOBJ 構造体へのポインター。 このパラメーターが NULL の場合、ポインターはモノクロになります。 ポインター ビットマップの幅は psoMask と同じで、高さは半分です。

[in] pxlo

psoColor の色を定義する XLATEOBJ 構造体へのポインター。

[in] xHot

ポインターのホット スポットの x 位置を左上のピクセルを基準にして指定します。 ホット スポットによって示されるピクセルは、新しいポインター位置に配置する必要があります。

[in] yHot

ポインターのホット スポットの y 位置を左上のピクセルに対して相対的に指定します。 ホット スポットによって示されるピクセルは、新しいポインター位置に配置する必要があります。

[in] x

新しいポインター位置の x 座標を指定します。

[in] y

新しいポインター位置の y 座標を指定します。

[in] prcl

ポインターの可視部分の狭いバインドを指定する四角形をドライバーが書き込む場所を示す RECTL 構造体を指定します。

[in] fl

拡張可能なフラグのセットを指定します。 ドライバーが認識できないフラグが設定されている場合、ドライバーは呼び出しを拒否する必要があります。 このパラメーターには、次の定義済み値のうち 1 つ以上と、ドライバー定義値を 1 つ以上指定できます。

フラグ 説明
SPS_ALPHA ポインターにはピクセルごとのアルファ値があります。
SPS_ANIMATESTART ドライバーは、アニメーション化されたポインター効果を構成する一連の同様のサイズのポインター図形を受け取る準備をする必要があります。
SPS_ANIMATEUPDATE ドライバーは、アニメーション化されたシリーズの次のポインター図形を描画する必要があります。
SPS_ASYNCCHANGE このフラグは、互換性のために残されています。 レガシ ドライバーの場合、ドライバーは、デバイス上で他の描画が進行中である間にハードウェア内のポインターの形状を変更できる場合にのみ、変更を受け入れる必要があります。 GDI では、DEVINFO 構造体の flGraphicsCaps メンバーで現在使用されなくなったGCAPS_ASYNCCHANGE フラグが設定されている場合にのみ、このオプションが使用されます。
SPS_CHANGE ドライバーは、ポインターの図形を変更するように要求されます。
SPS_FREQMASK ドライバーは、マウス の軌跡をレンダリングするように要求され、式 fl & SPS_FREQMASK で示されているように、1 ミリ秒あたりに何度もイメージを更新します。 マウス 証跡をレンダリングできるドライバーには、DEVINFO 構造体の flGraphicsCaps2 メンバーにGCAPS2_MOUSETRAILS フラグが設定されている必要があります。
SPS_LENGTHMASK ドライバーは、式 fl & SPS_LENGTHMASK で示される長さのマウス の軌跡をレンダリングするように要求されます。 (長さ N のマウス の軌跡は、N + 1 個のカーソル 画像で構成されます)。マウス 証跡をレンダリングできるドライバーには、その DEVINFO 構造体の flGraphicsCaps2 メンバーにGCAPS2_MOUSETRAILS フラグが設定されている必要があります。

戻り値

戻り値には、次のいずれかの値を指定できます。

リターン コード 説明
SPS_ACCEPT_EXCLUDE
現在は使用されていません。 GDI は、ドライバーのポインターを無効にし、ドライバーがこの値を返す場合は、ソフトウェア シミュレーションに戻ります。
SPS_ACCEPT_NOEXCLUDE
ドライバーは図形を受け入れます。 図形はハードウェアでサポートされており、GDI はポインターを上書きする他の図面を気にしません。
SPS_DECLINE
ドライバーは図形をサポートしていないため、GDI はそれをシミュレートする必要があります。
SPS_ERROR
ドライバーは通常、この図形をサポートしていますが、通常とは異なる理由で失敗しました。

注釈

ディスプレイ ドライバーの場合、DrvSetPointerShape は省略可能です。 ただし、この関数を実装する場合は、 DrvMovePointer も実装する必要があります。

psoMask および psoColor ポイントが一意のポインターに対して一意である SURFOBJ 構造体の iUniq メンバー。 ドライバーは、これらの構造体の一意の dhsurf ハンドルと組み合わせてこの情報をカーソル キャッシュのキャッシュ キーとして使用できます。

fl パラメーターで SPS_ALPHAが設定されている場合、psoMaskNULL で、psoColor は 32bpp BGRA サーフェスを指します。 ピクセル単位のアルファ値は、対応するポインター ピクセルの不透明度を、デスクトップ ピクセルの下に示します。 ソース アルファ形式は事前に乗算されます。つまり、ソース サーフェスの各カラー チャネルは、対応するアルファ値で既に事前に乗算されているため、ブレンド時の乗算演算が不要になります。

既定のアルファ カーソルは、大部分が白黒で、アルファ値の範囲が広くなります。ただし、アプリケーションは任意のカーソル自体を指定できるため、色の制限はありません。 一般的なアルファ ポインター のサイズは、アルファを持たない一般的なポインターよりも約 8 ピクセル大きいサイズです。 これは、結果のポインター ビットマップ図形を展開するぼかしフィルターによって実現される影の効果に対応します。 ポインターの大部分は、64 x 64 ピクセルのビットマップ以下になります。

ドライバーは、DrvEnablePDEV によって返される DEVINFO 構造体の flGraphicsCaps2 メンバーにGCAPS2_ALPHACURSOR フラグを設定することで、ピクセル単位のアルファ値を持つポインターを処理する機能を示します。

要件

要件
対象プラットフォーム デスクトップ
Header winddi.h (Winddi.h を含む)

こちらもご覧ください

DrvEnablePDEV

DrvMovePointer

SURFOBJ

XLATEOBJ