メッセージの制御
このセクションでは、Windows メッセージを使用してコントロールと通信する方法について説明します。
次のトピックについて説明します。
共通コントロールへのメッセージ
一般的なコントロールはウィンドウであるため、アプリケーションは、WM_GETFONT や WM_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_NOTIFY の lParam パラメーターは、NMHDR 構造体のアドレスか、最初のメンバーとして nmHDR 含む大きな構造体のアドレスです。 構造体には通知コードが含まれており、通知メッセージを送信した共通コントロールを識別します。 残りの構造体メンバー (存在する場合) の意味は、通知コードによって異なります。
共通コントロールの各種類には、対応する通知コードのセットがあります。 共通コントロール ライブラリには、複数の種類の共通コントロールから送信できる通知コードも用意されています。 送信する通知コードと受け取る形式を決定する目的の制御については、ドキュメントを参照してください。
WM_NOTIFY メッセージの処理方法を示すコード例については、そのメッセージのリファレンス トピックを参照してください。
関連トピック