在对话框中dialog 创建简单opengl程序
2013-12-30 12:43
417 查看
前言:用opengl库在mfc 对话框程序中创建简单的opengl程序
开发环境:vs2010+opengl库
opengl库:下载opengl库
程序源码下:http://download.csdn.net/detail/wangsky2/6787807
参考:http://hi.baidu.com/xun1573/item/7041b8344d9152f1e6bb7a6e
步骤:
1.用vs2010创建mfc dialog对话框程序
![](https://img-blog.csdn.net/20131230114636968?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3NreTI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20131230114740843?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3NreTI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20131230114839906?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3NreTI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
直接点击完成,创建工程结束。
2.删掉对话框上面的lable,及button按钮
3.打开对话框页,并选择“”项目“中的 ”添加类向导“ 打开添加类向导对话框,添加WM_CLOSE .WM_SIZE 方法
![](https://img-blog.csdn.net/20131230132340187?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3NreTI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
4.打开Dlg_OpenGLDlg.h文件,修改如下代码:
5.打开Dlg_OpenGLDlg.cpp,修改文件如下:
6.修改程序的字符编码方式为使用多字节字符集
![](https://img-blog.csdn.net/20131230134517625?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3NreTI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
7.添加opengl include 和lib目录
![](https://img-blog.csdn.net/20131230134719921?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3NreTI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20131230134738546?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3NreTI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
完成,运行即可
![](https://img-blog.csdn.net/20131230135347421?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3NreTI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
程序源码下:http://download.csdn.net/detail/wangsky2/6787807
开发环境:vs2010+opengl库
opengl库:下载opengl库
程序源码下:http://download.csdn.net/detail/wangsky2/6787807
参考:http://hi.baidu.com/xun1573/item/7041b8344d9152f1e6bb7a6e
步骤:
1.用vs2010创建mfc dialog对话框程序
直接点击完成,创建工程结束。
2.删掉对话框上面的lable,及button按钮
3.打开对话框页,并选择“”项目“中的 ”添加类向导“ 打开添加类向导对话框,添加WM_CLOSE .WM_SIZE 方法
4.打开Dlg_OpenGLDlg.h文件,修改如下代码:
#pragma once #include <gl/glut.h> #include <gl/glaux.h> class CDlg_OpenGLDlg : public CDialogEx { // 构造 public: CDlg_OpenGLAppDlg(CWnd* pParent = NULL); // 标准构造函数 // 对话框数据 enum { IDD = IDD_DLG_OPENGLAPP_DIALOG }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 void DrawFunc(); //在Dlg中添加一个成员函数 void ChangeDrawWinSize(); // 实现 protected: HICON m_hIcon; HGLRC hRC; HDC hDC; // 生成的消息映射函数 virtual BOOL OnInitDialog(); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); afx_msg void OnTimer(UINT nIDEvent); DECLARE_MESSAGE_MAP() public: afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg void OnClose(); };
5.打开Dlg_OpenGLDlg.cpp,修改文件如下:
// Dlg_OpenGLDlg.cpp : 实现文件 // #include "stdafx.h" #include "Dlg_OpenGL.h" #include "Dlg_OpenGLDlg.h" #include "afxdialogex.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CDlg_OpenGLDlg 对话框 CDlg_OpenGLDlg::CDlg_OpenGLDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CDlg_OpenGLDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CDlg_OpenGLDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CDlg_OpenGLDlg, CDialogEx) ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_WM_TIMER() ON_WM_SIZE() ON_WM_CLOSE() END_MESSAGE_MAP() // CDlg_OpenGLDlg 消息处理程序 BOOL CDlg_OpenGLDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 /****************************************************************/ //在OnInitDialog中设置像素格式,并在DC中选择这种格式 static PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, PFD_TYPE_RGBA, 24 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32 , 0, 0, PFD_MAIN_PLANE, 0, 0, 0, 0 }; int pixelformat; hDC = ::GetDC(this->GetSafeHwnd()); if (!(pixelformat = ChoosePixelFormat(hDC , &pfd))) { MessageBox("ChoosePixelFormat failed!"); return false; } if (!SetPixelFormat(hDC , pixelformat , &pfd)) { MessageBox("SetPixelFormat failed!"); return false; } if (!(hRC = wglCreateContext(hDC))) { MessageBox("CreateContext failed!"); return false; } if (!wglMakeCurrent(hDC , hRC)) { MessageBox("MakeCurrent failed!"); return false; } ChangeDrawWinSize(); SetTimer(1 , 50 , NULL); //使用一个定时器(最简单的做法) /****************************************************************/ return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CDlg_OpenGLDlg::ChangeDrawWinSize() { CRect rect; //在这个矩形中画图 GetClientRect(rect); //绘制区域占据整个窗口大小 glViewport(0 , 0 , rect.Width() , rect.Height()); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f , rect.Width()/rect.Height() , 0.1f , 100.0f);// 计算窗口的外观比例*/ //gluPerspective(45.0f , 640/480 , 0.1f , 100.0f);// 计算窗口的外观比例 glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glClearColor(0.0f , 0.0f , 0.0f , 1.0f); glClearDepth(1.0f); glEnable(GL_DEPTH_TEST); } void CDlg_OpenGLDlg::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 { CDialogEx::OnPaint(); } } //当用户拖动最小化窗口时系统调用此函数取得光标 //显示。 HCURSOR CDlg_OpenGLDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CDlg_OpenGLDlg::OnTimer(UINT nIDEvent) { DrawFunc(); //定时器中调用这个函数 CDialog::OnTimer(nIDEvent); } void CDlg_OpenGLDlg::DrawFunc() //函数具体实现 { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslatef(0.0f , 0.0f , -3.0f); glBegin(GL_QUADS); //绘制正方形 glTexCoord2f(0.0,1.0); //纹理左上 glVertex3f(-1.0f,1.0f,0.0f); //四边形左上 glTexCoord2f(1.0,1.0); //纹理右上 glVertex3f(1.0f,1.0f,0.0f); //右上 glTexCoord2f(1.0,0.0); //纹理右下 glVertex3f(1.0f,-1.0f,0.0f); //右下 glTexCoord2f(0.0,0.0); //纹理左下 glVertex3f(-1.0f,-1.0f,0.0f); //左下 glEnd(); SwapBuffers(hDC); //利用双缓冲 } void CDlg_OpenGLDlg::OnSize(UINT nType, int cx, int cy) { CDialogEx::OnSize(nType, cx, cy); ChangeDrawWinSize(); // TODO: 在此处添加消息处理程序代码 } void CDlg_OpenGLDlg::OnClose() { // TODO: 在此添加消息处理程序代码和/或调用默认值 KillTimer(1);//结束settimer CDialogEx::OnClose(); }
6.修改程序的字符编码方式为使用多字节字符集
7.添加opengl include 和lib目录
完成,运行即可
程序源码下:http://download.csdn.net/detail/wangsky2/6787807
相关文章推荐
- 基于MFC的对话框Dialog的OpenGL程序框架
- 使用CMakeLists.txt创建一个简单的opengl程序
- 不使用ATL向导,创建一个简单的ATL对话框程序.
- Android 官方推荐 : DialogFragment 创建对话框
- DIRECTDRAW 1:创建一个简单的DIRECTDRAW程序
- Android:AlertDialog.Builder创建常见对话框
- Android 官方推荐 : DialogFragment 创建对话框
- OpenGL 简单图形程序
- Android 官方推荐 : DialogFragment 创建对话框
- EasyUi常用组件(四)Dialog对话框、创建按钮(Buttons)、创建工具栏(Toolbar)
- Android 官方推荐 : DialogFragment 创建对话框
- Android 官方推荐 : DialogFragment 创建对话框
- 我的WCF之旅(1):创建一个简单的WCF程序
- [教程]创建一个简单的画笔程序
- 创建一个简单的WCF程序
- qt-opengl 初学的一个简单的程序
- bada开发:OpenGL ES 2.0程序 创建简单3D图形
- 我的第一个MFC程序------登录对话框简单实现
- 安装好DELPHI XE10,参照手册简单的创建了一个android app 程序,run的时提示: Android SDK tools are required. Do you want to d
- 一个简单的OpenGL程序