我目前正在尝试开发一个基于 DirectX 和 Win32 API 的小型渲染引擎。我目前试图解决的问题是如何正确组织我的代码以处理影响 DirectX 代码的 Windows 消息(例如,WM_SIZE 消息,这意味着调整 DirectX 缓冲区的大小)。
它需要在创建窗口时传递给窗口的 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;
}
我对这种方法的问题是它依赖于一个全局变量(渲染器),我对此感到不舒服,因为我听说很多使用全局变量不是好的做法(而且我觉得我没有经验足以决定我是否应该使用它)
我想知道是否有更好的方法来“转发”窗口消息而不需要全局变量。