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" 的方式做到这一点,还是我必须换成另一个工具包(或框架)?
提前感谢您的推荐。
更多信息:
- 平台:Windows10
- 语言:C++
- 编译器:mingw64 v7.3.0
- 工具包:wxWidgets v3.0.4
图片:点击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 它太丑陋而且不值得,但如果你真的想要,你应该能够让它工作。
[最后编辑]
我在用 wxWidgets 编写 gui 程序时总是遇到同样的问题。
当在 wxListCtrl 中双击列之间的报告类型 的分隔符时,左侧列的大小将调整为 "optimal" 宽度。 当然,在很多情况下这是一个不错的功能,但我希望在某些情况下能够将其关闭。
我一直在浏览 wxWidgets 社区的错误报告和信息博客,这是一个问题,据我所知,没有多少人问过。
我曾经找到的唯一一件事(不记得了,并且再也找不到 link)是对提到的错误报告的回答,即 class wxHeaderctrl 实际上拥有一个名为 EVT_HEADER_DCLICK(id, func)
.
之后我查看了文档和示例,还提到了 wxHeaderCtrl 以某种方式用于 listctrl 和其他列表。但是我在这些 class 之间的任何地方都找不到连接,而且我仍然找不到通过玩 "custom made classes" 双击分隔线来防止列自动调整大小的方法方法。
真的有办法以 "wxWidgets" 的方式做到这一点,还是我必须换成另一个工具包(或框架)?
提前感谢您的推荐。
更多信息:
- 平台:Windows10
- 语言:C++
- 编译器:mingw64 v7.3.0
- 工具包:wxWidgets v3.0.4
图片:点击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 它太丑陋而且不值得,但如果你真的想要,你应该能够让它工作。