MFC下OpenGL编程有用的小代码片段
时间:2011-04-30 来源:一个农夫
1、MFC画图测试
void Codemo21View::draw(void)//画图测试
{
HWND hWnd = GetSafeHwnd();
HDC hDC = ::GetDC(hWnd);
wglMakeCurrent(hDC,m_hGLContext);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(1.5f,0.0f,-6.0f);
glBegin(GL_QUADS); // 绘制正方形
glColor3f(-1.0f,-1.0f,-1.0f);
glVertex3f(-1.0f, 1.0f, -100.0f); // 左上
glColor3f(0.0f,255.0f,0.0f);
glVertex3f( 1.0f, 1.0f,-100.0f); // 右上
glColor3f(0.0f,0.0f,255.0f);
glVertex3f( 1.0f,-1.0f, -100.0f); // 左下
glColor3f(1.0f,1.0f,-1.0f);
glVertex3f(-1.0f,-1.0f, -100.0f); // 右下
glEnd(); // 正方形绘制结束
SwapBuffers(hDC);
}
2、OpenGL初始化
BOOL Codemo21View::PreCreateWindow(CREATESTRUCT& cs)
{
cs.style |= (WS_CLIPCHILDREN | WS_CLIPSIBLINGS);//openGL必需的
return CView::PreCreateWindow(cs);
}
3、
// 分析标准外壳命令、DDE、打开文件操作的命令行
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
//取消MDI运行时默认新建文件。
if(cmdInfo.m_strFileName == "")
cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;
4、
//对象类型判断
//oTe是oFireworks的父类,只有一个虚函数
oFireworks *p_osh = dynamic_cast<oFireworks *>((oTe *)pView->TreeCtrl->GetItemData(pView->TreeCtrl->GetSelectedItem()));
if(NULL == p_osh)
{
//pObject不能指向一个oFireworks对象
AfxMessageBox(_T("no"));
}
else
{
//pObject被安全的转换成了oFireworks对象
AfxMessageBox(_T("yes"));
}
5、非模式对话框
if(m_playdialog == null)
{
m_playdialog = new oaplaydialog();
m_playdialog->create(idd_oaplaydialog,this);
m_playdialog->showwindow(sw_show);
}
else
{
m_playdialog->showwindow(sw_show);
m_playdialog->setactivewindow();
}
6、
“\ntt3\ntt5\ntt4 Files (*.tt0)\n.tt0\ntt1.Document\ntt6.Document ”
“\n文档类型名称\n新文件简称\n筛选器名\n扩展名\n文件类型\n文件类型全称”
7、
无论是调用DestroyWindow()还是发送WM_CLOSE消息,窗口关闭后一定要删除CWND对象,否则它将成为内存中的垃圾。