为什么我不能在这个假的 OpenGL 上下文中检查 OpenGL 版本?

Why I cannot check OpenGL version in this fake OpenGL context?

我正在尝试检查 OpenGL 版本以创建一个伪造的 OpenGL 上下文,但我得到的始终是版本 0。我使用以下代码创建了一个伪造的上下文:

  PIXELFORMATDESCRIPTOR pfd;
  ZeroMemory( &pfd, sizeof( pfd ) );
  pfd.nSize = sizeof( pfd );
  pfd.nVersion = 1;
  pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL |
                PFD_DOUBLEBUFFER;
  pfd.iPixelType = PFD_TYPE_RGBA;
  pfd.cColorBits = 24;
  pfd.cDepthBits = 16;
  pfd.iLayerType = PFD_MAIN_PLANE;
  WINDOWINFO info;
  HWND mHWND;
 info.cbSize = sizeof(WINDOWINFO);
  GetWindowInfo(mHWND,&info);
  HDC mDC; 
  mDC = GetDC(mHWND);
  int fmt = ChoosePixelFormat( mDC, &pfd );
  SetPixelFormat( mDC, fmt, &pfd );

  HGLRC mOGLCtx;
  mOGLCtx = wglCreateContext( mDC );

  wglMakeCurrent(mDC, mOGLCtx);

并尝试用这个检查版本:

glGetString(GL_VERSION)

在获取其 DC 之前尝试获取 (GetActiveWindow, GetForegroundWindow) 或创建 (CreateWindowEx) window 句柄或尝试 GetDC(0).

可以创建最小的 OpenGL 上下文:

HWND wnd = CreateWindow(
        "STATIC",
        "GL",
        WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
        0, 0, 16, 16,
        NULL, NULL,
        NULL, NULL );
    HDC dc = GetDC( wnd );

    PIXELFORMATDESCRIPTOR pfd = {
        sizeof(PIXELFORMATDESCRIPTOR), 1,
        PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL,
        PFD_TYPE_RGBA, 32,
        0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0,
        16, 0,
        0, PFD_MAIN_PLANE, 0, 0, 0, 0
    };

    int fmt = ChoosePixelFormat( dc, &pfd );
    SetPixelFormat( dc, fmt, &pfd );

    HGLRC rc = wglCreateContext( dc );
    wglMakeCurrent( dc, rc );

以同样的方式检查OpenGL版本:

glGetString(GL_VERSION)

为了更高效,毕竟:

// Clean GL context
wglDeleteContext( rc );
ReleaseDC( wnd, dc );
DestroyWindow( wnd );