CDC和CreateCompatibleDC以及wglMakeCurrent,不是我所期望的

时间:2014-06-24 20:33:46

标签: c++ opengl mfc

所以我试图通过将它加载到CDC并绘制到它上来创建一个CBitmap。

MSDN example code ;

程序开始的某个地方(这是我们制作m_hGLRC的地方)

CDC *dc = GetDCEx(NULL, DCX_CACHE);
HGLRC m_hGLRC = wglCreateContext(dc->m_hDC);

我们的常规工作CView Draw

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,错误== ERROR_INVALID_PIXEL_FORMAT ... 我想到了dcMem.CreateCompatibleDC(someClientDC); someClientDC是在同一个CView中创建的,我们总是用来绘制它会创建一个实际兼容的DC。

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

注意:这很好用......没有错误。

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

因此,如果我的dcMem是从cliDc创建的,并且cliDC兼容,为什么dcMem不起作用?

0 个答案:

没有答案