首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

运用DX9怎样才能实现全屏透明窗口的游戏?游戏执行后不影响windows其它程序的使用

2013-01-05 
使用DX9怎样才能实现全屏透明窗口的游戏?游戏执行后不影响windows其它程序的使用。程序运行后就类似一个全

使用DX9怎样才能实现全屏透明窗口的游戏?游戏执行后不影响windows其它程序的使用。
程序运行后就类似一个全屏屏保一样(比如:多彩气泡屏保),但是在运行这个全屏程序的同时,还要不影响用户使用其它软件。比如用户正在运行多彩气泡屏保,同时又在使用office编辑文档(编辑文档时,多彩气泡不会关闭)。


效果就像前几年的“圣诞小礼物下雪机”一样。
[解决办法]
这个其实和D3D本身关系不大,是需要设置窗体的扩展属性:


//鼠标点击穿透开关
void CPicDlg::OnBnClickedCheck1()
{
// TODO: 在此添加控件通知处理程序代码
DWORD Style,
ExStyle = ::GetWindowLong(pPicShowDlg->GetSafeHwnd(), GWL_EXSTYLE);
if (ExStyle&WS_EX_TRANSPARENT)
{
Style = /*WS_SIZEBOX
[解决办法]
*/WS_POPUP
[解决办法]
WS_SYSMENU;
ExStyle &= ~WS_EX_TRANSPARENT;
}
else
{
Style = WS_POPUP
[解决办法]
WS_SYSMENU;
ExStyle 
[解决办法]
= WS_EX_TRANSPARENT;
}
::SetWindowLong(pPicShowDlg->GetSafeHwnd(), GWL_STYLE, Style);
::SetWindowLong(pPicShowDlg->GetSafeHwnd(), GWL_EXSTYLE, ExStyle);
::PostMessage(pPicShowDlg->GetSafeHwnd(), WM_SYSCOMMAND, SC_MINIMIZE, 0);
::PostMessage(pPicShowDlg->GetSafeHwnd(), WM_SYSCOMMAND, SC_RESTORE, 0);
}

[解决办法]
补充一下:
我发现使用SetLayeredWindowAttributes有个漏洞,就是指定了一个colorkey后,程序如果要渲染这种颜色,将会被当成透明色过滤掉,这就大有影响了。

等高手解答。.

热点排行