最近在学OpenGL,不想使用OpenGL的GLUT工具,自己写了一个初始化OpenGL的类,并在win32中使用,每次都要新建一个win32项目,然后将OpenGL初始化类拷贝到项目,然后进行各种初始化,通过自定义向导,我们可以很方便解决这个问题。

一、新建win32项目。

二、将OpenGL初始化类CUseOpenGL源文件和头文件拷贝到当前工程目录下。

UseOpenGL.h文件内容

#ifndef _USE_OPENGL_H_
#define _USE_OPENGL_H_ #include <Windows.h>
#include <gl/GL.h>
#include <gl/GLU.h> class CUseOpenGL
{
public:
CUseOpenGL(); ~CUseOpenGL(); public:
bool SetWindowPixelFormat(HDC hDC); bool CreateViewGLContext(HDC hDC); void DestoryGLContext(); virtual void ResizeGLView(int width, int height); private:
int m_nGLPixelIndex;
HGLRC m_hGLContext;
}; #endif

UseOpenGL.cpp文件内容

#include "UseOpenGL.h"

#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "glu32.lib") CUseOpenGL::CUseOpenGL()
{
m_nGLPixelIndex = 0;
m_hGLContext = NULL;
} CUseOpenGL::~CUseOpenGL()
{
DestoryGLContext();
} bool CUseOpenGL::SetWindowPixelFormat(HDC hDC)
{
bool bRet = true; try
{
PIXELFORMATDESCRIPTOR pixelDesc = {sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL |
PFD_DOUBLEBUFFER | PFD_SUPPORT_GDI,
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}; m_nGLPixelIndex = ChoosePixelFormat(hDC, &pixelDesc);
if (m_nGLPixelIndex == 0)
{
m_nGLPixelIndex = 1;
if (DescribePixelFormat(hDC, m_nGLPixelIndex, sizeof(PIXELFORMATDESCRIPTOR), &pixelDesc) == 0)
{
bRet = false;
throw bRet;
}
}
if (!SetPixelFormat(hDC, m_nGLPixelIndex, &pixelDesc))
{
bRet = false;
throw bRet;
}
}
catch (bool)
{
} return bRet;
} bool CUseOpenGL::CreateViewGLContext(HDC hDC)
{
bool bRet = true; try
{
m_hGLContext = wglCreateContext(hDC);
if (!m_hGLContext)
{
bRet = false;
throw bRet;
}
if (!wglMakeCurrent(hDC, m_hGLContext))
{
bRet = false;
throw bRet;
}
}
catch (bool)
{
} return bRet;
} void CUseOpenGL::DestoryGLContext()
{
if (wglGetCurrentContext())
{
wglMakeCurrent(NULL, NULL);
}
if (m_hGLContext)
{
wglDeleteContext(m_hGLContext);
m_hGLContext = NULL;
}
} void CUseOpenGL::ResizeGLView(int width, int height)
{
if (width < 1)
{
width = 1;
}
if (height < 1)
{
height = 1;
}
//视口原点在窗口左下角
glViewport(0, 0, width, height);
}

三、将UseOpenGL.h和UseOpenGL.cpp文件添加到现有工程

四、使用OpenGL,在Win32OpenGL.cpp中加入以下代码

#include "UseOpenGL.h"

void	Display();

class CMyUseOpenGL : public CUseOpenGL
{
public:
virtual void ResizeGLView(int width, int height);
}; CMyUseOpenGL g_useOpenGL; LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc; switch (message)
{
case WM_CREATE:
{
hdc = GetDC(hWnd);
g_useOpenGL.SetWindowPixelFormat(hdc);
g_useOpenGL.CreateViewGLContext(hdc);
ReleaseDC(hWnd, hdc);
}
break; case WM_SIZE:
{
RECT rect; GetClientRect(hWnd, &rect);
g_useOpenGL.ResizeGLView(rect.right - rect.left, rect.bottom - rect.top);
}
break; case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
Display();
SwapBuffers(hdc);
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
} void CMyUseOpenGL::ResizeGLView(int width, int height)
{
CUseOpenGL::ResizeGLView(width, height);
} void Display()
{
glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
}

运行,如下图所示:

五、创建自定义向导

六、将Win32OpenGL下的.h/.ico/.cpp/.rc文件拷贝到Win32OpenGLWizard项目下的\Templates\2052目录,并添加到项目

模板文件上添加现有项

七、打开Templates.inf文件,将拷贝的文件名添加进去

readme.txt
Resource.h
small.ico
stdafx.cpp
stdafx.h
targetver.h
UseOpenGL.cpp
UseOpenGL.h
Win32OpenGL.cpp
Win32OpenGL.h
Win32OpenGL.ico
Win32OpenGL.rc

