看流星社区

 找回密码
 注册账号
查看: 2154|回复: 0

Directx+CEGUI把界面集成到游戏中,支持全屏方式(c++)

[复制链接]

该用户从未签到

发表于 2015-4-12 20:31:25 | 显示全部楼层 |阅读模式
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();
}
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-26 14:10

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表