Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2008 CListView DeleteColumn()删除错误的列_Visual Studio 2008_Mfc - Fatal编程技术网

Visual studio 2008 CListView DeleteColumn()删除错误的列

Visual studio 2008 CListView DeleteColumn()删除错误的列,visual-studio-2008,mfc,Visual Studio 2008,Mfc,我有一个CListView,它是一个所有者绘制的CHeaderCtrl的子类,所以我可以做一些事情,比如有一个弹出菜单,允许用户选择或取消选择要显示的列,移动列,更改列的宽度,以及在标题上显示排序顺序图标。它的99%工作得很好 我的问题是,如果我将一列拖到另一个位置,然后立即右键单击并从弹出菜单中取消选择一列,我就无法确定要删除哪一列。我已将iSubItem字段设置为我的字段标识符。我尝试过使用物理偏移量来删除,我也尝试过使用GetColumn来查找我的iSubItem编号并获取iOrder并使

我有一个CListView,它是一个所有者绘制的CHeaderCtrl的子类,所以我可以做一些事情,比如有一个弹出菜单,允许用户选择或取消选择要显示的列,移动列,更改列的宽度,以及在标题上显示排序顺序图标。它的99%工作得很好

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

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

我试着在HeaderCtrl和主列表上调用Invalidate,但没有任何帮助。我想我需要做点什么才能使事情恢复同步,但在花了几个小时胡闹之后,我已经智穷了


有什么想法吗?谢谢

正如评论中所说

事实上,CHeaderCtrl::OrderToIndex解决了这个问题


因为我使用GetColumn检索与我的子项值关联的订单,所以将订单传递给OrderToIndex为我提供了传递给DeleteColumn的适当索引

没有MCVE很难理解这一点。也许CHeaderCtrl::OrderToIndex会有帮助。请原谅我没有发布代码,这一点非常复杂,我觉得它可能会弄脏水。不过你成功了。非常感谢您抽出时间发表您的想法。