wxWidgets,wxListCtrl:当 db-click on divider 时如何防止列的自动大小

wxWidgets, wxListCtrl: How to prevent auto size of column when db-click on divider

[最后编辑]

我在用 wxWidgets 编写 gui 程序时总是遇到同样的问题。

当在 wxListCtrl 中双击列之间的报告类型 的分隔符时,左侧列的大小将调整为 "optimal" 宽度。 当然,在很多情况下这是一个不错的功能,但我希望在某些情况下能够将其关闭。

我一直在浏览 wxWidgets 社区的错误报告和信息博客,这是一个问题,据我所知,没有多少人问过。

我曾经找到的唯一一件事(不记得了,并且再也找不到 link)是对提到的错误报告的回答,即 class wxHeaderctrl 实际上拥有一个名为 EVT_HEADER_DCLICK(id, func).

的事件

之后我查看了文档和示例,还提到了 wxHeaderCtrl 以某种方式用于 listctrl 和其他列表。但是我在这些 class 之间的任何地方都找不到连接,而且我仍然找不到通过玩 "custom made classes" 双击分隔线来防止列自动调整大小的方法方法。

真的有办法以 "wxWidgets" 的方式做到这一点,还是我必须换成另一个工具包(或框架)?

提前感谢您的推荐。

更多信息:

图片:点击db之前

图片:点击db后

编辑(2018 年 4 月 29 日 16:42 | MESZ)

在考虑 VZ 在其他子classes 中的回答后,我实际上发现了一些东西,这些子classes 使用分离的模型来查看方法(我习惯于从其他语言或工具包中使用)

我现在使用 wxDataViewCtrl 作为视图,使用 wxDataViewListStore 作为模型。 在控件中 class 我可以为每一列设置特定的标志,包括调整大小和其他事件。

谢谢你激发了我的思想:)

双击调整列的大小是 MSW 列表控件的本机行为,我认为目前使用 wx API 无法轻易防止可调整大小的项目发生这种情况。

当然,如果项目一开始就不能调整大小,那么就没有问题。但是如果你想让用户调整它的大小而不是在双击时自动执行它,你需要以相当不自然的方式编写代码并处理 在 [=17] 之后发生的 wxEVT_LIST_COL_DRAGGING 事件=] wxEVT_LIST_COL_END_DRAG 因为这些人为事件仅在双击时生成,而不是在正常拖动时生成,然后强制将列大小调整回其原始宽度。 IMO 它太丑陋而且不值得,但如果你真的想要,你应该能够让它工作。