oooo

从基本的函数和WIN32API实现OGRE窗口 2010-11-02 02:37:37| 分类: ogre 阅读60 评论0 字号:大中小 订阅 从基本的函数和WIN32API实现OGRE窗口 转载:http://lyme.blog.sohu.com/99908122.html [quote="代码"] #include "Ogre.h" #include "OgreConfigFile.h" #include "OgreStringConverter.h" #include "windows.h" // declare wndproc LRESULT CALLBACK MainWndProc(HWND,UINT,WPARAM,LPARAM); // main func entry point INT APIENTRY WinMain(HINSTANCE hInst,HINSTANCE,LPSTR strCmdLine,INT nCmdShow) { // code to create window // --------------------------------------------------------------------------------- char szClassName[] = "MainWClass"; WNDCLASSEX wndclass; // 用描述主窗口的参数填充WNDCLASSEX结构 wndclass.cbSize = sizeof(wndclass); //结构的大小 wndclass.style = NULL; //固定窗口大小 wndclass.lpfnWndProc = MainWndProc; //窗口函数指针 wndclass.cbClsExtra = 0; //没有额外的类内存 wndclass.cbWndExtra = 0; //没有额外的窗口内存 wndclass.hInstance = hInst; //实例句柄 wndclass.hIcon = ::LoadIcon(NULL,IDI_APPLICATION); //使用预定义图标 wndclass.hCursor = ::LoadCursor(NULL,IDC_ARROW); //使用预定义光标 wndclass.hbrBackground = (HBRUSH)::GetStockObject(WHITE_BRUSH); //使用白色背景画刷 wndclass.lpszMenuName = NULL; //不指定菜单 wndclass.lpszClassName = szClassName; //窗口类的名称 wndclass.hIconSm = NULL; //没有类的小图标 // 注册这个窗口类 ::RegisterClassEx(&wndclass); // 创建主窗口 HWND hwnd = ::CreateWindowEx(0, szClassName, "For Ogre Test!", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, hInst, NULL); if(hwnd == NULL) { ::MessageBox(NULL,"创建窗口出错!","error",MB_OK); return -1; } // codes manage the ogre system // --------------------------------------------------------------------------------- using namespace Ogre; // start by root Root* root = new Root; // load plugins root->loadPlugin("RenderSystem_Direct3D9"); //root->loadPlugin(RenderSystem_GL); root->loadPlugin("Plugin_OctreeSceneManager"); root->loadPlugin("Plugin_ParticleFX"); // set render system RenderSystemList* mRSList = root->getAvailableRenderers(); RenderSystemList::iterator i = mRSList->begin(); std::string str = i[0]->getName(); ::MessageBox(NULL,str.c_str(),"Renders",MB_OK); RenderSystem* mRSys = root->getRenderSystemByName("Direct3D9 Rendering Subsystem"); if(mRSys == NULL) ::MessageBox(NULL,"cannot find d3d render","error",MB_OK); root->setRenderSystem(mRSys); mRSys->setConfigOption("Full Screen","No"); mRSys->setConfigOption("Video Mode","800 x 600 @ 32-bit colour"); // create render window NameValuePairList opts; opts["externalWindowHandle"] = StringConverter::toString(hwnd); RenderWindow* mWindow = root->initialise(false); mWindow = root->createRenderWindow("My Window",800,600,false,&opts); //RenderWindow* mWindow = root->getAutoCreatedWindow(); // do not create log, just create LogManager LogManager* logMgr = new LogManager; Log* log = LogManager::getSingleton().createLog("mylog.log",true,true,false); // create scene manager SceneManager* sceneMgr = root->createSceneManager(ST_GENERIC); sceneMgr = root->createSceneManager("TerrainSceneManager"); if(sceneMgr == NULL) ::MessageBox(NULL,"cannot create scene manager","error",MB_OK); // create camera Camera* cam = sceneMgr->createCamera("MainCamera"); Radian rad((Real)30.0f); cam->setFOVy(rad); cam->setNearClipDistance(5.0f); cam->setFarClipDistance(1000.0f); cam->setAspectRatio(Real(1.333333f)); // set rendering modes PolygonMode mPolygonMode = PolygonMode::PM_SOLID; cam->setPolygonMode(mPolygonMode); // create viewport Viewport* vp = mWindow->addViewport(cam); vp->setBackgroundColour(ColourValue(15,15,15)); // create frame listener //FrameListener* mFrameListener = new FrameListener; // mount to root //root->addFrameListener(mFrameListener); // start rendering root->startRendering(); //-------------------------------------------------------------------------------- // 显示窗口,刷新窗口客户区 ::ShowWindow(hwnd,nCmdShow); ::UpdateWindow(hwnd); // 从消息队列中取出消息,交给窗口函数处理,直到GetMessage返回FALSE,结束消息循环 MSG msg; while(::GetMessage(&msg,NULL,0,0)) { // 转化键盘消息 ::TranslateMessage(&msg); // 将消息发送到相应的窗口函数 ::DispatchMessage(&msg); } // 当GetMessage返回FALSE的时候程序结束 return msg.wParam; } //WinMain // the wndproc func LRESULT CALLBACK MainWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) { //char szText[] = "示例窗口~~ "; switch(message) { /*case WM_PAINT: HDC hdc; PAINTSTRUCT ps; hdc = ::BeginPaint(hwnd,&ps); ::TextOut(hdc,10,10,szText,strlen(szText)); ::EndPaint(hdc,&ps); return 0;*/ case WM_DESTROY: ::PostQuitMessage(0); return 0; } return ::DefWindowProc(hwnd,message,wParam,lParam); } //MainWndProc

转载于:https://my.oschina.net/lyr/blog/24548

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值