【发布时间】:2018-06-22 20:00:44
【问题描述】:
我有 CListView,我将一个所有者绘制的 CHeaderCtrl 子类化,所以我可以做一些事情,比如有一个弹出菜单允许用户选择或取消选择要显示的列,移动列,更改列的宽度,并在标题上显示排序顺序图标。其中 99% 运行良好。
我的问题是,如果我将一列拖到不同的位置,然后立即右键单击并从弹出菜单中取消选择一列,我无法可靠地确定要删除哪一列。我已将 iSubItem 字段设置为我的字段标识符。我尝试使用物理偏移进行删除,我还尝试使用 GetColumn() 查找我的 iSubItem 编号并获取 iOrder 并使用它来删除。无论哪种方式,它都不可靠。
如果我首先单击列标题,DeleteColumn() 使用实际偏移量是绝对可靠的。检查数据,似乎一旦单击该控件,它就会使 iOrder 与实际订单同步。
我尝试在 HeaderCtrl 和主列表上调用 Invalidate() 但这没有帮助。我认为我需要做一些事情来让事情恢复同步,但是在花了几个小时胡闹之后,我无计可施。
有什么想法吗?谢谢!
【问题讨论】:
-
没有 MCVE 很难理解这一点。也许
CHeaderCtrl::OrderToIndex会有所帮助。 -
请原谅我没有贴出代码,此时代码相当复杂,我觉得可能会搅浑水。不过你搞定了。非常感谢您抽出宝贵时间发表您的想法。