【问题标题】:CListView DeleteColumn() deletes the wrong columnCListView DeleteColumn() 删除错误的列
【发布时间】:2018-06-22 20:00:44
【问题描述】:

我有 CListView,我将一个所有者绘制的 CHeaderCtrl 子类化,所以我可以做一些事情,比如有一个弹出菜单允许用户选择或取消选择要显示的列,移动列,更改列的宽度,并在标题上显示排序顺序图标。其中 99% 运行良好。

我的问题是,如果我将一列拖到不同的位置,然后立即右键单击并从弹出菜单中取消选择一列,我无法可靠地确定要删除哪一列。我已将 iSubItem 字段设置为我的字段标识符。我尝试使用物理偏移进行删除,我还尝试使用 GetColumn() 查找我的 iSubItem 编号并获取 iOrder 并使用它来删除。无论哪种方式,它都不可靠。

如果我首先单击列标题,DeleteColumn() 使用实际偏移量是绝对可靠的。检查数据,似乎一旦单击该控件,它就会使 iOrder 与实际订单同步。

我尝试在 HeaderCtrl 和主列表上调用 Invalidate() 但这没有帮助。我认为我需要做一些事情来让事情恢复同步,但是在花了几个小时胡闹之后,我无计可施。

有什么想法吗?谢谢!

【问题讨论】:

  • 没有 MCVE 很难理解这一点。也许CHeaderCtrl::OrderToIndex 会有所帮助。
  • 请原谅我没有贴出代码,此时代码相当复杂,我觉得可能会搅浑水。不过你搞定了。非常感谢您抽出宝贵时间发表您的想法。

标签: visual-studio-2008 mfc


【解决方案1】:

如cmets中所说,

确实,CHeaderCtrl::OrderToIndex() 解决了这个问题。

因为我使用 GetColumn() 来检索与我的 SubItem 值关联的订单,将订单传递给 OrderToIndex 给了我适当的索引以传递给 DeleteColumn()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多