VS2010 自定义向导
最近在学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 自定义向导的更多相关文章
- VS2010自定义添加创建者、创建时间等个人信息新建文件模版
不知不觉VS2010已经成为.NET开发人员的必备工具,相比经典版VS2005,到过渡版vs2008,2010在性能稳定性和易用性上都得到很大的提高. 结合VS工具,其下的插件也层出不穷.今天重点给大 ...
- vs2010+ARX2012向导添加mfc支持类出现Error in default.htm PopulateDialogIDs():
初步判断为ARX2012默认的编译器平台集是v90,如果你只安装了vs2010,没有安装vs2008sp1或者vs2008sp1的编译器,以及对应的Windows MFC SDK,就可能会出现这样的问 ...
- VS2008 自定义向导的default.js设置(DLL文件)
function OnFinish(selProj, selObj) { try { var strProjectPath = wizard.FindSymbol('PROJECT_PATH'); v ...
- VS中创建自定义一个VC工程为基础的开发向导的总结
作者:朱金灿 来源:http://blog.csdn.net/clever101 VS允许用户进行自定义开发向导.自定义开发向导的好处在于将常用的设置都通过向导生成,从而大大提供开发效率.特别是在开发 ...
- SharePoint 2013开发入门探索(一)- 自定义列表
在SharePoint 2013中创建自定义列表的方式有很多,在网站内容页面添加应用程序就可以创建(站点内容-〉 您的应用程序),也可以通过SharePoint Designer 2013创建,而本文 ...
- VS 自定义新建文件模板方法
自定义新建文件模板方法 VS 2010 及VS2008 自定义模板的方法如下: 结合VS工具,其下的插件也层出不穷.今天重点给大家介绍如何使用VS2010自定义新建文件模版,新建文件时,添加个 ...
- vs2010中使用luabind
第一部分:在vs2010中生成luabind静态库和动态库 一.前期准备 1.安装boost 下载boost并解压到 D:\mylua\boost_1_56_0,进入 D:\mylua\boost_1 ...
- 抽取vs2010安装包中vc++ runtime
写于2015-3-21 16:59 由qq空间转过来,格式有点乱 之前遇到一个问题,c++\cli的程序部署在服务器上面,程序运行后没有反应就退出了,日志管理器中记录两个错误信息分别如下: ...
- sharepoint 2013 入门1_ 建立一个网页程序
步骤: 1.新建项目. 2.项目到office/sharepoint 解决方案=>sharepoint2013 空项目 3.sharepoint 自定义向导(电脑必须要装sharepoint 不 ...
随机推荐
- ubuntu 14.04 GDAL
autotools-dev comerr-dev hdf5-helpers icu-devtools krb5-multidev libarmadillo4 libarpack2 libblas3 l ...
- Docker安装目录
操作系统为 # cat /etc/redhat-release CentOS Linux release (Core) docker安装 # yum install -y docker docker安 ...
- OMCS使用技巧 -- 摄像头及其动态能力
在开发类似视频聊天的应用时,我们经常需要获取摄像头的相关信息:而在进行视频聊天时,我们可能还希望有一些动态的能力.比如,在不中断视频聊天的情况下,切换一个摄像头.或者修改摄像头采集的分辨率或编码质量等 ...
- TortoiseGit - 处理冲突
处理冲突 冲突:远程的master已经被其他人更新到 2repo add 12,但是自己当前的工作区在未pull到最新前,增加了1repo add 12的改动. 右击最新的节点,选择Merge to ...
- JS跨域解决方式 window.name
window.name 传输技术,原本是 Thomas Frank 用于解决 cookie 的一些劣势(每个域名 4 x 20 Kb 的限制.数据只能是字符串.设置和获取 cookie 语法的复杂等等 ...
- TouchSlide滚动插件BUG
TouchSlide滚动切换效果时 nextCell设定自己的class名后无效,需要用".next"或不设置
- ADO.NET 数据访问类查询、属性扩展
今天,我首先在之前所做的人员管理系统的基础上,利用数据访问类进行了所有人员信息的查询. 主程序代码: List<Users> Ulist = new UsersData().Select( ...
- mongoDB4--mongoDB的增删改查
MongoDb基本操作之增删改查我们知道传统关系型数据库的最常用操作就是"增加/删除/修改/查询",也就是传说中的CRUD(create/remove/updte/delete). ...
- 监控gc
前几篇篇文章介绍了介绍了JVM的参数设置并给出了一些生产环境的JVM参数配置参考方案.正如之前文章中提到的JVM参数的设置需要根据应用的特性来进行设置,每个参数的设置都需要对JVM进行长时间的监测,并 ...
- Entity Framework技巧系列之八 - Tip 29 – 34
提示29. 怎样避免延迟加载或Load()阅读器问题 如果你有如下这样的代码: 1 var results = from c in ctx.Customers 2 where c.SalesPerso ...