我试图将我的应用程序从linux移植到Windows,我有一个主题问题.在Linux中,这是一个盒子,只需编译它,应用程序使用良好的主题,看起来像本机.
我在MSYS2中安装了gtkmm3和gtk3,我正在用CMake构建它.这没关系,我不得不将所有dll复制到二进制目录以便能够执行它.我没有复制任何其他内容.我正在尝试创建"解压缩和执行"包.
我的问题是,该应用程序看起来不合适.它看起来并不原生.窗口周围有阴影,这在Windows10中很好,但在Windows 7中它看起来不是原生的.还缺少几个图标.
甚至gitk3-demo也以相同的方式看起来非原生(但它至少有最小化/最大化/关闭图标正确).
所以问题是:如何在Windows上实现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。
编辑:标题中的固定错字...