PFN_DrvMovePointer
コールバックシグネチャ
void PFN_DrvMovePointer(
SURFOBJ* pso,
INT x,
INT y,
RECTL* prcl
);パラメーター
| フィールド | 型 | 説明 |
|---|---|---|
| pso | SURFOBJ* | ディスプレイデバイスのサーフェスを記述する SURFOBJ 構造体へのポインターです。 |
| x | INT | ドライバーがポインターのホットスポットを配置すべきディスプレイ上の x 座標を指定します。 x の値が負の場合は、ポインターが現在位置している場所で描画が行われようとしているため、ドライバーがポインターをディスプレイから削除すべきであることを示します。ポインターがディスプレイから削除されており、x の値が負でない場合、ドライバーはポインターを復元する必要があります。 |
| y | INT | ドライバーがポインターのホットスポットを配置すべきディスプレイ上の y 座標を指定します。 ドライバーが DEVINFO 構造体に GCAPS_PANNING フラグを設定している場合、y の値が負であることは、GDI がカーソルの現在位置をドライバーに通知する目的だけでこの関数を呼び出していることを示します。現在位置は (x, y+pso->sizlBitmap.cy) として計算できます。GCAPS_PANNING フラグを設定しないドライバーが負の y 座標を受け取ることはありません。 |
| prcl | RECTL* | ディスプレイ上でポインターの影響を受けるすべてのピクセルを囲む領域を定義する RECTL 構造体へのポインターです。GDI は、先にポインターを画面から削除することなく、この四角形の中に描画することはありません。このパラメーターは NULL でもかまいません。 |
公式ドキュメント
DrvMovePointer 関数は、ポインターを新しい位置へ移動し、GDI がポインターの表示を妨げないようにします。
解説(Remarks)
ドライバーは、パンニングする仮想ディスプレイを扱うために、画面上のポインターの現在位置を知る必要がある場合があります − これは、GDI がポインターをシミュレートしていて、ドライバーが通常の DrvMovePointer 呼び出しを受け取らなくなっている場合でも同様です。この通知を受け取るには、ドライバーは DEVINFO 構造体の flGraphicsCaps フィールドに GCAPS_PANNING フラグを設定します。
DEVINFO の flGraphicsCaps メンバーに GCAPS_ASYNCMOVE フラグが設定されていない限り、いずれかのスレッドがディスプレイドライバー内で描画を行っている間に DrvMovePointer が呼び出されることはありません。
DrvMovePointer をディスプレイドライバーに実装する必要があるのは、DrvSetPointerShape も実装されている場合だけです。
ドライバーが DrvSetPointerShape を使用して指定のポインターを登録している場合、DrvMovePointer は失敗してはなりません。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)