カーソルイメージの設定
カーソルは、マウスまたはその他のポインティング デバイスの位置を示す小さな画像です。 多くのアプリケーションでは、ユーザーにフィードバックを提供するためにカーソル イメージが変更されます。 これは必須ではありませんが、アプリケーションに洗練されたビットを追加します。
Windows には、システム カーソルと呼ばれる一連の標準 カーソル イメージが用意されています。 これには、矢印、手、I ビーム、砂時計 (現在は回転する円) などが含まれます。 このセクションでは、システム カーソルの使用方法について説明します。 カスタム カーソルの作成など、より高度なタスクについては、「 カーソル」を参照してください。
カーソルをウィンドウ クラスに関連付けるには、WNDCLASS または WNDCLASSEX 構造体の hCursor メンバーを設定します。 それ以外の場合、既定のカーソルは矢印です。 ウィンドウ上をマウスで移動すると、ウィンドウは WM_SETCURSOR メッセージを受け取ります (別のウィンドウがマウスをキャプチャしていない場合)。 この時点で、次のいずれかのイベントが発生します。
- アプリケーションはカーソルを設定し、ウィンドウ プロシージャは TRUE を返します。
- アプリケーションは何も実行せず、WM_SETCURSORを DefWindowProc に渡します。
カーソルを設定するために、プログラムは次の処理を行います。
- LoadCursor を呼び出して、カーソルをメモリに読み込みます。 この関数は、カーソルへのハンドルを返します。
- SetCursor を呼び出し、カーソル ハンドルを渡します。
それ以外の場合、アプリケーションが defWindowProc にWM_SETCURSOR渡された場合、DefWindowProc 関数は次のアルゴリズムを使用してカーソル イメージを設定します。
- ウィンドウに親がある場合は、 WM_SETCURSOR メッセージを親に転送して処理します。
- それ以外の場合、ウィンドウにクラス カーソルがある場合は、カーソルをクラス カーソルに設定します。
- クラス カーソルがない場合は、カーソルを矢印カーソルに設定します。
LoadCursor 関数は、リソースからカスタム カーソルを読み込むか、システム カーソルの 1 つを読み込むことができます。 次の例は、定義済みのシステム リンク選択カーソルにカーソルを設定する方法を示しています。
LPCTSTR cursor = IDC_HAND;
hCursor = LoadCursor(NULL, cursor);
SetCursor(hCursor);
カーソルを変更すると、 WM_SETCURSORメッセージを インターセプトしてカーソルをもう一度設定しない限り、カーソルイメージは次のマウス移動時にリセットされます。 次のコードは、 WM_SETCURSORを処理する方法を示しています。
case WM_SETCURSOR:
if (LOWORD(lParam) == HTCLIENT)
{
SetCursor(hCursor);
return TRUE;
}
break;
このコードでは、最初に lParam の下位 16 ビットを確認します。
HTCLIENT と等しい場合LOWORD(lParam)
は、カーソルがウィンドウのクライアント領域の上であることを意味します。 それ以外の場合、カーソルは非クライアント領域の上にあります。 通常は、クライアント領域のカーソルのみを設定し、Windows が非クライアント領域のカーソルを設定できるようにする必要があります。