Windows 7 上的全屏 OpenGL 窗口打开的模态对话框不显示

2024-03-26

看来我的问题可能与未回答的相关问题相同(Windows 7 上出现 GLUT 的 OpenGL,全屏模式不显示消息框 https://stackoverflow.com/questions/1842312/opengl-with-glut-on-windows-7-fullscreen-mode-not-showing-the-message-box).

自从我改用 Win7 作为开发环境以及我的应用程序的可能目标平台后,我注意到它们的行为出现了退化。

每当我有一个包含全屏 OpenGL 上下文的全屏窗口时,应用程序就会出现显示模式对话框(例如消息框、文件打开对话框等)的问题。

该窗口刚刚使用 WS_POPUP 样式创建。 GL 上下文并不奇怪。 Windows XP 一切正常。

Windows 7 下的问题是模式对话框在打开时不可见(可能它们出现在全屏窗口后面)。您必须按 Alt-Tab 键应用程序才能显示对话框。

这是一个主要问题,因为应用程序似乎被冻结,而实际上它正在等待用户输入。

有人遇到过这种行为吗?有谁知道解决方法?

我很快就制作了一个示例测试应用程序;它的源代码可以在以下位置找到http://pastebin.com/K4v2NNDs http://pastebin.com/K4v2NNDs。可以找到一个简单的MSVC8项目here http://code.google.com/p/rotoglup-scratchpad/source/browse/#svn/trunk/misc/windows7_fullscreen_modal_dialog_pb.

附言。我还在 opengl.org 论坛上发过帖子,对关注这两个论坛的人表示歉意。

EDIT

感谢 Chris 的评论,我已经测试了各种事件的模式对话框,例如 WM_TIMER 或 WM_RBUTTONUP,但问题仍然存在。

我还用“DWM_EC_DISABLECOMPOSITION”调用“DwmEnableComposition”只是为了检查:问题仍然存在。

我还通过用 DirectX 替换 OpenGL 位来测试应用程序,这样一切都会按预期工作......这确实是 OpenGL 导致了问题。

(更新了pastebinhttp://pastebin.com/Rq1Ehm3w http://pastebin.com/Rq1Ehm3w和我的便签本)

EDIT

Windows 8 上也存在该问题。


解决方法是作者:Joseph Steel,因此,作为参考,我也将其放在这里:

我针对此问题找到的解决方案是确保窗口的像素格式使用 WGL_SWAP_COPY_ARB 交换方法而不是 WGL_SWAP_EXCHANGE_ARB。

我注意到必须使用“wglChoosePixelFormatARB”来获取像素格式。

我尝试使用带有“PFD_SWAP_COPY”标志的经典“ChoosePixelFormat”,但它在我的系统(Win7 x64 + NVidia GeFo 9600GT v196.21)上不起作用,因为它总是返回带有“PFD_SWAP_EXCHANGE”的像素格式。

我对结果不太满意,因为它在我的显示器中引入了一些撕裂,但至少它有效!

作为参考,我已经更新了我的测试源代码 http://code.google.com/p/rotoglup-scratchpad/source/browse/#svn/trunk/misc/windows7_fullscreen_modal_dialog_pb.

编辑,2013 年 12 月

此解决方法不再有效,至少在我的系统(笔记本电脑,Optimus GeForce 650M)上是这样。 WGL_SWAP_COPY_ARB 已设置,但模式对话框未显示。到目前为止,创建具有 1 像素边框的窗口(将 WS_BORDER 添加到 WS_POPUP 样式)似乎可以解决问题,并阻止进入“全屏”模式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows 7 上的全屏 OpenGL 窗口打开的模态对话框不显示 的相关文章

随机推荐

  • Python 中的循环列表迭代器

    我需要迭代一个循环列表 可能很多次 每次都从最后访问的项目开始 用例是连接池 客户端请求连接 迭代器检查指向的连接是否可用并返回它 否则循环直到找到可用的连接 我怎样才能在Python中巧妙地做到这一点 If you instead nee
  • 在 iPhone SDK 上实现动画的最佳方法?

    我知道如何通过移动 调整 UIView 的大小来实现基本动画 不过下面两个动画就显得有点复杂了 1 想象一下汽车游戏 当您按下踏板按钮时 车速表就会旋转 如何制作那种条形 填满 圆形的动画 2 第二个动画更容易描述 如何制作数字增加的动画
  • FactoryGirl:填充具有许多关系的保留构建策略

    我的问题似乎很常见 但我没有在文档或互联网本身中找到任何答案 这似乎是这个问题的克隆has many 同时尊重factory girl 中的构建策略 https stackoverflow com questions 1506556 has
  • 有关使用 TortoiseGit 与 SVN 存储库交互的说明?

    多年来 我一直在 Windows 上使用 TortoiseSVN 为我自己的项目提供本地文件系统存储库 我计划开始与一位朋友合作开发其中一个项目 并将存储库转移到我自己的网站上 我读过很多 git 击败 SVN 的文章 过去几年的帖子 我想
  • 使用 helm 进行 Kubernetes 作业更新

    我有一个 Kubernetes 集群 我正在使用 Helm 在那里部署我的应用程序 一切工作正常 但一方面是工作更新 正如我所读到的 作业是不可变的 这就是它们无法更新的原因 但我不明白 为什么 helm 不像 Pod 那样创建新作业 最后
  • 在 .NET Core 项目中添加 PDF 链接

    我想将 PDF 文件添加到我的 net core 2 0 项目中 它在我的本地主机上使用 IIS Express 运行 我已经将 pdf 文件添加到我的项目文件中 它显示在解决方案资源管理器中 并且我在中添加了相应的链接我的 cshtml
  • HTML5视频播放器:动态加载视频

    那么 使用兼容 HTML 5 的视频播放器 如 Video JS 如何动态加载视频 而无需重新加载整个页面呢 想象一下 一个链接列表 类似于播放列表 每个链接都指向一个视频 单击链接时 我想将所选视频加载到播放器中 目前 我正在使用一个包含
  • 在vim中打开目录

    我是一名 mac 用户 正在认真尝试 vim 我习惯的大多数 GUI 编辑器都允许我通过执行以下命令来将目录作为 项目 打开 编辑 www example com vim 等效项vim www example com 将显示目录中的文件列表
  • 如何将 STDERR 重定向到 STDOUT,但忽略原始 STDOUT? [复制]

    这个问题在这里已经有答案了 我有一个程序STDERR我想要检查并运行的输出grep on etc 所以我可以将其重定向到STDOUT并使用 grep 但问题是 我这样做not想要原件STDOUT内容 所以 这个不行 cmd 2 gt 1 g
  • 为什么选择静态类而不是单例实现?

    静态与静态 单例问题之前在 SO 中已经讨论过很多次了 然而 所有的答案都指出了单例的许多优点 我的问题是 静态类比单例有什么优点 为什么不每次都简单地选择一个单例呢 静态类是你盒子里的一个技术工具 基本上是一个语言功能 Singleton
  • SQL聚合函数选择唯一值

    我有一个包含两列的行集 technical id and natural id 行集实际上是复杂查询的结果 假设列值之间的映射是双射的 即对于具有相同值的两行 technical id the natural ids 也相同 对于不同的te
  • iPhone 应用程序可以阻止电话吗?

    是否可以编写一个应用程序来阻止传入和传出的电话 还是 iPhone 被锁定太多了 谢谢 编辑 请参阅下面 Rajan Maheshwari 的回答 CallKit 现在提供了这一点 即使那些看似永远不会改变的事情 最终也可能会改变 任何修改
  • Django 从 postgres JSON 字段获取值

    我有一个简单的模型 例如 class MyModel models Model data JSONField JSON 字段data结构如下 name Brian skills id 4 name First aid id 5 name S
  • 如何删除 Visual Studio PIN TAB 图标(显然在选项卡上)

    有没有办法完全删除 Visual Studio 2010 中的 pin 选项卡选项 如何 我一直不小心点击它 我希望它消失 我从不使用它并且总是不小心点击它 thnx 附注右键单击 PIN 图标确实会弹出一些自定义对话框 但无法删除它 无法
  • SimpleHTTPServer 添加 default.htm default.html 到索引文件

    我总是用 python m SimpleHTTPServer对于快速本地静态 Web 测试 它非常适合index htm or index html作为索引文件 不过我需要使用default htm or default html对于我目前
  • Sequelize cli 模型创建

    我一直在尝试创建一个user model使用sequelize cli 但每当我插入更多参数 如主键和唯一 时 解析器就会失败 例如 npx sequelize model create name user attributes name
  • 通过序言格式化 csv 表?

    尽我所能 我无法弄清楚如何更改 sphinx 的 pdf 输出中的默认表格格式 我可以编辑 tex 文件或 writer py 源代码 但这两个似乎都是不好的选择 有什么东西可以通过序言来实现这一点吗 取决于您试图通过更改表格格式来完成的任
  • OWL 中表达式前面的列表?

    OWL 中表达式前面是否可以有一个列表 就像是 Dairy Egg Nut rdfs subClassOf FoodGroup or Dairy Egg Nut rdfs subClassOf FoodGroup 或者一般来说 是否存在针对
  • PHP 日期时间字符串区分

    在这两种情况下 我都可以从字符串创建日期对象 如下所示 dt strtotime 2013 04 19 17 00 00 or dt strtotime 10 hours 我需要一种方法来区分这两种日期类型 无论是相对数据字符串还是绝对数据
  • Windows 7 上的全屏 OpenGL 窗口打开的模态对话框不显示

    看来我的问题可能与未回答的相关问题相同 Windows 7 上出现 GLUT 的 OpenGL 全屏模式不显示消息框 https stackoverflow com questions 1842312 opengl with glut on