次の方法で共有


TN024: MFC-Defined メッセージとリソース

次のテクニカル ノートは、最初にオンライン ドキュメントに含まれてから更新されていません。 その結果、一部の手順やトピックが古くなっているか、正しくない可能性があります。 最新情報については、オンライン ドキュメント インデックスで関心のあるトピックを検索することをお勧めします。

このメモでは、MFC で使用される内部 Windows メッセージとリソース形式について説明します。 この情報では、フレームワークの実装について説明し、アプリケーションのデバッグに役立ちます。 冒険的な人のために、この情報はすべて公式にサポートされていないにもかかわらず、高度な実装のためにこの情報の一部を使用することができます。

このメモには、MFC プライベート実装の詳細が含まれています。すべての内容は将来変更される可能性があります。 MFC プライベート Windows メッセージは、1 つのアプリケーションのスコープでのみ意味を持ちますが、今後システム全体のメッセージを含むよう変更される予定です。

MFC プライベート Windows メッセージとリソースの種類の範囲は、Microsoft Windows によって確保された予約済みの "システム" 範囲にあります。 現在、範囲内のすべての数値が使用されるわけではありません。今後、範囲内の新しい数値が使用される可能性があります。 現在使用されている数値は変更される可能性があります。

MFC プライベート Windows メッセージは、0x360->0x37Fの範囲内にあります。

MFC プライベート リソースの種類は、0xF0->0xFFの範囲内にあります。

MFC プライベート Windows メッセージ

これらの Windows メッセージは、ウィンドウ オブジェクト間で比較的疎な結合が必要であり、C++ 仮想関数が適切でない C++ 仮想関数の代わりに使用されます。

これらのプライベート Windows メッセージおよび関連するパラメーター構造は、MFC プライベート ヘッダー 'AFXPRIV" で宣言されます。H'. このヘッダーを含むコードのいずれかが文書化されていない動作に依存している可能性があり、将来のバージョンの MFC で中断される可能性があることを警告してください。

まれに、これらのメッセージのいずれかを処理する必要がある場合は、ON_MESSAGE メッセージ マップ マクロを使用し、汎用 LRESULT/WPARAM/LPARAM 形式でメッセージを処理する必要があります。

WM_QUERYAFXWNDPROC

このメッセージは、作成中のウィンドウに送信されます。 これは、作成プロセスの非常に早い段階で、WndProc が AfxWndProc であるかどうかを判断する方法として送信されます 。AfxWndProc は 1 を返します。

パラメーターと戻り値 説明
wParam 未使用
lParam 未使用
収益 AfxWndProc によって処理された場合は 1

WM_SIZEPARENT

このメッセージは、コントロール バーをフレームの横に再配置するために、サイズ変更中 (CWnd::RepositionBars を呼び出すCFrameWnd::RecalcLayoutCFrameWnd::OnSize呼び出し) 中に、フレーム ウィンドウによって直下の子に送信されます。 AFX_SIZEPARENTPARAMS構造体には、親の現在使用可能なクライアントの四角形と、再描画を最小限に抑えるために DeferWindowPos を呼び出す HDWP (NULL) が含まれています。

パラメーターと戻り値 説明
wParam 未使用
lParam AFX_SIZEPARENTPARAMS構造体のアドレス
収益 使用しない (0)

メッセージを無視すると、ウィンドウがレイアウトに参加しないことを示します。

WM_SETMESSAGESTRING

このメッセージはフレーム ウィンドウに送信され、ステータス バーのメッセージ行を更新するように求められます。 文字列 ID または LPCSTR のいずれかを指定できます (両方を指定することはできません)。

パラメーターと戻り値 説明
wParam 文字列 ID (または 0)
lParam 文字列 (または NULL) の LPCSTR
収益 使用しない (0)

WM_IDLEUPDATECMDUI

