テクニカル ノート 24: MFC で定義されているメッセージおよびリソース
[!メモ]
次のテクニカル ノートは、最初にオンライン ドキュメントの一部とされてから更新されていません。結果として、一部のプロシージャおよびトピックが最新でないか、不正になります。最新の情報について、オンライン ドキュメントのキーワードで関係のあるトピックを検索することをお勧めします。
ここでは、 MFC で使用される内部 Windows メッセージとリソース フォームについて説明します。この情報は、フレームワークの実装について説明し、アプリケーションのデバッグに役立ちます。Adventure Works 的なに、この情報がすべて公式にサポートされていませんが、高度な実装する際にこの情報の一部を使用できます。
ここでは、 MFC のプライベート実装の詳細を格納します; すべての内容は、将来変更される可能性があります。MFC のプライベート Windows メッセージに 1 アプリケーションのスコープ内でのみ意味がありますが、メッセージをシステムレベルに含めるには、将来変更します。
MFC のプライベート Windows メッセージの範囲とリソースは、 Microsoft Windows によって中断される予約 「システム」の範囲にあります。現在範囲のすべての数が使用されていない場合に、将来、新しい範囲の数が使用される場合があります。現在使用された数が変更されることがあります。
MFC のプライベート ウィンドウ メッセージは範囲 0x360->0x37F にあります。
MFC のプライベート リソースは、範囲 0xF0->0xFF にあります。
MFC のプライベート Windows メッセージ
これらのウィンドウ メッセージは比較的緩い結合度がペイン オブジェクト間で必要となる、 Where C.C++ の仮想関数が適切でない C++ 仮想関数の代わりに使用されます。
これらのプライベート ウィンドウのメッセージと、関連するパラメーター構造体は、 MFC ヘッダー AFXPRIV.H プライベート " で宣言されています。警告して、を含むコードが公開されていない動作にこのヘッダー依存する可能性があり、 MFC の将来のバージョンでは、中断します。
これらのメッセージが 1 を処理する必要があるという特殊なケースでは ON_MESSAGE のメッセージ マップ マクロを使用して、ジェネリック LRESULT/WPARAM/LPARAM の形式でメッセージを処理する必要があります。
WM_QUERYAFXWNDPROC
このメッセージが作成されているウィンドウに送信されます。これは、 WndProc が AfxWndProc.であるかどうかを判断するメソッドとして作成プロセスで初期に送信されますAfxWndProc の戻り 1。
[wParam] |
未使用 |
[lParam] |
未使用 |
の場合、 |
AfxWndProcで処理される 1 |
WM_SIZEPARENT
このメッセージは、サイズ変更の間に直接の子にフレーム ウィンドウで (CFrameWnd::OnSize は CFrameWnd::RecalcLayout をゾーンの側の周囲にコントロール バーを再配置するにダイヤルします CWnd::RepositionBarsをダイヤルする)送信されます。DeferWindowPos をダイヤルするように塗りつぶす直を最小限に抑えるために AFX_SIZEPARENTPARAMS の構造 (現在の使用できるクライアントの四角形を null である可能性もあります) HDWP と親含まれています。
[wParam] |
未使用 |
[lParam] |
AFX_SIZEPARENTPARAMS の構造体のアドレス |
の場合、 |
使用されていない (0) |
メッセージを無視するペインがレイアウトに参加しないことを示します。
WM_SETMESSAGESTRING
このメッセージは、フレーム ウィンドウに、ステータス バーのメッセージ行を更新するよう要求として送信されます。文字列の ID または LPCSTR を指定できます (両方)。
[wParam] |
文字列の ID (またはゼロ) |
[lParam] |
文字列 (または null)の LPCSTR |
の場合、 |
使用されていない (0) |
WM_IDLEUPDATECMDUI
このメッセージは、更新コマンドの UI ハンドラーのアイドルの更新を実行するアイドル時間に送信されます。ペイン (通常は)コントロール バーがメッセージを処理する場合、ペインで CCmdUI のオブジェクト (または派生クラスのオブジェクト)と 「Item」の呼び出し CCmdUI::DoUpdate を作成します。これは、コマンド ハンドラーのチェーンのオブジェクトの ON_UPDATE_COMMAND_UI ハンドラーを持つように確認します。
[wParam] |
ブールの bDisableIfNoHandler |
[lParam] |
使用されていない (0) |
の場合、 |
使用されていない (0) |
bDisableIfNoHandler はON_UPDATE_COMMAND_UION_COMMAND ハンドラーはゼロ以外の UI オブジェクトを null になります。
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] |
rectClient LPRECT は null である可能性があります。 |
の場合、 |
それ以外の場合は false を新しいクライアントの四角形を取得します。 |
WM_SIZECHILD
このメッセージは、オーナー ウィンドウに COleResizeBar によってユーザーがサイズ変更ハンドルを使用してサイズ変更のバーのサイズを変更すると GetOwnerによって送信されます ()。COleIPFrameWnd はこのメッセージにフレーム ウィンドウを再配置すると、によってユーザーが要求したように応答します。
サイズ変更のバーを含むフレーム ウィンドウに関連してクライアント座標で指定された新しい四角形は lParam することで、参照できます。
[wParam] |
使用されていない (0) |
[lParam] |
LPRECT の rectNew |
の場合、 |
使用されていない (0) |
WM_DISABLEMODAL
このメッセージは非アクティブ フレーム ウィンドウが所有するすべてのポップアップ ウィンドウに送信されます。フレーム ウィンドウが決定に結果をかどうかをポップアップ ウィンドウを無効にするために使用します。
ゾーンがモーダル状態を行ったり入力するか、ディセーブルにならないように指定されたポップアップ ウィンドウの表示をするときに特別な処理をポップアップ ウィンドウに保存するために使用します。ツールヒントは、フレーム ウィンドウをモーダル状態にすると、自身を破棄するには、このメッセージをたとえば使用します。
[wParam] |
使用されていない (0) |
[lParam] |
使用されていない (0) |
の場合、 |
ペインが無効であることを NOT の無効にゼロ以外ウィンドウ、 0 は示します |
WM_FLOATSTATUS
このメッセージは、フレーム ウィンドウが所有するすべてのポップアップ ウィンドウに帯を別のトップレベルのフレーム ウィンドウによってアクティブまたは非アクティブ化されたときに送信されます。CMiniFrameWndで MFS_SYNCACTIVE の実装によってこれは、トップ レベル フレーム ウィンドウのアクティベーションと同期してこれらのポップアップ ウィンドウのアクティベーションを保持するために使用されます。
[wParam] |
次の値の一つです: 1 FS_SHOW FS_HIDE FS_ACTIVATE FS_DEACTIVATE FS_ENABLEFS_DISABLE FS_SYNCACTIVE |
[lParam] |
使用されていない (0) |
戻り値は FS_SYNCACTIVE が設定され、ペインが親ゾーンとのアクティベーションを syncronizes ゼロ以外である必要があります。CMiniFrameWnd 、フォームが **MFS_SYNCACTIVE.**に設定されている場合以外を返します
詳細については、 CMiniFrameWndの実装を参照してください。
WM_ACTIVATETOPLEVEL
このメッセージはトップレベル ウィンドウに 「Top-level グループ」ペインがアクティブまたは非アクティブ化されたときに送信されます。ウィンドウは、がトップレベル (親ウィンドウまたはオーナーがない)場合、またはそのようなウィンドウが所有しますトップレベルのグループの一部です。このメッセージは WM_ACTIVATEAPP, 異なるプロセスに属するペインが一つのウィンドウ階層に混在する状況の作業に類似の使用中ですが、 (OLE アプリケーションで共通)。
WM_COMMANDHELP、 WM_HELPHITTEST、 WM_EXITHELPMODE
これらのメッセージは状況依存のヘルプの実装で使用されます。 詳細については テクニカル ノート 28 を参照してください。
MFC のプライベート リソース フォーム
現在、 MFC は 2 種類のプライベート リソース フォームを定義します: RT_TOOLBAR と RT_DLGINIT。
RT_TOOLBAR のリソース フォーム
AppWizard によって指定される既定のツールバーは、 MFC 4.0 で導入された RT_TOOLBAR のカスタム リソースに基づいています。ツールバー エディターを使用してこのリソースを編集できます。
RT_DLGINIT のリソース フォーム
1 個の MFC リソースのプライベート フォームが余分なダイアログの初期化情報を格納するために使用されます。これは、コンボ ボックスに格納されている最初の文字列が含まれています。このリソースのフォームは手動で編集されるようにデザインされていませんが、 Visual C++ によって処理されます。
API の代わりにリソースの情報を使用することになるので、 Visual C++ および RT_DLGINIT のこのリソースは、 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 をメッセージが含まれます (| send 通常のウィンドウのメッセージ)とデータの可変長です。ウィンドウ メッセージはフォームで送信されます:
SendDlgItemMessage(<Control ID>, <Message #>, 0, &<Data>);
これは、非常に一般形式で、 Windows メッセージとデータ コンテンツを許可します。Visual C++ リソース エディターと MFC は、 Windows メッセージの限られた一部のみをサポートします: コンボ ボックスの最初の選択リストの CB_ADDSTRING (データは、テキスト文字列です)。