WNDPROC
コールバックシグネチャ
LRESULT WNDPROC(
HWND param0,
DWORD param1,
WPARAM param2,
LPARAM param3
);パラメーター
| フィールド | 型 | 説明 |
|---|---|---|
| param0 | HWND | ウィンドウのハンドルです。このパラメーターは通常 hWnd という名前が付けられます。 |
| param1 | DWORD | メッセージです。このパラメーターは通常 uMsg という名前が付けられます。 システムが提供するメッセージの一覧については、システム定義メッセージを参照してください。 |
| param2 | WPARAM | メッセージの追加情報です。このパラメーターは通常 wParam という名前が付けられます。 wParam パラメーターの内容は、uMsg パラメーターの値によって異なります。 |
| param3 | LPARAM | メッセージの追加情報です。このパラメーターは通常 lParam という名前が付けられます。 lParam パラメーターの内容は、uMsg パラメーターの値によって異なります。 |
公式ドキュメント
アプリケーション定義のコールバック関数で、ウィンドウに送信されたメッセージを処理します。WNDPROC 型は、このコールバック関数へのポインターを定義します。WndProc という名前は、アプリケーション側で定義する関数名のプレースホルダーです。
戻り値
型: LRESULT
戻り値はメッセージ処理の結果であり、送信されたメッセージによって異なります。
解説(Remarks)
パラメーターはヘッダー内で名前を付けずに定義されています: typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);。そのため、構文ブロックでは unnamedParam1 ~ unnamedParam4 と表記されています。アプリケーション内ではこれらのパラメーターに任意の名前を付けられますが、通常はパラメーターの説明に示した名前が使われます。Visual Studio のプロジェクトテンプレートでも、これらの名前(またはテンプレートに応じて類似の名前)が使用されます。
アプリケーションが 32 ビット版の Windows オペレーティングシステムで動作している場合、コールバックからの未捕捉の例外は、利用可能であればアプリケーションの上位レベルの例外ハンドラーに渡されます。その後システムは、プロセスを終了する前に未処理例外フィルターを呼び出して例外を処理します。PCA が有効な場合は、次回アプリケーションを実行したときに問題の修正が提案されます。
ただし、アプリケーションが 64 ビット版の Windows オペレーティングシステムまたは WOW64 で動作する場合は、64 ビットオペレーティングシステムが、その 64 ビットプロセッサアーキテクチャ、例外アーキテクチャ、呼び出し規約に応じて未捕捉の例外を異なる方法で処理する点に注意してください。次の表は、64 ビット版の Windows オペレーティングシステムまたは WOW64 が未捕捉の例外を処理する方法をすべてまとめたものです。
| 動作の種類 | システムによる未捕捉の例外の処理方法 |
|---|---|
| 1 | システムは未捕捉の例外をすべて抑制します。 |
| 2 | システムはまずプロセスを終了し、その後プログラム互換性アシスタント (PCA) が、次回アプリケーションを実行したときに修正を提案します。アプリケーションマニフェストに互換性セクションを追加することで、PCA による緩和を無効にできます。 |
| 3 | システムは例外フィルターを呼び出しますが、コールバックのスコープを抜ける際に、対応するハンドラーを呼び出さずに未捕捉の例外を抑制します。 |
次の表は、64 ビット版の Windows オペレーティングシステムおよび WOW64 が未捕捉の例外をどのように処理するかを示しています。動作の種類 2 は、64 ビット版の Windows 7 オペレーティングシステム以降にのみ適用される点に注意してください。
| オペレーティングシステム | WOW64 | 64 ビット Windows |
|---|---|---|
| Windows XP | 3 | 1 |
| Windows Server 2003 | 3 | 1 |
| Windows Vista | 3 | 1 |
| Windows Vista SP1 | 1 | 1 |
| Windows 7 以降 | 1 | 2 |
Windows 7 SP1 (32 ビット、64 ビット、または WOW64) では、システムはプロセスを終了する前に未処理例外フィルターを呼び出して例外を処理します。プログラム互換性アシスタント (PCA) が有効な場合は、次回アプリケーションを実行したときに問題の修正が提案されます。
アプリケーションで例外を処理する必要がある場合は、構造化例外処理を使用できます。構造化例外処理の使用方法の詳細については、構造化例外処理を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)