DefWindowProcの引数エラー
くだらないことで躓いたのでメモしておきます。
ダイアログを作るところで、プロジェクトのクラスのstaticメソッドにしてある関数をコールバック関数にし、デフォルトプロシージャに渡すところです。
// ウィンドウのプロシージャー関数. LRESULT CALLBACK CBaseDlg::SubWndProc( HWND hW, UINT iM, WPARAM wP, LPARAM lP ) { return DefWindowProc ( hW, iM, wP, lP ); }
これをビルドすると以下のようなビルドエラーが出ます。
'CWnd::DefWindowProcW' : 関数に 4 個の引数を指定できません。
MSDNみても引数は4個だし、、じゃぁ、いくつの引数が欲しいのよ!!!!と何故かオネェ言葉で切れそうになります。
が、一歩引いて冷静に考えると次のコードで正しくなることがわかります。
// ウィンドウのプロシージャー関数. LRESULT CALLBACK CBaseDlg::SubWndProc( HWND hW, UINT iM, WPARAM wP, LPARAM lP ) { return ::DefWindowProc ( hW, iM, wP, lP ); }
修正した箇所は一箇所。
"::DefWindowProc" .. つまり、グローバルスコープの関数である、というところを強調してあげないといけないのですね。