このメッセージは、update-command UI ハンドラーのアイドル時間更新を実装するためにアイドル時間で送信されます。 ウィンドウ (通常はコントロール バー) がメッセージを処理する場合は、 CCmdUI オブジェクト (または派生クラスのオブジェクト) を作成し、ウィンドウ内の各 "items" に対して CCmdUI::DoUpdate を呼び出します。 これにより、コマンド ハンドラー チェーン内のオブジェクトのON_UPDATE_COMMAND_UI ハンドラーがチェックされます。

パラメーターと戻り値 説明
wParam BOOL bDisableIfNoHandler
lParam 使用しない (0)
収益 使用しない (0)

ON_UPDATE_COMMAND_UIもON_COMMANDハンドラーもない場合、ui オブジェクトを無効にするには、bDisableIfNoHandler は 0 以外です。

WM_EXITHELPMODE

このメッセージは、コンテキスト依存ヘルプ モードを終了する CFrameWnd に投稿されます。 このメッセージを受信すると、 CFrameWnd::OnContextHelpによって開始されたモーダル ループが終了します。

パラメーターと戻り値 説明
wParam 使用しない (0)
lParam 使用しない (0)
収益 未使用

WM_INITIALUPDATE

このメッセージは、フレーム ウィンドウの最初の更新を安全に実行できる場合に、ドキュメント テンプレートによってフレーム ウィンドウのすべての子孫に送信されます。 CView::OnInitialUpdateの呼び出しにマップされますが、他のCWnd派生クラスで他のワンショット更新に使用できます。

パラメーターと戻り値 説明
wParam 使用しない (0)
lParam 使用しない (0)
収益 使用しない (0)

WM_RECALCPARENT

このメッセージは、ビューによって親ウィンドウ ( GetParent 経由で取得) に送信され、レイアウトの再計算が強制されます (通常、親は RecalcLayoutを呼び出します)。 これは、ビューの合計サイズが大きくなるとフレームのサイズを拡大する必要がある OLE サーバー アプリケーションで使用されます。

親ウィンドウがこのメッセージを処理する場合は、TRUE を返し、lParam で渡された RECT にクライアント領域の新しいサイズを入力する必要があります。 これは、サーバー オブジェクトがインプレース アクティブ化されたときにスクロール バーを適切に処理するために CScrollView で使用されます (追加時にウィンドウの外側に配置します)。

パラメーターと戻り値 説明
wParam 使用しない (0)
lParam LPRECT rectClient、NULL を指定できます
収益 新しいクライアントの四角形が返された場合は TRUE、それ以外の場合は FALSE

WM_SIZECHILD

このメッセージは、ユーザーがサイズ変更ハンドルを使用してサイズ変更バーのサイズを変更すると、 COleResizeBar が所有者ウィンドウ ( GetOwner 経由) に送信されます。 COleIPFrameWnd は、ユーザーが要求したフレーム ウィンドウの位置を変更しようとすることで、このメッセージに応答します。

サイズ変更バーを含むフレーム ウィンドウに対するクライアント座標で指定された新しい四角形は、lParam によって指されます。

パラメーターと戻り値 説明
wParam 使用しない (0)
lParam LPRECT rectNew
収益 使用しない (0)

WM_DISABLEMODAL

このメッセージは、非アクティブ化されているフレーム ウィンドウが所有するすべてのポップアップ ウィンドウに送信されます。 フレーム ウィンドウでは、結果を使用して、ポップアップ ウィンドウを無効にするかどうかを決定します。

これを使用すると、フレームがモーダル状態になったときにポップアップ ウィンドウで特別な処理を実行したり、特定のポップアップ ウィンドウが無効にならないようにしたりできます。 たとえば、フレーム ウィンドウがモーダル状態になったときに、ツールヒントはこのメッセージを使用して自分自身を破棄します。

パラメーターと戻り値 説明
wParam 使用しない (0)
lParam 使用しない (0)
収益 ウィンドウを無効に しない 場合は 0 以外、0 はウィンドウが無効であることを示します

WM_FLOATSTATUS

