既定の List-View メッセージ処理

このセクションでは、リストビュー コントロールによって実行されるウィンドウ メッセージ処理について説明します。

メッセージ処理

次の表では、リストビュー コントロールによって実行されるウィンドウ メッセージの処理について説明します。

メッセージ 処理の実行
WM_CHAR 指定した文字で始まるリストビュー アイテムを検索し、アイテムが見つかった場合は、フォーカスを選択してアイテムに設定します。 タイムアウト間隔内で受信した複数の文字 (現在は 1 秒で固定) が連結され、リストビュー コントロールは結果の文字列で始まるアイテムを検索します。
WM_COMMAND EN_UPDATE および EN_KILLFOCUS 通知コードを処理し、他のすべての編集コントロール通知を親ウィンドウに転送します。
WM_CREATE WM_NCCREATE に追加の初期化を実行します。 LVS_SHAREIMAGELISTS ウィンドウ スタイルが指定されていない場合、リストビュー コントロールは、この時点でアイコンと小さいアイコン イメージ リストを作成します。
WM_DESTROY WM_CREATE 処理中に割り当てられたリソースを解放します。
WM_ERASEBKGND リストビュー コントロールの現在の背景色を使用して、ウィンドウの背景を消去します。 背景色が CLR_NONE 値の場合、リストビュー コントロールはメッセージを親ウィンドウに転送します。
WM_GETDLGCODE DLGC_WANTTAB 値と DLGC_WANTARROWS 値の組み合わせを返します。
WM_GETFONT 現在のラベル フォントのハンドルを返します。
WM_HSCROLL リストビュー コントロールを水平方向にスクロールします。
WM_KEYDOWN SPACE キー、ENTER キー、方向キーを処理し、LVN_KEYDOWN 通知コードを親ウィンドウに送信します。
WM_KILLFOCUS フォーカスされたリスト アイテム (存在する場合) を再描画し、NM_KILLFOCUS 通知コードを親ウィンドウに送信します。
WM_LBUTTONDBLCLK 親ウィンドウ に NM_DBLCLK (リストビュー) 通知コードを送信します。
WM_LBUTTONDOWN クリック操作またはドラッグ操作が開始されているかどうかに応じて、さまざまな方法で処理されます。 関連する操作を決定するために、リストビュー コントロールは、ボタンが離されるかマウスが移動されるまでモーダル メッセージ ループに入ります。 クリックの場合、リストビュー コントロールは、カーソルの位置、Shift キーと Ctrl キーの状態などを考慮して、フォーカスがあるアイテムと選択されているアイテムを変更する可能性があります。 次に、リストビュー コントロールは、親ウィンドウに NM_CLICK (リストビュー) 通知コードを送信します。
アイテムの上にドラッグを開始すると、リストビュー コントロールが選択され、アイテムにフォーカスが設定されます。 次に、LVN_BEGINDRAG 通知コードを親ウィンドウに送信します。 親ウィンドウは、ドラッグ操作を実際に実行する役割を担います。
ウィンドウの背景上でドラッグを開始すると、リストビュー コントロールは別のモーダル メッセージ ループに入り、ユーザーがマウスをドラッグして四角形を形成できるようにします。 四角形内のアイテムが選択されます。
WM_NCCREATE 内部データ構造を割り当てて初期化し、DefWindowProc 関数を呼び出します。
WM_NCDESTROY リストビュー コントロールによって割り当てられたリソースを解放します。 LVS_SHAREIMAGELISTS スタイルを使用しない限り、これにはフルサイズの画像リストと小さな画像リストの削除が含まれます。
WM_NOTIFY ヘッダー コントロール通知コードを処理します。
WM_PAINT 更新リージョン内のすべてのアイテムを表示します。 コールバック アイテムの場合、コントロールは最初に LVN_GETDISPINFO 通知コードを所有者ウィンドウに送信して表示情報を要求します。 wParam パラメーターが NULL 以外の場合、コントロールは値が HDC であることを前提とし、そのデバイス コンテキストを使用して描画します。
WM_RBUTTONDOWN WM_LBUTTONDOWN メッセージと同じ方法で処理されましたが、コントロールは、(NM_CLICK (リストビュー) ではなく) NM_RCLICK (リストビュー) 通知コードと (LVN_BEGINDRAG ではなく)LVN_BEGINRDRAG 通知コードを送信する点が異なります。 コントロールは、対応する WM_RBUTTONUP メッセージを処理し、ディスパッチしないことに注意してください。 したがって、アプリケーションは、コントロールをサブクラス化しても、このメッセージを表示できません。
WM_SETFOCUS フォーカスされたリスト アイテム (存在する場合) を再描画し、NM_SETFOCUS 通知コードを親ウィンドウに送信します。
WM_SETFONT 指定したフォント ハンドルを保存し、メッセージがある場合はヘッダー ウィンドウに転送し、新しいフォントを使用して再描画します。
WM_SETREDRAW 再描画をオンまたはオフにします。
WM_TIMER アイテム ラベルの編集を開始します。 ユーザーがフォーカスされたアイテムのラベルをクリックすると、リストビュー コントロールは編集モードにすぐに入るのではなくタイマーを設定します。 このタイマーを使用すると、ユーザーがラベルをダブルクリックした場合に、リストビュー コントロールが編集モードに入らない場合があります。
WM_VSCROLL リストビュー コントロールを垂直方向にスクロールします。
WM_WINDOWPOSCHANGED ウィンドウのスクロール バーを更新します。 現在のビューがアイコンまたは小さいアイコン ビューで、LVS_AUTOARRANGE スタイルが指定されている場合は、リストビュー コントロールもリスト アイテムを配置します。
WM_WININICHANGE システム メトリックへの変更を処理します。