全屏游戏窗口化

angel_sha 2003-12-12 08:18:51
基于directx的全屏游戏如何能窗口化?希望各位高手给点意见,最好给点实际的代码。小弟将不胜感激!!!
...全文
194 11 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
甜而不腻 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一样
  • 打赏
  • 举报
回复
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;
}
  • 打赏
  • 举报
回复
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函数的参数不同就可以造成全屏和窗口两种模式~
  • 打赏
  • 举报
回复
相关推荐
发帖
游戏开发
加入

8111

社区成员

游戏开发相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2003-12-12 08:18
社区公告
暂无公告