打开hge181/src/core/system.cpp

找到System_Initiate()函数,可以看见里面有段代码是用于创建窗口。

// Register window class winclass.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW; winclass.lpfnWndProc = WindowProc; winclass.cbClsExtra = 0; winclass.cbWndExtra = 0; winclass.hInstance = hInstance; winclass.hCursor = LoadCursor(NULL, IDC_ARROW); winclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); winclass.lpszMenuName = NULL; winclass.lpszClassName = WINDOW_CLASS_NAME; if(szIcon) winclass.hIcon = LoadIcon(hInstance, szIcon); else winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); if (!RegisterClass(&winclass)) { _PostError("Can't register window class"); return false; } // Create window width=nScreenWidth + GetSystemMetrics(SM_CXFIXEDFRAME)*2; height=nScreenHeight + GetSystemMetrics(SM_CYFIXEDFRAME)*2 + GetSystemMetrics(SM_CYCAPTION); rectW.left=(GetSystemMetrics(SM_CXSCREEN)-width)/2; rectW.top=(GetSystemMetrics(SM_CYSCREEN)-height)/2; rectW.right=rectW.left+width; rectW.bottom=rectW.top+height; styleW=WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_VISIBLE; //WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX; rectFS.left=0; rectFS.top=0; rectFS.right=nScreenWidth; rectFS.bottom=nScreenHeight; styleFS=WS_POPUP|WS_VISIBLE; //WS_POPUP if(hwndParent) { rectW.left=0; rectW.top=0; rectW.right=nScreenWidth; rectW.bottom=nScreenHeight; styleW=WS_CHILD|WS_VISIBLE; bWindowed=true; } if(bWindowed) hwnd = CreateWindowEx(0, WINDOW_CLASS_NAME, szWinTitle, styleW, rectW.left, rectW.top, rectW.right-rectW.left, rectW.bottom-rectW.top, hwndParent, NULL, hInstance, NULL); else hwnd = CreateWindowEx(WS_EX_TOPMOST, WINDOW_CLASS_NAME, szWinTitle, styleFS, 0, 0, 0, 0, NULL, NULL, hInstance, NULL); if (!hwnd) { _PostError("Can't create window"); return false; } ShowWindow(hwnd, SW_SHOW);shi

这段代码是创建窗口。

但因为我们是创建基于MFC窗口消息的图形,其窗口创建MFC已经帮其做好了。所以需要将其删除。

再找到SystemSetStatusHwnd函数,修改代码:

void CALL HGE_Impl::System_SetStateHwnd(hgeHwndState state, HWND value) { switch(state) { case HGE_HWND: if(!hwnd) hwnd = value; break; case HGE_HWNDPARENT: if(!hwnd) hwndParent=value; break; } }

这样做是方便我们设置渲染的窗口。比如对话框之类的。

接下来在HGE_IMP.H文件中定义成员

RECT flipSrcRect; RECT flipDstRect;

并将其初始化为0.

打开hge181/src/core/graphics.cpp文件修改Gfx_EndScene函数修改代码如下:

void CALL HGE_Impl::Gfx_EndScene(bool use_fliRect /*= 0*/) { _render_batch(true); pD3DDevice->EndScene(); if(!pCurTarget) { if (!use_fliRect) { pD3DDevice->Present( NULL, NULL, NULL, NULL ); return; } pD3DDevice->Present(&flipSrcRect, &flipDstRect, NULL,NULL); } }

修改_GfxInit()在 pD3D=Direct3DCreate8(120); // D3D_SDK_VERSION这句代码前面添加如下代码:

if( bWindowed ) { int width=nScreenWidth + GetSystemMetrics(SM_CXFIXEDFRAME)*2; int height=nScreenHeight + GetSystemMetrics(SM_CYFIXEDFRAME)*2 + GetSystemMetrics(SM_CYCAPTION); rectW.left=(GetSystemMetrics(SM_CXSCREEN)-width)/2; rectW.top=(GetSystemMetrics(SM_CYSCREEN)-height)/2; rectW.right=rectW.left+width; rectW.bottom=rectW.top+height; if(!hwnd) { _PostError("hwnd is NULL"); return false; } styleW=GetWindowLong(hwnd,GWL_STYLE); } else { rectFS.left=0; rectFS.top=0; rectFS.right=nScreenWidth; rectFS.bottom=nScreenHeight; styleFS = WS_POPUP|WS_VISIBLE; }

