在MFC中的CListView添加column时,比如添加,姓名 年龄 性别三列,此时在性别列后还有一列,没有标题,现想不想让该列出现在ListView中,除非用户通过鼠标拖动列的宽度,程序中如果设置性别这列的宽度很大,就会出现在水平滚动条,而且在程序最大化后如果性别的宽度不够的话还是能看到最后一列,如果大家曾经做过C++Builder的程序就会知道在C++Builder中的ListView可以设置最后一列为AutoSize=true即可以解决,这样,用户改变窗口大小后,最后一列性别会自动变化,不知道我的问题说清楚了没有!请问如何解决?

解决方案 »

  1.   

    在MFC中只能自己计算。
    比如你的ListView一共有三列,先求出ListView的宽度,减去前面2列的宽度之和,然后将这个差设置为第3列的宽度即可国。
      

  2.   

    在WM_SIZE消息响应函数中处理.
      

  3.   


    // 假设lsvListView是你的CListView,i是最右一列。
    lsvListView.GetListCtrl().SetColumnWidth(i, LVSCW_AUTOSIZE_USEHEADER);
      

  4.   

    响应WM_SIZE消息,用ListView类的GetClientRect函数取得视图客户区宽度,减去其它各列的宽度,再GetListCtrl().SetColumnWidth(……)。
      

  5.   

    涉及到最大化事件时首先要响应onsize。你这个问题俺有类似的需求,俺是直接用另一个隐藏的控件实现的。
      

  6.   

    还是比较复杂啊,不能像C++Builder中那个设置最后一列的属性:Autosize=true啊,只能自己计算啊,大家都是这做的话,我也只能这么做了!非常感谢大了,继续看看有没有什么更好的方法!
      

  7.   

    CListCtrl没有提高那样的属性,你是不可能等得到的 :)