2014-02-19 23 views
0

我想用OpenGL创建一个简单的ActiveX控件。我添加一些样式的PreCreateWindow:如何在ActiveX控件中正确初始化OpenGL?

BOOL CMFCActiveXControl1Ctrl::PreCreateWindow(CREATESTRUCT& cs) { 
    cs.style |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN; 
    cs.lpszClass = _T("STATIC"); 
    return COleControl::PreCreateWindow(cs); 
} 

的OpenGL的初始化:

int CMFCActiveXControl1Ctrl::OnCreate(LPCREATESTRUCT lpCreateStruct) { 
    PIXELFORMATDESCRIPTOR pfd = { 0 }; 
    pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); 
    pfd.nVersion = 1; 
    pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_DOUBLEBUFFER | PFD_SUPPORT_OPENGL; 
    pfd.iPixelType = PFD_TYPE_RGBA; 
    pfd.cColorBits = 24; 
    pfd.cDepthBits = 16; 
    pfd.iLayerType = PFD_MAIN_PLANE; 
    hDC = ::GetDC(m_hWnd); 
    int format = ChoosePixelFormat(hDC, &pfd); 
    SetPixelFormat(hDC, format, &pfd); 
    hRC = wglCreateContext(hDC); 
    wglMakeCurrent(hDC, hRC); 
    return 0; 
} 

然后我尝试清除与红色颜色缓冲区,但我看到的只是一个黑色的方形:

void CMFCActiveXControl1Ctrl::OnDraw(
     CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid) 
{ 
    if (!pdc) 
     return; 
    glClearColor(1, 0, 0, 0); 
    SwapBuffers(wglGetCurrentDC()); 
} 

回答

0

glClearColor (...)实际上并没有清除颜色缓冲区,只是设置当您拨打glClear (...)时将使用的颜色。

有在GL3一个新功能:glClearBuffer (...)可用于清除缓冲区,以明确的值都在一个单一的电话,但通常你会需要设定明确的颜色,而不是之后调用glClear (GL_COLOR_BUFFER_BIT)