博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Directx+CEGUI把界面集成到游戏中,支持全屏方式(c++)
阅读量:6218 次
发布时间:2019-06-21

本文共 2283 字,大约阅读时间需要 7 分钟。

ExpandedBlockStart.gif
代码
#include 
#include 
CApiHook hookDx8;
NewD3Device8
*
 lpDevice
=
0
;
CGame game;
LRESULT CALLBACK FilterWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
IDirect3D8
*
 WINAPI Direct3DCreate8_Mine(UINT SDKVersion);
void
 OnDllLoad(
void
)
{
game.Init (); 
game.ClientSocketInit();
game.HookOpenResFunc (
0
);
hookDx8.HookApi (
"
d3d8.dll
"
,
"
Direct3DCreate8
"
,Direct3DCreate8_Mine); 
}
IDirect3D8
*
 WINAPI Direct3DCreate8_Mine(UINT SDKVersion)
{
static
 
int
 nTimes
=
0
;
IDirect3D8 
*
d3d8temp
=
NULL;
IDirect3D8
*
 (WINAPI
*
 Direct3DCreate8Ptr)(UINT SDKVersion)
=
NULL;
hookDx8.GetOrgAddr (
&
Direct3DCreate8Ptr);
d3d8temp
=
Direct3DCreate8Ptr (SDKVersion); 
while
((
++
nTimes)
>
1
)
{
if
(nTimes
==
2
)
{
TCHAR szGamePath[
256
]
=
{
0
};
GetGamePath (szGamePath,
sizeof
(szGamePath));
TCHAR szSettingFile[
256
]
=
{
0
};
wsprintf(szSettingFile,TEXT(
"
%s\\userdata\\systemsettings.ini
"
),szGamePath);
if
(::GetPrivateProfileInt (TEXT(
"
Video
"
),TEXT(
"
FullScreen
"
),
0
,szSettingFile))
break
;
}
NewIDirect3D8
*
 d3d8
=
new
 NewIDirect3D8(d3d8temp);
d3d8temp
=
(IDirect3D8
*
)d3d8;
hookDx8.UnHook ();
break
;
}
return
 d3d8temp;
}
HRESULT NewIDirect3D8::CreateDevice(UINT Adapter,D3DDEVTYPE DeviceType,HWND hFocusWindow,
DWORD BehaviorFlags,D3DPRESENT_PARAMETERS
*
 pPresentationParameters,
IDirect3DDevice8
**
 ppReturnedDeviceInterface)
{
HRESULT hr
=
0
;
hGameWnd
=
hFocusWindow;
game.hGWnd
=
hFocusWindow;
lpD3D
->
CreateDevice(Adapter,DeviceType,hFocusWindow,BehaviorFlags,pPresentationParameters,
&
lpD3DD8bak); 
lpDevice
=
new
 NewD3Device8(lpD3DD8bak);
///
//Init Data
/
if
(game.OrgWndProc
==
0
)
{
game.OrgWndProc
=
::GetWindowLong (game.hGWnd ,GWL_WNDPROC );
if
(game.OrgWndProc)
{
::SetWindowLong (game.hGWnd ,GWL_WNDPROC ,(LONG)
&
FilterWndProc);
game.HookOpenResFunc (
1
);
}
///
*
ppReturnedDeviceInterface 
=
 (IDirect3DDevice8
*
)lpDevice ;
//
替换 
return
 hr;
}
LRESULT CALLBACK FilterWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
if
(game.CEGUIWndProc (hWnd,message,wParam,lParam))
return
 ::CallWindowProc ((WNDPROC)game.OrgWndProc,hWnd,message,wParam,lParam);
else
return
 
1
;
}
HRESULT NewD3Device8::EndScene(
void
)
{
game.MyGuiRender (); 
return
 dxDevice
->
EndScene();
}

 

转载于:https://www.cnblogs.com/rogee/archive/2010/10/11/1847945.html

你可能感兴趣的文章
FastCgi与PHP-fpm之间是个什么样的关系
查看>>
对Navicat for MySQL 中1045错误的解决办法
查看>>
log日志
查看>>
使用CSS渐变
查看>>
ASP.NET ViewState详解
查看>>
阿里 Maven仓库
查看>>
Python学习之==>正则表达式
查看>>
My97DatePicker时间控件使用方法
查看>>
c# 线程基础
查看>>
各类杀软对应的进程名
查看>>
推荐一些socket工具,TCP、UDP调试、抓包工具 (转载)
查看>>
iOS 7 & iOS 6适配问题
查看>>
《C++数据结构-快速拾遗》 手写链表
查看>>
hdu2068 RPG的错排 组合数/递推
查看>>
jar 文件不能运行
查看>>
小工具?不,这是小工具的集合!
查看>>
CAVLC算法解析
查看>>
12 在微服务集群中使用Zuul
查看>>
Python登陆人人网
查看>>
Exchange 2010 打补丁的顺序
查看>>