FLTK 1.4 小部件位置 w.r.t. X11 根窗口?

2024-04-29

context

我正在和其他人一起编码参考系统 http://refpersys.org/,C++17 上的 GPLv3+ 项目gitlab https://gitlab.com/bstarynk/refpersys适用于 GNU/Linux/x86-64/Debian/Sid。它是fltk分支git分支 https://gitlab.com/bstarynk/refpersys/-/tree/fltk-branch正在使用FLTK 1.4 https://www.fltk.org/software.php?VERSION=1.4.x#developer,从源代码编译,带有Xorg https://en.wikipedia.org/wiki/X.Org_Server显示服务器。

我有 C++ 类,例如(在file headfltk_rps.hh https://gitlab.com/bstarynk/refpersys/-/blob/fltk-branch/headfltk_rps.hh):

class RpsGui_Window: public Fl_Double_Window
{
  static std::set<RpsGui_Window*> _set_of_gui_windows_;
public:
  virtual int handle(int);
protected:
  Fl_Menu_Bar *guiwin_menubar;
  std::string guiwin_label;
  virtual void initialize_menubar(void) =0;
  RpsGui_Window(int w, int h, const std::string& lab);
  RpsGui_Window(int x, int y, int w, int h, const std::string& lab);
public:
  virtual ~RpsGui_Window();
  /// .... skipping irrelevant code
  const std::string label_str(void) const {
    return guiwin_label;
  };
}; /// end class RpsGui_Window

class RpsGui_CommandWindow : public RpsGui_Window
{
  static constexpr int right_menu_gap = 16;
  static constexpr int menu_height = 20;
  Fl_Pack* cmdwin_pack;
  friend  void rps_fltk_initialize(int &,char**);
  virtual void initialize_menubar(void);
  virtual void initialize_pack(void);
  static void menu_dump_cb(Fl_Widget*, void*);
  static void menu_exit_cb(Fl_Widget*, void*);
public:
  RpsGui_CommandWindow(int w, int h, const std::string& lab);
  RpsGui_CommandWindow(int x, int y, int w, int h, const std::string& lab);
  virtual ~RpsGui_CommandWindow();
};              // end class RpsGui_CommandWindow

我正在使用旧的 C++ 宏进行调试,输出到std::cerr(定义于refpersys.hh第 315 行 https://gitlab.com/bstarynk/refpersys/-/blob/fltk-branch/refpersys.hh#L315以及以下)这样的as below https://gitlab.com/bstarynk/refpersys/-/blob/fltk-branch/fltklo_rps.cc#L381:

 RPS_DEBUG_LOG(GUI, "RpsGui_CommandWindow::initialize_pack this:" 
               <<  RpsGui_ShowWidget(this) 
               << std::endl << "... cmdwin_pack:" 
               << RpsGui_ShowWidget(cmdwin_pack));

屏幕上仍然有问题。 看RefPerSys 问题 #33 https://gitlab.com/bstarynk/refpersys/-/issues/33了解更多详细信息(带有屏幕截图)。

我想输出给定 FLTK 小部件的位置。我的 X11 根窗口。快速加权加权平均法xdpyinfo正在给出(跳过了很多输出)

name of display:    :0
version number:    11.0
vendor string:    The X.Org Foundation
vendor release number:    12008000
X.Org version: 1.20.8

screen #0:
  dimensions:    5360x1440 pixels (1418x381 millimeters)
  resolution:    96x96 dots per inch

question

换句话说,我想编码(用于调试目的)

int RpsGui_Window::x_wrt_root() const;

as 返回左上角水平坐标的成员函数thisw.r.t. X11 根窗口但我不确定如何编写代码。

致电给XGetWindowAttributes在功能上fl_handleFLTK(file src/Fl_x.cxx https://github.com/fltk/fltk/blob/master/src/Fl_x.cxx,靠近第 2159 行)可能与我的问题有关,也是如此top_window_offset成员函数 https://www.fltk.org/doc-1.4/classFl__Widget.html#afc4478714ca51d4533bf062c54c44a2b of Fl_Widget


有一个继承自Fl_Widget的函数:x() https://www.fltk.org/doc-1.4/classFl__Widget.html#aeed320ce65d02a7f0fcab1363f0136b0 and x() https://www.fltk.org/doc-1.4/classFl__Widget.html#a4665aaf0850ed0d334600e2cac58c360;您可以调用它们来了解父窗口位置:

class RpsGui_CommandWindow {
    void your_func () {
        int parent_x = RpsGui_Window::x();
    }
};

使用 X11,您可以调用X查询树 https://tronche.com/gui/x/xlib/window-information/XQueryTree.html获取窗口的根ID,然后调用X获取窗口属性 https://tronche.com/gui/x/xlib/window-information/XGetWindowAttributes.html知道你想要的价值。不过,您需要命令窗口的 X11 窗口 ID。为此,在 FLTK 中docs https://www.fltk.org/doc-1.4/osissues.html#osissues_unix有一些记录的全局变量可以访问该数据。必须在调用 Fl_Window::make_current() 之后完成

我知道这个“命令”窗口是菜单,在图像中它似乎位于正确的位置,但宽度错误,或者可能是窗口管理器更改了大小。在这种情况下,您应该有一个事件处理程序来调整小部件的大小。

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

FLTK 1.4 小部件位置 w.r.t. X11 根窗口? 的相关文章

随机推荐

  • 如何在片段之间传递数据

    我试图在程序中的两个片段之间传递数据 它只是存储在列表中的一个简单字符串 列表在片段 A 中公开 当用户单击列表项时 我需要它在片段 B 中显示 内容提供程序似乎只支持 ID 因此这不起作用 有什么建议么 为什么不使用捆绑包呢 从您的第一个
  • 计算嵌套列表的深度或最深级别

    A 在一项作业上遇到了真正的问题 并且令人头疼 我正在上一堂入门编程课 我必须编写一个函数 给定一个列表 该函数将返回它所达到的 最大 深度 例如 1 2 3 将返回 1 1 2 3 将返回 2 我写了这段代码 这是我能得到的最好的T T
  • Mysql正则表达式搜索不包含重复字符

    我有一个数据库表 其中包含字典中的单词 现在我想选择字谜词 例如 如果我给出字符串SEPIAN它应该获取像这样的值apes pain pains pies pines sepia etc 为此 我使用了查询 SELECT FROM word
  • 如何在 compose 中正确加载 svg 图像?

    我试图在 Jetpack compose 中加载 SVG 文件 但当我在手机上运行它时 它变成了黑色 这是我手机上的图像 我不想用tint修改器 因为它将以单一颜色加载 SVG Use Image可组合而不是Icon 图标默认进行着色 So
  • Firefox 中有 XDomainRequest 等效项吗?

    Firefox 或任何其他浏览器中是否有与 Internet Explorer 的 XDomainRequest 等效的功能 我想访问我的域之外的服务 网站 Internet Explorer 8 中的 XDomainRequest 对象是
  • 下拉菜单的 iframe z-index

    我有下拉菜单的代码 我的目标是通过 iFrame 加载该代码 不幸的是 我无法弄清楚如何使用 Z 索引加载 iFrame 外部的视图元素 代码如下
  • 如何在 PHP 中从serializeArray 获取 POST 值?

    我正在尝试这个我见过的新方法serializeArray with ajax var data form input serializeArray post var action process data data ajax etc 这样我
  • 如何在 VS 2012 中获取水晶报表?

    我对 VS 2012 有疑问 即我想创建一个报告 例如特定学生的结果 我搜索了很多然后我知道我必须安装SAP Crystal Report 并且我已经这样做了 但工具箱中仍然没有水晶报表 只有两个项目 名为 报表 报表向导 有人可以帮我弄这
  • Action Cables、嵌套 JSON 属性和 JSONAPI

    我有一个相当具体的问题 我希望你们中的一个真正聪明的人可能知道解决方案 甚至是现阶段的解决方法 具体来说 我正在处理操作电缆 嵌套 JSON 和 JSONAPI 我有一个asset模型 它具有一些属性 例如name desc等等 但它还有一
  • 覆盖 Kotlin 数据类的 getter

    给定以下 Kotlin 类 data class Test val value Int 我将如何覆盖Intgetter 以便如果值为负数则返回 0 如果这是不可能的 有哪些技术可以达到合适的结果 在花了几乎一整年的时间每天编写 Kotlin
  • Typescript 上的 Drawflow 库

    我目前正在尝试实现 Jerosoler 制作的很棒的 Drawflow 库 在这里找到 https github com jerosoler Drawflow https github com jerosoler Drawflow 在我的
  • 在 UIButton 中垂直显示标题?

    我是 iPhone 编程新手 我被这个简单的问题困扰了 我有一个UIView with a UIButton在里面 维度为UIButton40x200 靠近左边距 我需要在按钮中垂直显示文本 有没有一种方法可以在不使用任何图像的情况下完成此
  • php 的睡眠函数

    作为使用 cron 作业的可能替代方案 我找到了 sleep 函数 我以前从未使用过这个 如果我告诉我的脚本在一种循环内运行 并且在该循环内我有这样的指令 sleeps for 86400 seconds or one day sleep
  • oracle中的数字格式

    Hai 我的数字格式有问题 我正在使用 oracle 我在数据库中有一个数字字段 但是当我检索它时 我需要将其视为浮点数 例如 在检索时 现在我得到的结果为 200 DR 借方的 DR 手动给出 现在我需要得到 200 00 DR 的结果
  • Python 3:资源警告:未关闭的文件 <_io.TextIOWrapper name='PATH_OF_FILE'

    当我在 python 中运行测试用例时 python 规范化器 setup py 测试 我收到以下异常 ResourceWarning unclosed file lt io TextIOWrapper name Users workspa
  • 在我分叉了 github 项目后,如何才能保持原始项目的最新状态?

    在 github 上 在我分叉一个项目 修改它 然后提交我的拉取请求后 似乎我必须删除并重新分叉 以便在我的拉取请求得到尊重后保持最新状态 必须不断删除存储库才能使其保持最新状态 这似乎很乏味 有没有什么方法可以使其保持最新状态而无需删除和
  • Typescript 中此子范围的问题

    This is ALMOST和其他人一样this到目前为止 我已经读过范围界定问题 除了一个细微的差别之外 这使得提出这个问题变得有意义 imo 现在最初我的问题是范围this使用 Knockout 和 Typescript 因此给出以下内
  • 将接口作为参数传递给扩展方法

    我使用扩展方法来扩展 html 助手来制作 RSS 转发器 public static string RSSRepeater this HtmlHelper html IEnumerable
  • 角度 $q.all() 是否有第二次成功,如 jQuery $.get()

    查看 jQuery 文档 我发现了以下内容 get example php function alert success done function alert second success lt fail function alert e
  • FLTK 1.4 小部件位置 w.r.t. X11 根窗口?

    context 我正在和其他人一起编码参考系统 http refpersys org C 17 上的 GPLv3 项目gitlab https gitlab com bstarynk refpersys适用于 GNU Linux x86 6