八、打开default.js文件,进行修改

function AddFilters(proj)
{
try
{
// 将文件夹添加到项目
// var strSrcFilter = wizard.FindSymbol('SOURCE_FILTER');
// var group = proj.Object.AddFilter('Source Files');
// group.Filter = strSrcFilter;
proj.Object.AddFilter('源文件').Filter = 'cpp;c';
proj.Object.AddFilter('头文件').Filter = 'hpp;h';
proj.Object.AddFilter('资源文件').Filter = 'ico;rc;bin';
}
catch(e)
{
throw e;
}
} function GetTargetName(strName, strProjectName)
{
try
{
// TODO: 基于模板文件名设置呈现文件的名称
var strTarget = strName; if (strName == 'readme.txt')
strTarget = 'ReadMe.txt'; if (strName == 'sample.txt')
strTarget = 'Sample.txt'; if (strName == 'Win32OpenGL.cpp')
strTarget = strProjectName + '.cpp';
if (strName == 'Win32OpenGL.h')
strTarget = strProjectName + '.h';
if (strName == 'Win32OpenGL.ico')
strTarget = strProjectName + '.ico';
if (strName == 'Win32OpenGL.rc')
strTarget = strProjectName + '.rc'; return strTarget;
}
catch(e)
{
throw e;
}
}

九、将所有老的项目修改为新的项目名

打开Win32OpenGL.cpp文件

1、将#include "Win32OpenGL.h"修改为

#include "[!output PROJECT_NAME].h"

打开Win32OpenGL.rc文件

2、将IDI_WIN32OPENGL       ICON         "Win32OpenGL.ico"修改为

IDI_WIN32OPENGL       ICON         "[!output PROJECT_NAME].ico"

3、将CAPTION "关于 Win32OpenGL"修改为

CAPTION "关于 [!output PROJECT_NAME]"

4、将 LTEXT           "Win32OpenGL,1.0 版",IDC_STATIC,42,14,114,8,SS_NOPREFIX修改为

LTEXT           "[!output PROJECT_NAME],1.0 版",IDC_STATIC,42,14,114,8,SS_NOPREFIX

5、将IDC_WIN32OPENGL   "WIN32OPENGL"修改为

IDC_WIN32OPENGL   "[!output PROJECT_NAME]"

6、将IDS_APP_TITLE       "Win32OpenGL"修改为

IDS_APP_TITLE       "[!output PROJECT_NAME]"

十、此时向导已经完成。

打开VS2010,新建项目,向导,Win32OpenGLWizard

我们可以看到Win32OpenGLWizard向导是在"向导"这个子项下,并且向导的说明也是默认的,我们可以修改向导的说明并且可以将Win32OpenGLWizard向导放在"Win32"子项下。

打开"我的文档",定位到“Documents\Visual Studio 2010\Wizards”目录,里面有三个文件Win32OpenGLWizard.ico、Win32OpenGLWizard.vsdir、Win32OpenGLWizard.vsz,如果将这三个文件删除后,那么Win32OpenGLWizard便会自动从向导中移除,现在我们将这三个文件移动到VS2010安装目录下的\Microsoft Visual Studio 10.0\VC\vcprojects目录,打开Win32OpenGLWizard.vsdir文件,将内容\Microsoft
Visual Studio 10.0\VC\vcprojects\Win32目录下的win32.vsdir文件的末尾,内容如下

..\Win32Wiz.vsz|{1B027A40-8F43-11D0-8D11-00A0C91BC942}|#1171|1|#1172|{1B027A40-8F43-11D0-8D11-00A0C91BC942}|0|4096|#1154
..\Win32Console.vsz|{1B027A40-8F43-11D0-8D11-00A0C91BC942}|#1204|1|#1205|{1B027A40-8F43-11D0-8D11-00A0C91BC942}|0|4096|#1154
..\Win32OpenGLWizard.vsz| |Win32OpenGLWizard|1|Win32 OpenGL 项目| |6777| |Win32OpenGLWizard

其中"Win32 OpenGL 项目"便是Win32OpenGLWizard向导的说明

打开Win32OpenGLWizard.vsz文件

VSWIZARD 7.0
Wizard=VsWizard.VsWizardEngine.10.0 Param="WIZARD_NAME = Win32OpenGLWizard"
Param="ABSOLUTE_PATH = E:\桌面\Custom\example\Win32OpenGLWizard\Win32OpenGLWizard"
Param="FALLBACK_LCID = 2052"
Param="WIZARD_UI = FALSE"
Param="SOURCE_FILTER = txt"

