Win7环境使用VC2008进行OpenGL编程

2012-03-12 19:33:35|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词:C/C++, 图形/图像, MFC|来源:唯设编程网

Step 6、完成测试用MFC应用程序glGobang。

6.1. 在入口对话框头文件glGobangDlg.h中添加COpenGLLib类的引用语句:

#include "..OpenGLLibOpenGLLib.h"
#pragma comment (lib,"..debugOpenGLLib.lib")

6.2. 在类CglGobangDlg中定义OpenGL绘图用到的变量:

// CglGobangDlg 对话框
class CglGobangDlg : public CDialog
{
private:
	COpenGLLib* pOpenGL;
	CClientDC*  pImgDC;
	//...
}

6.3. 在类CglGobangDlg的构造函数后面增加变量的初始化语句:

CglGobangDlg::CglGobangDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CglGobangDlg::IDD, pParent),
	pOpenGL(NULL),pImgDC(NULL)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

6.4. 在OnInitDialog()函数中新建COpenGLLib类的实例,并将其保存到成员指针变量中,设置绘制大小为整个对话框的客户区域。

// CglGobangDlg 消息处理程序
BOOL CglGobangDlg::OnInitDialog()
{
	//......
	// TODO: 在此添加额外的初始化代码
	RECT recIMG;    //画布区域
	//在其它控件中画图,将下面两行的this改成其它控件的CWnd即可
	pImgDC=new CClientDC(this);
	this->GetWindowRect(&recIMG);

	pOpenGL=new COpenGLLib(pImgDC);	
	pOpenGL->resetCanvasSize(recIMG.right-recIMG.left,recIMG.bottom-recIMG.top);
	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

6.5. 在OnPaint()函数中添加代码调用OpenGL绘图的具体函数。

void CglGobangDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于绘制的设备上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使图标在工作区矩形中居中
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// 绘制图标
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
		//进行OpenGL绘图
		pOpenGL->draw();
	}
}
发表评论0条 】
网友评论(共?条评论)..
Win7环境使用VC2008进行OpenGL编程