设为首页 加入收藏

TOP

制作一个基于MFC对话框的OpenGL类(一)
2014-11-23 20:25:15 】 浏览:9789
Tags:制作 一个 基于 MFC 对话 OpenGL

今天写了个基于MFC对话框的OpenGL类:COpenGL,可以在对话框程序中使用OpenGL了,并且提供了全屏与非全屏转换的两个函数,很容易使用,速度快。

使用方法:在对话框上加一个Static控件(或者其他的也可以),在OnInitDialog()中加人下面这段代码(假设控件ID为IDC_OPENGL,m_openGL是类COpenGL的对象):

Code: CRect rect;

GetDlgItem(IDC_OPENGL)->GetWindowRect(rect);

ScreenToClient(rect);

m_openGL.Create(rect, this);

然后在适当的地方调用m_openGL.RenderGLScene()就可以了。

以下是类代码(OpenGL.h和OpenGL.cpp):

Code:#if !defined(AFX_OPENGL_H__38B5D1C8_2DFF_4A7D_9A99_3AC401C19D72__INCLUDED_)

#define AFX_OPENGL_H__38B5D1C8_2DFF_4A7D_9A99_3AC401C19D72__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

// OpenGL.h : header file

//

/////////////////////////////////////////////////////////////////////////////

// COpenGL window

class COpenGL : public CWnd

{

// Construction

public:

COpenGL();

// Attributes

public:

// Operations

public:

// Overrides

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(COpenGL)

//}}AFX_VIRTUAL

// Implementation

public:

BOOL SetNormScreen();

BOOL SetFullScreen(int width, int height, int depth);

virtual void RenderGLScene();

void Create(CRect rect, CWnd *parent);

virtual ~COpenGL();

// Generated message map functions

protected:

CRect m_rect;

CWnd* m_parent;

BOOL m_bFullScreen;

DEVMODE m_DMsaved;

BOOL m_bInit;

int InitGL();

void KillGLWindow();

HDC m_hDC;

HGLRC m_hRC;

//{{AFX_MSG(COpenGL)

afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);

afx_msg void OnPaint();

afx_msg void OnSize(UINT nType, int cx, int cy);

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}

// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_OPENGL_H__38B5D1C8_2DFF_4A7D_9A99_3AC401C19D72__INCLUDED_)

Code:// OpenGL.cpp : implementation file

//

#include "stdafx.h"

#include "DialogOpenGL.h"

#include "OpenGL.h"

#include

#include

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

// COpenGL

COpenGL::COpenGL():m_bInit(FALSE),m_bFullScreen(FALSE),

m_hDC(NULL),m_hRC(NULL),m_parent(NULL)

{

}

COpenGL::~COpenGL()

{

KillGLWindow(); // Shutdown

}

BEGIN_MESSAGE_MAP(COpenGL, CWnd)

//{{AFX_MSG_MAP(COpenGL)

ON_WM_CREATE()

ON_WM_PAINT()

ON_WM_SIZE()

ON_WM_KEYDOWN()

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// COpenGL message handlers

void COpenGL::Create(CRect rect, CWnd *parent)

{

if (m_bInit) return;

ASSERT(rect);

ASSERT(parent);

m_rect = rect;

m_parent = parent;

CString className = AfxRegisterWndClass(

CS_HREDRAW | CS_VREDRAW | CS_OWNDC,NULL,(HBRUSH)GetStockObject(BLACK_BRUSH),NULL);

CreateEx(0,className,"OpenGL",WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,rect,parent,0);

}

int COpenGL::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

if (CWnd::OnCreate(lpCreateStruct) == -1)

return -1;

// TODO: Add your specialized creation code here

EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &m_DMsaved);

GLuint PixelFormat; // Holds The Results After Searching For A Match

static PIXELFORMATDESCRIPTO

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇深入理解sizeof 下一篇纯C语言:分治快速排序源码

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目