C++ CDC和CreateCompatibleDC和wglMakeCurrent,不是我所期望的

C++ CDC和CreateCompatibleDC和wglMakeCurrent,不是我所期望的,c++,opengl,mfc,C++,Opengl,Mfc,因此,我试图创建一个CBitmap,方法是将其加载到CDC并绘制到CDC上 ; 项目开始时的某个地方(这是我们制作m_hGLRC的地方) 我们的常规工作视图绘制 CPaintDC pDC(someCView); bResult = wglMakeCurrent(pDC.m_hDC, m_hGLRC); bResult总是正确的,我们开始引入这个CPaintDC 我想做的事 CClientDC cliDC(sameCViewAsAbove); CDC dcMem; dcMem.CreateCo

因此,我试图创建一个CBitmap,方法是将其加载到CDC并绘制到CDC上

;

项目开始时的某个地方(这是我们制作m_hGLRC的地方)

我们的常规工作视图绘制

CPaintDC pDC(someCView);
bResult = wglMakeCurrent(pDC.m_hDC, m_hGLRC);
bResult总是正确的,我们开始引入这个CPaintDC

我想做的事

CClientDC cliDC(sameCViewAsAbove);
CDC dcMem;
dcMem.CreateCompatibleDC(cliDC); // This returns true. everything looks good. 

bResult = wglMakeCurrent(dcMem.m_hDC, m_hGLRC);
if(!bResult)
{
    int err = GetLastError();  // I hit this and err == 2000(ERROR_INVALID_PIXEL_FORMAT)
}
wglMakeCurrent返回False和err==错误\u无效\u像素\u格式。。。 我计算了dcMem.CreateCompatibleDC(someClientDC);如果使用我们一直用来绘制的相同CView创建someClientDC,则会创建一个实际兼容的DC

我尝试使用CPaintDC而不是CClientDc,结果相同

注意:这工作正常…没有错误

CClientDC cliDC(sameCViewAsAbove);
bResult = wglMakeCurrent(cliDC.m_hDC, m_hGLRC);

因此,如果我的dcMem是用cliDc创建的,并且cliDc是兼容的,为什么dcMem不能工作呢?

那么,您的实际像素格式设置在哪里?您应该为此使用一个特殊标志(
PFD\u DRAW\u TO\u BITMAP
),否则您手头的任务绝对有一个无效的像素格式。@Andon-谢谢。我不认为改变我的像素格式是必要的,因为我使用了一个兼容的ClientDC,从它“CreateCompatibleDC”。我还没有找到解决方案,但我意识到像素格式是错误的。我会接受你的评论作为答案。你应该编辑你的问题以显示更多的代码(特别是像素格式),而不是试图自己找到解决方案。事实上,我不愿意写一个不是实际答案的答案……我想说的是,在位图DCs上创建OpenGL上下文总是会导致软件回退OpenGL-1.1,这非常缓慢。您真正应该做的是在一个隐藏窗口上创建一个OpenGL上下文,生成一个帧缓冲区对象,渲染该对象,并使用glReadPixels将结果读取到DIBSECTION。
CClientDC cliDC(sameCViewAsAbove);
bResult = wglMakeCurrent(cliDC.m_hDC, m_hGLRC);