私は現在、DirectX と Win32 API に基づく小さなレンダリング エンジンを開発しようとしています。私が現在解決しようとしている問題は、コードを正しく整理して、DirectX コードに影響を与える Windows メッセージ (たとえば、DirectX バッファーのサイズ変更を意味する WM_SIZE メッセージ) を処理する方法です。
ウィンドウの作成時にウィンドウに渡される WndProc 関数で実行する必要がありますが、関心のあるメッセージを「転送」する方法がわかりません。これまでのところ、次の方法しか見つかりませんでした。
//main.cpp
Renderer* renderer;
//some code
//The window procedure
LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
PAINTSTRUCT ps;
HDC hdc;
//We forward the message to the Renderer, which handles it or not
if(renderer->HandleMessage(hWnd,message,wParam,lParam){
return 0;
}
//If the renderer does not handle the message, we do as usual
switch( message )
{
case WM_PAINT:
hdc = BeginPaint( hWnd, &ps );
EndPaint( hWnd, &ps );
break;
case WM_DESTROY:
PostQuitMessage( 0 );
break;
default:
return DefWindowProc( hWnd, message, wParam, lParam );
}
return 0;
}
私がこのアプローチで抱えている問題は、それがグローバル変数 (レンダラー) に依存していることです。グローバル変数を使用することは良い習慣ではないとよく耳にします (そして私は経験がないと感じています)。それを使用する必要があるかどうかを判断するのに十分です)
グローバル変数を必要とせずにウィンドウ メッセージを「転送」するためのより良い方法があるかどうかを知りたいです。