CListView DeleteColumn()删除错误的列

时间:2018-01-13 16:25:17

标签: visual-studio-2008 mfc

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

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

如果我首先在列标题上单击,则使用实际偏移量DeleteColumn()是可靠的。检查数据,似乎控件在点击后使iOrder与实际订单同步。

我已尝试在HeaderCtrl和主列表上调用Invalidate(),但这并没有帮助。我认为我需要做些什么才能让事情恢复原状,但是花了几个小时后,我才结束了。

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:1)

如评论所述,

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

因为我使用GetColumn()来检索与我的SubItem值相关联的订单,所以将订单传递给OrderToIndex会给我一个合适的索引来传递给DeleteColumn()

相关问题