Windows win32/opengl和回调函数。。它们是如何组织的?

Windows win32/opengl和回调函数。。它们是如何组织的?,windows,winapi,opengl,callback,Windows,Winapi,Opengl,Callback,我正在从事一个涉及openGL的win32 c/cpp项目。我刚刚开始,有一些关于标准win32程序如何工作的基本问题。在一个教程之后,我让winmain创建一个新窗口,为窗口启用openGL,然后进入主循环,如果有消息,程序将处理它们,否则,程序将继续绘制openGL动画。接下来,我简单地关闭openGL并销毁窗口。我对这里发生的事情并不太困惑,但这就是我迷路的地方: LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam

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

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

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

键在消息循环中。这就是调用窗口过程的结果。在我看来,你需要掌握佩佐德的经典著作,掌握最基本的知识。@DavidHeffernan这就是你要谈论的书吗?关键在于你的信息循环。这就是调用窗口过程的结果。听起来你需要掌握佩佐德的经典著作,掌握最基本的知识。@DavidHeffernan这就是你说的那本书吗?