Directx+CEGUI把界面集成到游戏中,支持全屏方式(c++)
2010-10-11 14:59
513 查看
代码
#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();
}
#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();
}
相关文章推荐
- C++ DirectX 游戏开发初级视频教程 19 资源下载链接
- MFC 中集成 Html 界面的3种方式
- 在DirectX 全屏独占 方式下显示对话框和任意窗口
- 简单的C++游戏载入界面设计
- 【Visual C++】游戏开发五十七 浅墨DirectX教程二十四 打造游戏GUI界面(二)
- Android中界面实现全屏显示的两种方式
- XNA游戏界面全屏切换
- 嵌入式跨平台C++3D界面开发框架最新版Qt 5.6 支持高DPI缩放
- 【Visual C++】游戏开发五十六 浅墨DirectX教程二十三 打造游戏GUI界面(一)
- C++ DirectX 游戏开发初级视频教程 05 资源下载链接
- 【Visual C++】游戏开发五十六 浅墨DirectX教程二十三 打造游戏GUI界面(一)
- 【Visual C++】游戏开发五十六 浅墨DirectX教程二十三 打造游戏GUI界面(一)
- 今天才明白VC++.net的含义: VS系列的c++编译器可以支持托管C++(类似于C#,具体请看MS在线文档),当然包括winform界面开发。
- Android界面无标题栏和全屏效果的实现方式
- Android中界面实现全屏显示的两种方式
- AEAI Portal-虚拟菜单方式配置SSO界面集成
- android界面无标题栏和全屏效果的实现方式
- Android应用界面无标题栏和全屏效果的两种实现方式
- 《星际争霸2》支持宽屏 实际游戏界面曝光
- android界面无标题栏和全屏效果的实现方式