4

私はオープン ソース プロジェクトのコードをいくつか調べていますが、Win32 アプリを扱うのはこれが初めてです (主にコンソール関連の操作を行いました)。コード内のいくつかの関数は LRESULT CALLBACK を返すため、Windows プロシージャであることがわかります。

DispatchMessage が適切な WndProc を呼び出すか、または DispatchMessage が適切な WndProc をすべて独自に決定できるようにコーディングされていることを確認するために、プログラマーがしなければならないことはありますか?


編集:

DispatchMessage(const MSG*) がアプリケーション内の異なる WndProc を選択する方法は、渡された MSG オブジェクトのウィンドウ ハンドル メンバ (HWND) に基づいていると推測しています。たとえば、メッセージがアプリケーションの編集ウィンドウ用であった場合 (メイン ウィンドウ用ではありません)、DispatchMessage は、編集ウィンドウがオブジェクトである特定のクラスの WndProc メンバー関数を選択します。メッセージがメイン ウィンドウの場合、メイン ウィンドウがオブジェクトであるクラスの WndProc メンバー関数が選択されます (私にとって、このクラスは Notepad_plus_Window クラスになります)。ただし、これは単なる考えです。私はそれを裏付けるものがあまり見つからなかったので、誰かがこれを確認できたらうれしいです.

4

1 に答える 1

2

はい、その通りです。MSG.hwnd を使用してメッセージを正しいウィンドウに送信します。注意すべきことの 1 つは、ウィンドウ クラスではなく、ウィンドウに関連付けられた WndProc を使用することです。ウィンドウは、ウィンドウ クラスのインスタンスです。

Microsoft の "Under The Hood" のこの記事では、DispatchMessage() のかなり詳細な疑似コードでこれを説明しています。これも一見の価値があるかもしれません)。

于 2011-09-12T10:23:15.133 に答える