无模式、无父的 wxDialog 仍然始终位于 z 顺序中的 wxFrame 窗口之上?

2024-02-07

我的程序打开一个基于 wxFrame 的窗口和多个无模式且无父的基于 wxDialog 的窗口。除了基于 wxDialog 的窗口坚持始终位于基于 wxFrame 的窗口之上之外,这一切都工作得很好。

我知道关于wxDIALOG_NO_PARENT,我正在使用它。当我关闭 wxFrame 时,对话框保持打开状态,因此它们肯定没有 wxFrame 窗口作为父窗口。

(如果重要的话,我正在使用 C++、wxWidgets 2.8.something,并在 Ubuntu Linux 上运行它。我的程序还没有准备好在任何其他平台上编译,所以我还没有在其他平台上进行测试。)

I want all窗口完全独立操作,因此用户可以使用wxFrame窗口以及wxDialog窗口。有人能指出我正确的方向吗?


似乎这种行为来自 Gnome 处理具有不同“类型提示”的窗口的方式的差异......它将它们放入自己的 z-index 分组中:

https://developer.gnome.org/gdk3/stable/gdk3-Windows.html#GdkWindowTypeHint https://developer.gnome.org/gdk3/stable/gdk3-Windows.html#GdkWindowTypeHint

该对话框是用以下命令创建的GDK_WINDOW_TYPE_HINT_DIALOG而你的另一个窗口很可能是用创建的GDK_WINDOW_TYPE_HINT_NORMAL。做出这个决定的关键点在于gtk/toplevel.cpp并且它的提示是“额外”样式标志包含wxTOPLEVEL_EX_DIALOG:

顶层.cpp#L594 https://github.com/wxWidgets/wxWidgets/blob/2c69d27c0d225d3a331c773da466686153185320/src/gtk/toplevel.cpp#L594

这是仅有的两个电话gtk_window_set_type_hint在 wxWidgets GTK 代码库中,除了在启动屏幕代码中。因此事后改变“额外”的风格是没有帮助的。 (“正确”的解决方案是修补 wxWidgets,以便调整wxTOPLEVEL_EX_DIALOG在额外的样式中将对窗口类型提示进行适当的调整。)

您不能在不运行 wxDialog 类的构造函数的情况下使用它,该构造函数调用非虚拟方法wxDialog::Create,它将额外的样式设置为wxTOPLEVEL_EX_DIALOG然后直接进入顶层窗口创建:

对话框.cpp#L54 https://github.com/wxWidgets/wxWidgets/blob/2c69d27c0d225d3a331c773da466686153185320/src/gtk/dialog.cpp#L54

所以我想你可以选择尝试这个,如果你还没有显示对话框窗口,它就可以工作:

#ifdef __WXGTK__
gtk_window_set_type_hint(
    GTK_WINDOW(iShouldBeUsingQtDialog->GetHandle()),
    GDK_WINDOW_TYPE_HINT_NORMAL);
#endif

...如果您已经显示了该对话框,则需要使用它才能正常工作:

#ifdef __WXGTK__
gdk_window_set_type_hint(
    iShouldBeUsingQtDialog->GetHandle()->window,
    GDK_WINDOW_TYPE_HINT_NORMAL);
#endif

这两种情况都需要您将包含文件添加到源中:

#ifdef __WXGTK__
#include "gtk/gtkwindow.h"
#endif

...并且您必须更新您的构建才能找到 GTK 包含的内容。在 G++ 的命令行上我尝试了这个并且它有效:

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

无模式、无父的 wxDialog 仍然始终位于 z 顺序中的 wxFrame 窗口之上? 的相关文章

