小编kra*_*jic的帖子

如何在Windows 7+和MSYS2上的GTK3上获取本机Windows装饰

我试图将我的应用程序从linux移植到Windows,我有一个主题问题.在Linux中,这是一个盒子,只需编译它,应用程序使用良好的主题,看起来像本机.

我在MSYS2中安装了gtkmm3和gtk3,我正在用CMake构建它.这没关系,我不得不将所有dll复制到二进制目录以便能够执行它.我没有复制任何其他内容.我正在尝试创建"解压缩和执行"包.

我的问题是,该应用程序看起来不合适.它看起来并不原生.窗口周围有阴影,这在Windows10中很好,但在Windows 7中它看起来不是原生的.还缺少几个图标.

Windows10上的坏gtk3应用程序主题

甚至gitk3-demo也以相同的方式看起来非原生(但它至少有最小化/最大化/关闭图标正确).

所以问题是:如何在Windows上实现GTK3应用程序的原生外观?或者至少是原生的窗户装饰品?

谢谢

gtk gtkmm gtk3 msys2 gtkmm3

13
推荐指数
2
解决办法
8669
查看次数

在GTK3树形视图中包装文字

我在GTK3中无法获取TreeView来正确包装文本。

我将其设置为以这种方式包装:

    Gtk::TreeViewColumn* pColumn = mTreeView.get_column(2);
    static_cast<Gtk::CellRendererText *>(pColumn->get_first_cell())
        ->property_wrap_mode().set_value(Pango::WRAP_WORD_CHAR);
    static_cast<Gtk::CellRendererText *>(pColumn->get_first_cell())
        ->property_wrap_width().set_value(200);
Run Code Online (Sandbox Code Playgroud)

这可以工作,文本被换行,但是当我调整窗口大小并使其变大时,带有长文本的单元格上方和下方都有很多难看的空白。看来,GTK根据换行宽度为单元格保留了高度。这对我来说毫无意义。

我试图通过计算所需的宽度来解决signal_check_resize中所需的设置:

        Gtk::TreeViewColumn* pColumn = mTreeView.get_column(2);
        auto width = this->get_allocated_width()
            - mTreeView.get_column(0)->get_width()
            - mTreeView.get_column(1)->get_width();
        static_cast<Gtk::CellRendererText *>(pColumn->get_first_cell())
            ->property_wrap_width().set_value(width-100);
        this->forceRecreateModel = true; //Needed to work
Run Code Online (Sandbox Code Playgroud)

但这只能使窗口变大。调整大小后无法缩小。

问题是,如何正确地做到这一点?

我在Arch Linux上使用gtk3.20.3-1和gtkmm3.20.1-1。

编辑:标题中的固定错字...

c++ gtk3 gtkmm3

6
推荐指数
1
解决办法
327
查看次数

标签 统计

gtk3 ×2

gtkmm3 ×2

c++ ×1

gtk ×1

gtkmm ×1

msys2 ×1