OpenGL的MFC框架

 

1. MFC框架

2. 在WM里面去掉右键菜单

3. 注意开始时候视角后移...

4. 鼠标事件后要刷新图形 InvalidateRect

5. GetClientDC

6. 相应头文件放在stdafx.h里

7. 去掉Windows刷新

8. 防止内存泄漏

 

9.#pragma comment(lib,"opengl32.lib") 没有把对应的lib文件设置进去

 

----------------------------------------------------------------------------------------------------------------

以下转载

----------------------------------------------------------------------------------------------------------------

 

以下全部的操作均在CView类中完成

1.首先添加一个WM_CREATE消息, 相应消息代码如下

    HWND hWnd = GetSafeHwnd();
    HDC hDC = ::GetDC(hWnd);

    if (SetWindowPixelFormat(hDC)==FALSE{
   
     return 0;
    }

    if (CreateViewGLContext(hDC)==FALSE{
    
    return 0;
    }

2.我们可以看到其中有两个函数SetWindowPixelFormat和CreateViewGLContext, 他们的作用分别是设置窗口像素格式以及创建OpenGL上下文环境, 代码如下

BOOL CCal3DPlatView::SetWindowPixelFormat(HDC hDC)
{
    
PIXELFORMATDESCRIPTOR pixelDesc;

    
pixelDesc.nSize = sizeof(PIXELFORMATDESCRIPTOR);
    
pixelDesc.nVersion = 1;

    
pixelDesc.dwFlags = PFD_DRAW_TO_WINDOW | 
                               
PFD_SUPPORT_OPENGL    |
                               
PFD_STEREO_DONTCARE  |
                               
PFD_DOUBLEBUFFER;

    
pixelDesc.iPixelType = PFD_TYPE_RGBA;
    
pixelDesc.cColorBits = 32;
    
pixelDesc.cRedBits = 8;
    
pixelDesc.cRedShift = 16;
    
pixelDesc.cGreenBits = 8;
    
pixelDesc.cGreenShift = 8;
    
pixelDesc.cBlueBits = 8;
    
pixelDesc.cBlueShift = 0;
    
pixelDesc.cAlphaBits = 0;
    
pixelDesc.cAlphaShift = 0;
    
pixelDesc.cAccumBits = 64;    
    
pixelDesc.cAccumRedBits = 16;
    
pixelDesc.cAccumGreenBits = 16;
    
pixelDesc.cAccumBlueBits = 16;
    
pixelDesc.cAccumAlphaBits = 0;
    
pixelDesc.cDepthBits = 32;
    
pixelDesc.cStencilBits = 8;
    
pixelDesc.cAuxBuffers = 0;
    
pixelDesc.iLayerType = PFD_MAIN_PLANE;
    
pixelDesc.bReserved = 0;
    
pixelDesc.dwLayerMask = 0;
    
pixelDesc.dwVisibleMask = 0;
    
pixelDesc.dwDamageMask = 0;

    
m_GLPixelIndex = ChoosePixelFormat(hDC, &pixelDesc);
    
if (m_GLPixelIndex == 0{
        
m_GLPixelIndex = 1;    
        
if (DescribePixelFormat(hDC, 
                                
m_GLPixelIndex, 
                                
sizeof(PIXELFORMATDESCRIPTOR), 
                                
&pixelDesc)==0{
            
return FALSE;
        
}
    
}

    
if (SetPixelFormat(hDC, 
                       
m_GLPixelIndex, 
                       
&pixelDesc)==FALSE{
        
return FALSE;
    
}

    
return TRUE;
}

BOOL CCal3DPlatView::CreateViewGLContext(HDC hDC)
{
    
m_hGLContext = wglCreateContext(hDC);
    
if (m_hGLContext == NULL{
        
return FALSE
    
}

    
if (wglMakeCurrent(hDC, m_hGLContext== FALSE)    {
        
return FALSE;
    
}

    
return TRUE;
}

3.最后, 只要添加ON_PAINT消息并在相应函数中编写普通的OpenGL代码即可, 以下代码中SwapBuffers函数是关键的一步, 由于使用了双缓存技术; 其余的函数均有各位编写, 功能如函数名所示

void CCal3DPlatView::OnPaint()
{
    
CPaintDC dc(this); // device context for painting
    
// TODO: 在此处添加消息处理程序代码
    
// 不为绘图消息调用 CView::OnPaint()
    
InitGLParameter();
    
    
CheckOrtho();

    
RenderScene();

    
SwapBuffers(dc.m_ps.hdc);
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值