"ABSOLUTE_PATH = E:\桌面\Custom\example\Win32OpenGLWizard\Win32OpenGLWizard"是向导文件的位置,即第五步创建自定义向导的位置,这个路径下的文件不能被删除,否则向导不能新建项目。

参考:http://www.rupeng.com/forum/thread-9243-1-1-uid54410.html

VS2010 自定义向导的更多相关文章

  1. VS2010自定义添加创建者、创建时间等个人信息新建文件模版

    不知不觉VS2010已经成为.NET开发人员的必备工具,相比经典版VS2005,到过渡版vs2008,2010在性能稳定性和易用性上都得到很大的提高. 结合VS工具,其下的插件也层出不穷.今天重点给大 ...

  2. vs2010+ARX2012向导添加mfc支持类出现Error in default.htm PopulateDialogIDs():

    初步判断为ARX2012默认的编译器平台集是v90,如果你只安装了vs2010,没有安装vs2008sp1或者vs2008sp1的编译器,以及对应的Windows MFC SDK,就可能会出现这样的问 ...

  3. VS2008 自定义向导的default.js设置(DLL文件)

    function OnFinish(selProj, selObj) { try { var strProjectPath = wizard.FindSymbol('PROJECT_PATH'); v ...

  4. VS中创建自定义一个VC工程为基础的开发向导的总结

    作者:朱金灿 来源:http://blog.csdn.net/clever101 VS允许用户进行自定义开发向导.自定义开发向导的好处在于将常用的设置都通过向导生成,从而大大提供开发效率.特别是在开发 ...

  5. SharePoint 2013开发入门探索(一)- 自定义列表

    在SharePoint 2013中创建自定义列表的方式有很多,在网站内容页面添加应用程序就可以创建(站点内容-〉 您的应用程序),也可以通过SharePoint Designer 2013创建,而本文 ...

  6. VS 自定义新建文件模板方法

    自定义新建文件模板方法     VS 2010 及VS2008 自定义模板的方法如下: 结合VS工具,其下的插件也层出不穷.今天重点给大家介绍如何使用VS2010自定义新建文件模版,新建文件时,添加个 ...

  7. vs2010中使用luabind

    第一部分:在vs2010中生成luabind静态库和动态库 一.前期准备 1.安装boost 下载boost并解压到 D:\mylua\boost_1_56_0,进入 D:\mylua\boost_1 ...

  8. 抽取vs2010安装包中vc++ runtime

    写于2015-3-21 16:59 由qq空间转过来,格式有点乱     之前遇到一个问题,c++\cli的程序部署在服务器上面,程序运行后没有反应就退出了,日志管理器中记录两个错误信息分别如下:   ...

  9. sharepoint 2013 入门1_ 建立一个网页程序

    步骤: 1.新建项目. 2.项目到office/sharepoint 解决方案=>sharepoint2013 空项目 3.sharepoint 自定义向导(电脑必须要装sharepoint 不 ...

随机推荐

  1. hdu_5963_朋友(找规律)

    题目链接:hdu_5963_朋友 题意: 中文,不解释 题解: 把样例拿出来看看,你会发现以x为节点是否能赢,就是与x相连的边权值的和或者异或是否为奇数. #include<bits/stdc+ ...

  2. 浙大pat 1037

    1037. Magic Coupon (25) 时间限制 100 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue The magi ...

  3. 安卓---高德地图API应用

    说明:定位需要导入android_location 的jar包,如果没有会报错,这个官方网站好像找不到,这是我在网上找到的一个链接 http://download.csdn.net/detail/ra ...

  4. 第二次冲刺spring会议(第六次会议)

    [例会时间]2014/5/8 21:15 [例会地点]9#446 [例会形式]轮流发言 [例会主持]马翔 [例会记录]兰梦 小组成员:兰梦 ,马翔,李金吉,赵天,胡佳 奇

  5. kissy小记

    <script> KISSY.add('demo',function(S ,require, exports, module){ var Node = require('node'); v ...

  6. php回传ajax数据

    <?php $json_width = $_POST["img_width"]; $json_height = $_POST["img_height"]; ...

  7. Mac 命令行中进入带有空格的文件夹

    http://blog.sina.com.cn/s/blog_5e8392b10100jkvg.html 今天在公司用mac的时候,有个文件夹的名字有空格,怎么都进不去,在网上一查原来不能直接cd 文 ...

  8. bootstrap validator html attributes 选项

    常用的html属性:data-fv-message="The username is not valid"data-fv-notempty="true"data ...

  9. Django 基础知识

    Django Models django 本身提供了非常强大易使用的ORM组件,并且支持多种数据库,如sqllite,mysql,progressSql,Oracle等,当然最常用的搭配还是mysql ...

  10. c#控制其他程序窗口位置

    //调用Win32 API [System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint ...