win32 / opengl和回调函数..它们是如何构建的?

时间:2012-05-12 21:07:31

标签: windows winapi opengl callback

我正在开发一个涉及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方法通信?从机器的角度来看究竟发生了什么?

1 个答案:

答案 0 :(得分:0)

在您的WinMain中,应该有一对TranslateMessage / DispatchMessage来电。 TranslateMessage负责正确传递击键,DispatchMessage遍历窗口层次以将消息传递到具有输入焦点的窗口,有效地调用指针作为默认窗口消息处理程序(窗口过程)注册的函数,并将消息作为参数