コントロール メッセージ

このセクションでは、Windows メッセージを使用してコントロールと通信する方法について説明します。

次のトピックについて説明します。

共通コントロールに対するメッセージ

共通コントロールはウィンドウであるため、アプリケーションでは、WM_GETFONTWM_SETTEXT などの共通の Microsoft Win32 メッセージを使用してそれらのウィンドウと通信できます。 また、各共通コントロールのウィンドウ クラスは、コントロール固有のメッセージのセットをサポートします。 通常、アプリケーションでは SendMessage または SendDlgItemMessage を使用してメッセージをコントロールに渡します (多くの場合、戻り値で情報を受信します)。

一部の共通コントロールでは、アプリケーションで SendMessage の代わりに使用できるマクロのセットが提供されています。 一般に、マクロは関数よりも簡単に使用できます。 次のコード例では、選択されたツリー ビュー項目のテキストを取得します。最初に生のメッセージを使用し、次に同等のマクロを使用します。 hwnd がコントロール ウィンドウのハンドルであると仮定します。

BOOL fSuccess;
WCHAR itemText[99];
TVITEM tvItem = { 0 };
tvItem.mask = TVIF_TEXT;
tvItem.cchTextMax = ARRAYSIZE(itemText);
tvItem.pszText = itemText;

// This...
tvItem.hItem = (HTREEITEM)SendMessage(hwnd, TVM_GETNEXTITEM, TVGN_CARET, NULL);
fSuccess = SendMessage(hwnd, TVM_GETITEM, 0, (LPARAM)&tvItem);

// ... is equivalent to this.
tvItem.hItem = TreeView_GetSelection(hwnd);
fSuccess = TreeView_GetItem(hwnd, &tvItem);

システムの色設定が変更されると、Windows はすべてのトップレベル ウィンドウに WM_SYSCOLORCHANGE メッセージを送信します。 トップレベル ウィンドウは、自身の共通コントロールにこの WM_SYSCOLORCHANGE メッセージを転送する必要があります。そうでないと、色の変更がコントロールに通知されません。 メッセージの転送によって、共通コントロールで使用される色と、他のユーザー インターフェイス オブジェクトで使用される色とで一貫性が保たれます。 たとえば、ツール バー コントロールで "3-D オブジェクト" の色を使用してボタンを描画しているとします。 ユーザーが 3-D オブジェクトの色を変更したにもかかわらず、WM_SYSCOLORCHANGE メッセージがツール バーに転送されないと、システムの他のボタンの色が変わる一方で、ツール バーの色は元の色のままです (さらに言えば、元の色と新しい色が組み合わされた状態になります)。

コントロールからの通知

コントロールは子ウィンドウであり、通常はユーザーからの入力によってトリガーされるイベントがコントロールで発生したときに、親ウィンドウに通知メッセージを送信します。 アプリケーションは、これらの通知メッセージに基づいて、ユーザーがアプリケーションにどのようなアクションを望んでいるかを判断します。 WM_HSCROLL メッセージと WM_VSCROLL メッセージを使用して変更を親に通知するトラック バーを除き、共通コントロールは、通知に関するリファレンス トピックに記載されているように、WM_COMMAND メッセージまたは WM_NOTIFY メッセージとして通知を送信します。 一般に、(長期にわたって API に存在していた) 古い通知では、WM_COMMAND が使用されます。

WM_NOTIFYlParam パラメーターは、NMHDR 構造体のアドレスであるか、1 番目のメンバーとして NMHDR を含むより大きい構造体のアドレスです。 この構造体は通知コードを格納し、通知メッセージを送信した共通コントロールを識別します。 それ以降の構造体メンバーが存在する場合、それらのメンバーの意味は通知コードによって異なります。

共通コントロールの種類ごとに、対応する通知コードのセットがあります。 共通コントロール ライブラリでは、複数の種類の共通コントロールで送信できる通知コードも提供されています。 コントロールが送信する通知コードとその形式を判断するには、目的のコントロールのドキュメントを参照してください。

WM_NOTIFY メッセージの処理方法を示すコード例については、そのメッセージのリファレンス トピックを参照してください。

一般的なコントロール リファレンス