我正在开发一个涉及 openGL 的 win32 c/cpp 项目。我刚刚开始并且有一些关于标准 win32 程序如何工作的基本问题。按照教程,我让winmain创建了一个新窗口,为该窗口启用openGL,然后进入主循环,如果有消息,程序处理它们,否则程序继续绘制openGL动画。之后,我简单地关闭了 openGL 并销毁了窗口。我对这里发生的事情并不太困惑,但这就是我迷路的地方:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch (message)
{
case WM_CREATE:
return 0;
case WM_CLOSE:
PostQuitMessage( 0 );
return 0;
case WM_DESTROY:
return 0;
case WM_KEYDOWN:
switch ( wParam )
{
case VK_ESCAPE:
PostQuitMessage(0);
return 0;
}
return 0;
default:
return DefWindowProc( hWnd, message, wParam, lParam );
}
虽然我确实在 winmain 中看到我通过以下方式将此函数注册到我的窗口类
wc.lpfnWndProc = WndProc;
这个过程究竟是如何工作的?有人可以向我解释一下管道吗 - 当 winmain 方法运行时,它会继续绘制 opengl 动画,但是一旦按下一个键,它就会进入消息处理......然后呢?我的 winmain 方法如何与 WndProc 方法通信?从机器的角度来看,实际发生了什么?