社区
进程/线程/DLL
帖子详情
关于窗口化一个全屏程序,有啥好的建议
yxwsbobo
2010-05-20 08:02:47
比如一个全屏游戏, 窗口化他,有什么好的建议想法啊? 比如自己弄一个窗口,然后把游戏放入自己的窗口中之类的,兼容性要好点
...全文
347
13
打赏
收藏
关于窗口化一个全屏程序,有啥好的建议
比如一个全屏游戏, 窗口化他,有什么好的建议想法啊? 比如自己弄一个窗口,然后把游戏放入自己的窗口中之类的,兼容性要好点
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yxwsbobo
2010-05-21
打赏
举报
回复
看来比想象的要复杂不少,等把3d程序设计学完之后再来解决这个问题吧
sunlin7
2010-05-20
打赏
举报
回复
如果它本身就只是GDI窗口的全屏程序,可以给这个窗口发送消息,控制大小。但如果是directX或者是OpenGl的全屏窗口,好像就没有那么简单了……使用dll注入技术,hook掉窗口创建函数,还要hook掉directx(opengl)的设备创建函数,并修改参数为窗口模式(比如hook DX3D的CreateDevice函数,将D3DPRESENT_PARAMETERS的Windowed参数修改为true).
sunlin7
2010-05-20
打赏
举报
回复
很多游戏本身就提供两种模式的切换,比如魔兽的是:
war3.exe -window
war3.exe -fullscreen
magic7004
2010-05-20
打赏
举报
回复
楼主的要求和虚拟机貌似差距比较大吧,虚拟机是虚拟的电脑,而不是虚拟的桌面。
康斯坦汀
2010-05-20
打赏
举报
回复
思路转换一下,类似VMWare那些虚拟机都可以全屏放到窗口的。
向立天
2010-05-20
打赏
举报
回复
[Quote=引用 3 楼 yxwsbobo 的回复:]
引用 1 楼 xianglitian 的回复:
一般全屏游戏是要协调层级过去屏幕资源的
估计不能用简单的方法窗口话
这么说确实, 他可能直接使用屏幕的。。。
那如果虚拟一个屏幕复杂不? 比如虚拟机他肯定包含了游戏窗口化功能,这说明理论应该可以,看如何实现了
[/Quote]
具体的我不太清楚
读书时做的游戏都是全屏的
当时老师说窗口游戏比较麻烦
你可以下个DirectX的SDK
里面有例程是可以进行全屏和窗口切换的
不同的三维SDK这里的处理也不尽相同
OpenGL就方便一些
不过我知道的都是在程序内部转换
不知道通过第三方方法怎么实现
yxwsbobo
2010-05-20
打赏
举报
回复
[Quote=引用 1 楼 xianglitian 的回复:]
一般全屏游戏是要协调层级过去屏幕资源的
估计不能用简单的方法窗口话
[/Quote]
这么说确实, 他可能直接使用屏幕的。。。
那如果虚拟一个屏幕复杂不? 比如虚拟机他肯定包含了游戏窗口化功能,这说明理论应该可以,看如何实现了
icefairy
2010-05-20
打赏
举报
回复
mark
向立天
2010-05-20
打赏
举报
回复
一般全屏游戏是要协调层级过去屏幕资源的
估计不能用简单的方法窗口话
jameshooo
2010-05-20
打赏
举报
回复
虚拟机首先虚拟的就是硬件,看起来当然是把全屏变成窗口了。
虚拟机是唯一通用的方法。全屏游戏是可以更改屏幕分辨率和位深的,窗口游戏就不行,一个桌面只能是一种分辨率和位深,所以切换是不行的。有些游戏既提供窗口类型也提供全屏类型,是因为它们内部执行了不同的处理流程,初始化设备的方式都不一样。
zhanshen2891
2010-05-20
打赏
举报
回复
[Quote=引用 7 楼 lisunlin0 的回复:]
如果它本身就只是GDI窗口的全屏程序,可以给这个窗口发送消息,控制大小。但如果是directX或者是OpenGl的全屏窗口,好像就没有那么简单了……使用dll注入技术,hook掉窗口创建函数,还要hook掉directx(opengl)的设备创建函数,并修改参数为窗口模式(比如hook DX3D的CreateDevice函数,将D3DPRESENT_PARAMETERS的Windowed参数修改为……
[/Quote]
基于dx的3D程序是这样的,基于directdraw的是SetDisplayMode,你先调试一下看看是什么程序
尹成
2010-05-20
打赏
举报
回复
如果你是窗口别的游戏,则用ChangeDisplaySettings来改变屏幕的分辨率,不过你要有HOOK API的基础. 写一个DLL,注入游戏进程,HOOK API.但是游戏是一开始就要改变分辨率的,所以可以用createprocess调用游戏.其中用CREATE_SUSPENDED参数,然后注入DLL,HOOK ChangeDisplaySettings函数调用.简单点直接反回 DISP_CHANGE_SUCCESSFUL,使游戏认为分辨率改变成功.复杂点可以自已设置分辨率.
,最后用ResumeThread恢复进程.
尹成
2010-05-20
打赏
举报
回复
DXSDK8里的例子完整代码路径是\DXSDK8\samples\Multimedia\DirectDraw\SwitchScreenMode
切换模式时要重新调用 SetCooperativeLevel和SetDisplayMode
还有他们的绘图方式不一样,所以BACKBUFFER的结构不一样,也要重新创建,如果自己写底层的话可以让两种BACKBUFFER一样
【win】
全屏
、
窗口化
、动态修改分辨率和获取屏幕支持的所有分辨率
【win】
全屏
、
窗口化
、动态修改分辨率和获取屏幕支持的所有分辨率 前言 CocosCreator关于发布Windows的资料非常少,甚至官方的文档左侧目录里连个“发布windows”的标题都没有,发win的坑太多了 比如安装VisualStudio的时候有
一个
Windows 8.1 SDK和UCRT SDK模块,2.x版本不勾就报错,而3.x不报错,文档就没有写。希望官方可以完善相关文档 打包Windows后,并不是
全屏
的,如何去
全屏
游戏呢,如何在游戏中去自由控制
全屏
窗口化
或者去修改分辨率呢?这方面的资料
游戏窗口模式和
全屏
模式的区别在哪?
游戏窗口模式和
全屏
模式的区别在哪? 1.在分辨率相同的情况下,哪一种模式能够更流畅地表现游戏画面? 2.从表现上来看窗口模式能够比
全屏
模式更快的切换到其他
程序
,是否是因为
全屏
状态下游戏完全接替了系统对画面的渲染?此时并没有进行桌面和资源管理器等的渲染? 3.某些游戏在
全屏
状态下切换出去,会看到桌面的分辨率也变成了游戏中的分辨率,这是什么原因造成的? 4.有说法说Windows 7之
6-窗口、窗口控件、对话框以及相关功能类-QWidget窗口
由于QWidget是QPaintDevice的
一个
子类,因此子类可以用于显示自定义内容,这些内容是使用QPainter类实例的一系列绘制操作组成的。这种方法与图形视图框架使用的画布样式方法形成对比,在画布样式方法中,项目由应用
程序
添加到场景中,并由框架本身进行渲染。每个小部件都在其paintEvent()函数中执行所有绘制操作。每当需要重新绘制小部件时,无论是由于某些外部更改还是应用
程序
请求,都会调用此函数。"模拟时钟"示例显示了
一个
简单的小部件如何处理绘制事件。获取QCursor对象。
QApplication详解
一、详细描述 QApplication 类管理图形用户界面应用
程序
的控制流和主要设置。 可以说 QApplication是Qt的整个后台管理的命脉 它包含主事件循环,在其中来自窗口系统和其它资源的所有事件被处理和调度。它也处理应用
程序
的初始化和结束,并且提供对话管理。它也处理绝大多数系统范围和应用
程序
范围的设置。 对于任何
一个
使用Qt的图形用户界面应用
程序
,都正好存在
一个
QAppli
Qt第六章 多窗口编程
多窗口编程
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章