全屏游戏窗口化

angel_sha 2003-12-12 08:18:51
基于directx的全屏游戏如何能窗口化?希望各位高手给点意见,最好给点实际的代码。小弟将不胜感激!!!
...全文
222 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
甜而不腻 2004-01-13
  • 打赏
  • 举报
回复
收藏。
zhaowd2002 2003-12-30
  • 打赏
  • 举报
回复
或者,大家直接去看 detours的资料,微软研究院 下载
zhaowd2002 2003-12-30
  • 打赏
  • 举报
回复
http://www.gameres.com/bbs/showthread.asp?threadid=3379
内有hook SetCooperativeLevel的例子
lsaturn 2003-12-29
  • 打赏
  • 举报
回复
hproof(魔界小虾米)
这样啊,很复杂啊!
angel_sha 2003-12-29
  • 打赏
  • 举报
回复
好象很难实现呀。不过还是很有收获!!
hproof 2003-12-29
  • 打赏
  • 举报
回复
建立你自己的COM对象,接口与DX的完全一样,然后用同一个CLSID在系统中注册。
在自己的COM对象实现中进行拦截,,,
lsaturn 2003-12-27
  • 打赏
  • 举报
回复
我也很好奇怎么来拦截,这是com对象,我想用softice来调试都调不了!
angel_sha 2003-12-27
  • 打赏
  • 举报
回复
我说的是让其他全屏的游戏窗口化呀

其实我想只要拦截到SetCooperativeLevel函数就已经差不多了,可是该怎么拦这个函数呢
拦截API还是很容易的,可是怎样拦截DDRAW.DLL中的函数?望指教!!
blacklevin 2003-12-13
  • 打赏
  • 举报
回复
楼上用的DXSDK8里的例子
完整代码在SDK里的路径是
\DXSDK8\samples\Multimedia\DirectDraw\SwitchScreenMode
切换模式时要重新调用
SetCooperativeLevel
SetDisplayMode
还有他们的绘图方式不一样
所以BACKBUFFER的结构不一样
也要重新创建
如果自己写底层的话可以让两种BACKBUFFER一样
火云洞红孩儿 2003-12-12
  • 打赏
  • 举报
回复
sorry~错了~
全屏:
g_pDisplay = new CDisplay();
if (FAILED(hr= g_pDisplay->CreateFullScreenDisplay(hWnd, 640, 480, 16)))
{ ERMSG("This display card does not support 640x480x16.");
return hr;
}
窗口:
if (FAILED(hr = g_pDisplay->CreateWindowedDisplay(hWnd,320,240)))
{ ERMSG("Failed initializing DirectDraw.");
return hr;
}
火云洞红孩儿 2003-12-12
  • 打赏
  • 举报
回复
HRESULT InitDirectDraw(HWND hWnd)
{ HRESULT hr;

g_pDisplay = new CDisplay();
if (FAILED(hr = g_pDisplay->CreateWindowedDisplay(hWnd,320,240)))
{ ERMSG("Failed initializing DirectDraw.");
return hr;
}
}
主要是CreateWindowedDisplay函数的参数不同就可以造成全屏和窗口两种模式~

8,301

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