このメッセージは、フレームが別の最上位フレーム ウィンドウによってアクティブ化または非アクティブ化されたときに、フレーム ウィンドウが所有するすべてのポップアップ ウィンドウに送信されます。 これは、 CMiniFrameWndでのMFS_SYNCACTIVEの実装によって使用され、これらのポップアップ ウィンドウのアクティブ化と最上位フレーム ウィンドウのアクティブ化の同期を維持します。

パラメーター 説明
wParam 次のいずれかの値を指定します。

FS_SHOW

FS_HIDE

FS_ACTIVATE

FS_DEACTIVATE

FS_ENABLEFS_DISABLE

FS_SYNCACTIVE
lParam 使用しない (0)

FS_SYNCACTIVEが設定され、ウィンドウがアクティブ化を親フレームと同期する場合、戻り値は 0 以外にする必要があります。 CMiniFrameWnd は、スタイルが MFS_SYNCACTIVE に設定されている場合、0 以外の値を返します。

詳細については、 CMiniFrameWndの実装を参照してください。

WM_ACTIVATETOPLEVEL

このメッセージは、"最上位グループ" のウィンドウがアクティブ化または非アクティブ化されると、最上位ウィンドウに送信されます。 ウィンドウが最上位レベルのウィンドウ (親または所有者なし) の場合、またはウィンドウがそのようなウィンドウによって所有されている場合、ウィンドウは最上位グループの一部です。 このメッセージはWM_ACTIVATEAPPに似ていますが、異なるプロセスに属するウィンドウが 1 つのウィンドウ階層 (OLE アプリケーションで共通) に混在している場合に機能します。

WM_COMMANDHELP、WM_HELPHITTEST、WM_EXITHELPMODE

これらのメッセージは、状況依存のヘルプの実装で使用されます。 詳細については、 テクニカル ノート 28 を参照してください。

MFC プライベート リソース形式

現在、MFC では、RT_TOOLBARとRT_DLGINITという 2 つのプライベート リソース形式が定義されています。

RT_TOOLBAR リソース形式

AppWizard によって提供される既定のツール バーは、MFC 4.0 で導入されたRT_TOOLBARカスタム リソースに基づいています。 このリソースは、ツール バー エディターを使用して編集できます。

RT_DLGINIT リソース形式

1 つの MFC プライベート リソース形式を使用して、追加のダイアログ初期化情報を格納します。 これには、コンボ ボックスに格納されている初期文字列が含まれます。 このリソースの形式は手動で編集するようには設計されていませんが、Visual C++ によって処理されます。

Visual C++ とこのRT_DLGINIT リソースは、リソース内の情報を使用する代わりに API があるため、MFC の関連機能を使用する必要はありません。 Visual C++ を使用すると、長期的にアプリケーションの記述、保守、翻訳がはるかに簡単になります。

RT_DLGINIT リソースの基本的な構造は次のとおりです。

+---------------+    \
| Control ID    |   UINT             |
+---------------+    |
| Message #     |   UINT             |
+---------------+    |
|length of data |   DWORD            |
+---------------+    |   Repeated
|   Data        |   Variable Length  |   for each control
|   ...         |   and Format       |   and message
+---------------+    /
|     0         |   BYTE
+---------------+

繰り返しセクションには、メッセージを送信するコントロール ID、送信するメッセージ # (通常の Windows メッセージ)、および可変長のデータが含まれます。 Windows メッセージは次の形式で送信されます。

SendDlgItemMessage(<Control ID>, <Message #>, 0, &<Data>);

これは非常に一般的な形式であり、Windows メッセージとデータ コンテンツを許可します。 Visual C++ リソース エディターと MFC は、Windows メッセージの限られたサブセットのみをサポートします。コンボ ボックスの最初のリストの選択肢にCB_ADDSTRINGします (データはテキスト文字列です)。

こちらも参照ください

番号別テクニカル ノート
カテゴリ別テクニカル ノート