读书人

使用DX9怎样才能实现全屏透明窗口的游

发布时间: 2012-03-12 12:45:32 作者: rapoo

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


效果就像前几年的“圣诞小礼物下雪机”一样。

[解决办法]
这个其实和D3D本身关系不大,是需要设置窗体的扩展属性:

C/C++ code
//鼠标点击穿透开关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后,程序如果要渲染这种颜色,将会被当成透明色过滤掉,这就大有影响了。

等高手解答。.

读书人网 >网络游戏

热点推荐