rectW和rectFS顾名思义分别设置渲染子窗口区域,渲染整个屏幕区域。

并添加一个接口

void CALL HGE_Impl::Gfx_SetFlipRect(int top, int left, int right, int bottom) { flipSrcRect.top = top; flipSrcRect.left = left; flipSrcRect.right =right; flipSrcRect.bottom = bottom; flipDstRect.top = top; flipDstRect.left = left; flipDstRect.right =right; flipDstRect.bottom = bottom; }

这几句代码的作用是为了兼容MFC绘制模式。我们在这里的pD3DDevice->Present(&flipSrcRect, &flipDstRect, NULL,NULL);函数的作用是为了绘制到指定的我们的渲染区域。

调用过程如下。创建对话框,在初始化对话框上面初始化Render

具体代码如下:

CRect rect; HWND hwnd = GetDlgItem(IDC_STATIC_RENDER)->GetSafeHwnd(); GetDlgItem(IDC_STATIC_RENDER)->GetClientRect(&rect); hge = hgeCreate(HGE_VERSION); hge->System_SetState(HGE_SCREENWIDTH, rect.Width()); hge->System_SetState(HGE_SCREENHEIGHT, rect.Height()); hge->System_SetState(HGE_WINDOWED, true); //hge->System_SetState(HGE_HWNDPARENT, GetSafeHwnd()); hge->System_SetState(HGE_HWND,hwnd); hge->System_SetState(HGE_FRAMEFUNC, FrameFunc); hge->System_SetState(HGE_FPS,60); hge->System_SetState(HGE_DONTSUSPEND, true); hge->System_SetState(HGE_TEXTUREFILTER, false); hge->System_SetState(HGE_SCREENBPP, 32); hge->System_SetState(HGE_LOGFILE, "log.txt"); hge->System_Initiate(); hge->Gfx_SetFlipRect(25, 25, rect.Width()-50, rect.Height()-50); m_htexture = hge->Texture_Load("minimap.dds"); m_pic = new hgeSprite(hge, m_htexture);//这里的接口稍稍做一点变动,涉及到后面四个参数的操作可以屏蔽掉 //因为这步就可以重新设置图片大小 m_pic->SetTextureRect( 0, 0, hge->Texture_GetWidth(m_htexture), hge->Texture_GetHeight(m_htexture) );

后面创建图片并具体渲染,我们可以模仿hgeSprite这种方式创建。然后在OnTimer里面进行渲染。