随机推荐

  • 从 C# 运行宏 [重复]

    这个问题在这里已经有答案了 我知道你可以使用Microsoft Office Interop Excel 在 C 程序中使用 VBA 命令 我有接近 10 000 行代码的 VBA 将其转换为 C 兼容命令是不现实的 它创建一个工作簿并执行
  • 有没有更好的方法来控制子进程的 PYTHONPATH?

    我有一组必须动态修改 os sys path 的脚本 然后脚本启动一个子进程 理想情况下 子进程应与调用者具有相同的 os sys path 我想避免将其作为参数传递 因为这需要修改子进程脚本 我有可以运行并满足我所有需求的代码 我想知道是
  • 尝试将所有组件更改为es6

    我正在尝试将所有组件更改为 es6 我做了两个 但不知道第三个该怎么做 你能告诉我如何改变它吗 下面提供我的代码 export default class FirstTimeTab extends React Component getIn
  • Twig 与 Symfony 2 显示 prod 和 dev 之间不同的 json 编码变量

    我们正在构建一个 Symfony 2 应用程序 它将一些数据从控制器发送到视图 控制器 user array configuration gt array levels gt array warning gt 0 05 danger gt
  • 缩放数组(矩阵)

    该程序的目的是创建一个更大的字节数组 将原始数组放大 10 倍 例如 0 0 中的 1 应该是新数组中由 1 组成的 10x10 正方形 我提供了代码和输出 它们在填充较大数组期间似乎可以正常工作 但随后会打印不同的值 我目前正在尝试仅使用
  • browser.sleep 和 browser.pause 不会被执行

    我是量角器和打字稿的新手 现在正在尝试 PoC 框架 但是 我想知道为什么 browser sleep 或 browser pause 在以下场景中不被执行 第一步通过后测试立即退出 Given I access the Catalogue
  • 向当前日期添加一个月

    我必须在今天的日期上添加一个月 并且必须获得 1 个月后的日期 有人可以帮忙吗 Dim newDate as DateTime DateTime Now AddMonths 1
  • 套接字失去连接

    我知道 Twisted 可以很好地做到这一点 但是如果只是简单的套接字呢 你如何判断套接字中的连接是否随机丢失 就像 如果我的互联网在一秒钟内停止并重新连接 我假设你正在谈论 TCP 如果您的互联网连接中断了一秒钟 您可能根本不会丢失 TC
  • 从java中的.p7b文件中提取单个.cer证书

    我是密码学新手 如果您认为这是一个基本问题 请原谅 我有一个 p7b 文件 我需要读取并提取各个公共证书 即 cer 文件并将其存储在密钥存储中 我不必担心密钥存储中的持久性 因为已经有一个服务将 cer 文件作为byte 并保存它 我想知
  • mysql_insert_id();成功插入行后不返回值

    我发誓我已经在这个网站和其他网站上倾注了所有其他类似的问题 但我想我只是错过了一些东西 希望有人能指出我的大脑向我隐藏的一个愚蠢的错误 我的脚本将表单中的值插入到名为 notes 的表中 此时 它通过名为 newRelationship 的
  • 查找一天中花费的时间以及所花的工间休息时间

    我现在的情况是 我需要找出一些内部申请在办公室花费的总时间 我有这样的样本数据 Id EmployeeId ScanDateTime Status 7 87008 2018 08 02 16 03 00 227 1 8 87008 2018
  • 如果我不设置缓存过期会发生什么

    我正在 google pagespeed Insights 上测试我的页面 它返回 在静态资源的 HTTP 标头中设置到期日期或最长期限 指示浏览器从本地磁盘而不是通过网络加载以前下载的资源 我的假设是 如果我不设置过期时间 我的文件将永远
  • 如果所有子域都指向网站根目录,是否需要通配符 SSL 证书

    我对 SSL 证书完全陌生 需要很快购买一个 当子域名发挥作用时 价格似乎会大幅上涨 我的问题是这样的 我已经设置了我的网站 以便用户名 domain com通过 htaccess 重写为域名 com user 用户名 如果我将网站设置为所
  • Java ASM 字节码修改-更改方法体

    我有一个罐子里的类的方法 我想与我自己的主体交换 在这种情况下 我只想让该方法将 GOT IT 打印到控制台并返回 true 我正在使用系统加载器来加载 jar 的类 我使用反射使系统类加载器能够通过字节码加载类 这部分似乎工作正常 我正在
  • 如何将列与 Flexbox 对齐?

    我目前正在学习 Flexbox 布局 但找不到解决我的问题的方法 我尝试使用 justify content 和 flex basis 但它不起作用 有人有解决办法吗 The result I would like section disp
  • .NET Core RC2 中的登录声明

    我正在将 NET 4 6 版本移植到 NET Core RC2 并想知道如何在 NET Core RC2 中执行以下操作 public async Task
  • 如何在 SQL Server 中将多行转换为列?

    如何将存储为多行的字段转换为列 我也在下面列出了代码 下面是所需内容的示例 但实际上最多可以包含 20 列 谢谢 COL1 COL2 COL3 TEST 30 NY TEST 30 CA TEST2 10 TN TEST2 10 TX 我希
  • DialogFragment 行为异常

    您好 我已使用此 DialogFragment 在我的应用程序中显示日期选择器 public class DateDialogFragment extends DialogFragment implements DatePickerDial
  • 如何在linux中用C设置IP地址

    通过使用strace and ifconfig 我发现可以这样设置IP地址 include
  • 无模式、无父的 wxDialog 仍然始终位于 z 顺序中的 wxFrame 窗口之上?

    我的程序打开一个基于 wxFrame 的窗口和多个无模式且无父的基于 wxDialog 的窗口 除了基于 wxDialog 的窗口坚持始终位于基于 wxFrame 的窗口之上之外 这一切都工作得很好 我知道关于wxDIALOG NO PAR