把窗口化的DX魔兽变为全屏再画图
来源:互联网 发布:云计算工程师要求 编辑:程序博客网 时间:2024/04/30 20:05
把窗口化的DX魔兽变为全屏再画图
好吧,其实我是为了挂才写的。
魔兽是DX8,全屏独占的,我当初想在这种情况下在界面上绘图,用了好多种方法都是闪烁的问题(D3D HOOK可以,但是需要修改内存),GDI不可能比DX快。
由于启动魔兽的时候可添加-window参数使得魔兽以窗口模式运行,只要把这个窗口模式变为全屏模式,然后创建一个透明窗口置顶蒙在上面,在窗口上面画图,就可以了。
1全屏
第一步,全屏需要隐藏任务栏(显示任务栏)。
第二步:去掉窗口化魔兽的边框,然后最大化
3:创建透明窗口,然后设置风格(我这里是直接用的MFC快速生成了一个窗口,)
最后的效果就是全屏上面有窗口,不会闪烁。
其实就是伪全屏+锁定桌面歌词
有没有办法在真正的DX全屏独占模式下绘图不闪烁??(D3D HOOK除外)
魔兽是DX8,全屏独占的,我当初想在这种情况下在界面上绘图,用了好多种方法都是闪烁的问题(D3D HOOK可以,但是需要修改内存),GDI不可能比DX快。
由于启动魔兽的时候可添加-window参数使得魔兽以窗口模式运行,只要把这个窗口模式变为全屏模式,然后创建一个透明窗口置顶蒙在上面,在窗口上面画图,就可以了。
1全屏
第一步,全屏需要隐藏任务栏(显示任务栏)。
代码:
BOOL HideTaskBar(BOOL Hide){ #ifndef ABM_SETSTATE #define ABM_SETSTATE 0x0000000a #endif HWND hWnd = FindWindow("Shell_TrayWnd", NULL); if(hWnd==NULL) { return FALSE; } int nCmdShow; APPBARDATA apBar; memset(&apBar,0,sizeof(apBar)); apBar.cbSize = sizeof(apBar); apBar.hWnd =hWnd; if(Hide) { nCmdShow=SW_HIDE; apBar.lParam=ABS_AUTOHIDE; } else { nCmdShow=SW_SHOW; apBar.lParam=ABS_ALWAYSONTOP; } SHAppBarMessage(ABM_SETSTATE,&apBar); ShowWindow(hWnd,nCmdShow); return TRUE;}
第二步:去掉窗口化魔兽的边框,然后最大化
代码:
{ HWND hWar3=::FindWindow("Warcraft III",NULL); if(hWar3==NULL) { MessageBox("没有发现魔兽","ERROR",0); return; } //这里直接设置dwStyle,dwExStyle 的数据是没有办法,我测试去掉很多窗口风格属性 //但是还是没法去掉边框,只好找了一个没边框的获取他的style和exstyle。 DWORD dwStyle =0x94000044; DWORD dwExStyle = 0x50000; //设置风格 ::SetWindowLong(hWar3,GWL_STYLE,dwStyle); ::SetWindowLong(hWar3, GWL_EXSTYLE,dwExStyle); //最大化窗口 SW_SHOWMAXIMIZED ::ShowWindow(hWar3,3);}
3:创建透明窗口,然后设置风格(我这里是直接用的MFC快速生成了一个窗口,)
代码:
BOOL CTOUMINGDlg::OnInitDialog(){ CDialog::OnInitDialog(); typedef BOOL (WINAPI * MYFUNC)(HWND , COLORREF,BYTE,DWORD);//设置窗口透明 SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)|0x80000); HINSTANCE hInst=LoadLibrary("User32.DLL"); if(hInst) { MYFUNC fun=NULL; fun=(MYFUNC)GetProcAddress(hInst,"SetLayeredWindowAttributes"); if(fun) fun(this->GetSafeHwnd(),0,50,2); //注意这里参数,为了看到效果,我把没有设置为完全透明 FreeLibrary(hInst); }//设置窗口置顶。 CRect rect; GetClientRect(&rect); ::SetWindowPos(m_hWnd, HWND_TOPMOST, 0, 0, rect.Width(), rect.Height(),SWP_NOMOVE);//使得对该窗口的操作无效。也就是透过这个窗口进行点击窗口后面的东西//这样这个窗口只能通过任务管理器关闭 ,或者把之前的风格修改回来。//这里我是看了一下千千静听的锁定桌面歌词如何做到的。 ::SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,0x000800a8); SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here return TRUE; // return TRUE unless you set the focus to a control}
其实就是伪全屏+锁定桌面歌词
有没有办法在真正的DX全屏独占模式下绘图不闪烁??(D3D HOOK除外)
- 把窗口化的DX魔兽变为全屏再画图
- DX下的全屏显示模式
- DX窗口
- 窗口化与全屏设定的区别
- 全屏的窗口
- 用Dx创建一个简单的窗口
- 返回一个全屏画图的访问权
- 把html源代码变为text的方法
- win7之下魔兽不能全屏
- 魔兽宽屏全屏设置
- 创建一个全屏的窗口
- 子窗口全屏的问题
- android 非全屏的窗口
- MFC 窗口全屏的操作
- DX多窗口编程
- 全屏canvas 画图 背景
- qt把画图的保存为文件
- 窗口全屏
- linux系统调用poll
- 2013年1月编程语言排行榜:移动编程语言的巅峰
- 【黑马程序员】-Java基础语法(数组) 第四天
- JFreeChart中文乱码、文字模糊通用解决方案
- log4j的配置详解
- 把窗口化的DX魔兽变为全屏再画图
- [设计模式]组合模式(Compostie)
- ok6410中搭建linux/Android开发环境遇到reading u-boot.bin error found:0010、tftp传送文件遇到问题
- CICS常用维护
- C语言进程结构
- 栈,堆
- 题目1165:字符串匹配
- android快捷卸载第三方应用
- 基于stm32f103zet6之最小系统的制作