void CDxTestDlg::OnPaint() { /// render to target m_render->Gfx_Clear(0); m_render->Gfx_BeginScene(); m_pic->RenderEx(100, 100, 0.0f, 0.5, 0.5); m_render->Gfx_EndScene(true); }

HGE引擎适用于MFC的修改相关推荐

  1. hge引擎配置登录器教程_Hge引擎程序+登录器配置器+配套工具+全套入门教程

    关于HGE引擎版本优化的相关建议 很多人经常说:我和别人是一样的版本,为什么我的游戏卡,他的游戏不卡,是不是你们引擎不行?其实道理很简单.抛开服务器质量的缘故,以及引擎自身的不足,版本导致的游戏卡占了 ...

  2. C++多小球非对心弹性碰撞(HGE引擎)

    程序是一个月前完成的,之前一直没正儿八经的来整理下这个程序,感觉比较简单,不过即使简单的东西也要跟大家分享下. 源码下载:http://download.csdn.net/detail/y851716 ...

  3. HGE引擎写的俄罗斯方块程序(附vc源码)[r]

    使用HGE引擎写了个俄罗斯方块游戏,for study 执行文件 源代码 运行效果图 PS: 开源!!! 转载于:https://www.cnblogs.com/dotLive/archive/200 ...

  4. MySQL 查询数据库和表在使用的引擎和编码并修改使用引擎和编码

    一,MySQL的引擎问题 Mysql数据库引擎 Mysql常见的三中存储引擎为InnoDB.MyISAM.MEMORY.其区别提现在事物安全.存储限制.空间使用.插入数据的速度和对外键的支持上,具体如 ...

  5. HGE引擎的粒子系统

    这次的HGE系列让我们一起来学习一下HGE引擎的粒子系统部分,对于粒子系统不甚了解的朋友可以从这里开始了解. 首先还是让我们从头文件开始: 类名 :hgeParticle 功能 :单个粒子的属性结构 ...

  6. mysql alter engine_MySQL_mysql下修改engine引擎的方法,修改my.ini,在[mysqld]下加上 - phpStudy...

    mysql下修改engine引擎的方法 修改my.ini,在[mysqld]下加上 default-storage-engine=INNODB 其中红色字体部分是要指定的引擎名称. 用sql语句修改已 ...

  7. mysql改存储引擎教程_MySQL中修改数据表存储引擎的三种方法

    第一种方法:ALTER TABLE 将表从一个引擎修改为另一个引擎最简单的办法是使用ALTER TABLE语句,转换表的存储引擎会导致失去原引擎相关的所有特性. 例:将mytable的引擎修改为Inn ...

  8. MFC中修改程序图标

    在使用MFC时,我们经常需要修改我们得到的exe文件的图标.如:写一个随机画圆的小程序,我们就希望该程序的图标是个圆或者是和圆有关的图标.所以,在这里我就记录一下我修改图标的步骤. 顺便提一下,我使用 ...

  9. mysql修改存储引擎报错_修改mysql存储引擎备份数据库报错及解决方案

    备份数据库报错 原因:由于监控服务器最近cpu负载比较高.(cpu4核心,负载2.7左右)感觉很奇怪,因为别的服务器mysql占用的资源并不多,因此我首先优化了数据库的配置文件.cpu稍微下降了一点, ...

最新文章

  1. 数据团队做什么,看这篇就够了!
  2. [置顶] Codeforces Round #190 (Div. 2)(完全)
  3. jq 浏览器窗口大小发生变化时
  4. 对产品经理而言,有一种灾难叫“老板说”
  5. mysql安装报错 1130_关于Linux编译安装会无法远程登录,报错:1130-host ... is not allowed to connect to this MySql server...
  6. python - 定时拍照并发送到qq
  7. JdbcTemplate和NamedParameterJdbcTemplate
  8. python123第七章_Python入门第7/10页
  9. Worktile协同特色之二:任务看板管理
  10. 【原译】什么是TCHAR,WCHAR,LPSTR,LPWSTR,LPCTSTR.等等
  11. 简述java中类的构造方法_Java中类的构造方法
  12. 服务器2003系统序列号,Windows Server 2003 R2 With Sp2 序列号
  13. “莫兰迪色系” 高级灰
  14. Windows自动更新呈灰色点不了,电脑会自动更新的解决方案
  15. SpringBoot无法引入@RunWith注解解决方法
  16. 由DatePicket和TimePicker扩展延伸其他控件
  17. Navicat mysql 数据库备份和使用,备份以后是nb3文件
  18. GLES2.0中文API-glCompressedTexImage2D
  19. 【源码解读】BertLayer
  20. 15条建议,把技术成果写成一篇高质量学术论文

热门文章

  1. 5 计算机组成原理第四章 指令系统
  2. 05.MyBtais两种取值符号以及输入参数和输出参数
  3. python replace()
  4. 第七届蓝桥杯省赛---蚂蚁感冒
  5. 设置 sideload Outlook Add-ins
  6. php简单的用户留言板实现内容(1-23)
  7. 数据结构和数据类型之间的关系
  8. 使用delphi 开发多层应用(十三)使用Basic4android 直接访问kbmMW server
  9. 由partition看窗口函数
  10. 操作系统——文件基本概念