各位牛人兄弟:  我现在想根据实际情况判断LVCOLUMN 的某一列是否显示:  我现在的做法是:把一列不显示时,其列宽设为0,但是当拖动此列的后面列时,又会把这一列显示出来,又没有办法 只使这一列的宽度不能改变?
或者把这一列真正隐藏掉(不是删掉,因为删掉后有很多的麻烦处理)!

解决方案 »

  1.   

    要自定义控件了。
    做一个CHeaderCtrl的派生类,定义一个隐藏列变量
    分别处理HDN_BEGINTRACK和HDN_ITEMCHANGING通知,发现当前列为隐藏列则跳过系统的消息处理。
      

  2.   

    分别处理HDN_BEGINTRACK和HDN_ITEMCHANGING通知怎么处理,摆脱再说的详细一点!非常感谢!
      

  3.   

    http://blog.joycode.com/jiangsheng/archive/2005/01/07/42514.aspx
      

  4.   

    添加消息映射,用向导就可以实现的。我机器上没有安装VC6
    现在升级到2005了连向导都没有,大概对于界面微软还是主推C#看看下面的东西或许有帮助:
    ============================
        实现代码很简单,Header 控件发送 HDN_XXX 到父窗口(ListCtrl),在 MFC 中可以利用消息反射来处理 Header 控件的通知消息。因为“可锁定栏目头”特性本身更趋向于 Header 控件的属性,而不是 ListCtrl 的属性。如果你不用 MFC ,那么就得处理 ListCtrl 中的通知消息。例子程序使用了消息反射机制,在 Header 控件的消息映射使用 ON_NOTIFY_REFLECT,也就是该写虚拟成员函数 OnChildNotify: BOOL CLockableHeader::OnChildNotify(UINT msg, WPARAM wp, LPARAM lp, LRESULT* pRes)
    {
         NMHDR& nmh = *(NMHDR*)lp;
         if (nmh.code==HDN_BEGINTRACKW || nmg.code==HDN_BEGINTRACKA)
      return *pRes=TRUE;
         ......
    }
        因为 OnChildNotify 是虚函数,所以没有必要具备消息映射入口。只要实现此函数即可。在任何应用中,Header 发送的消息非此即彼,不会两者都发送。不管怎样,所发送的通知消息在到达父窗口之前都会被吃掉。也就是说,消息处理总是返回 TRUE,是否锁定栏目头的宽度通过一个标志来控制:应用程序通过 Lock 来修改标志的值。
    如果锁定了头宽度,那么同时也必须禁用改变宽度的光标,这样用户界面才会有一致性,要实现这一点也很简单: BOOL CLockableHeader::OnSetCursor( CWnd* pWnd, UINT nHit, UINT msg)
    {
         return m_bLocked ? TRUE : CHeaderCtrl::OnSetCursor(pWnd, nHit, msg);
    }      
        如果栏目头被锁定,则 OnSetCursor 返回 TRUE,此时光标不会被重新设置,否则由 Header 控件的进行默认处理。锁定宽度后,当鼠标移到栏目头上时,Windows 显示标准的箭头光标,而不是带左右箭头光标。
        从 CHeaderCtrl 派生类出来的类的使用方法与处理对话框控制一样,通过在父窗口的 OnCreate 的处理例程中进行子类化。实现细节请参考例子源代码:      
    // CMyView is derived from CListView
    int CMyView::OnCreate(LPCREATESTRUCT lpcs)
    {
      VERIFY(CListView::OnCreate(lpcs)==0);
      return m_header.SubclassDlgItem(0,this) ? 0 : -1;
    }
        由于 Header 控制的资源 ID = 0,所以上面的代码是行得通的。为了有一个友好的用户界面,例子程序创建了一个命令菜单和界面更新处理例程。
      

  5.   

    jiangsheng(蒋晟.Net[MVP])    http://blog.joycode.com/jiangsheng/archive/2005/01/07/42514.aspx文章中提到的方法我想过,对于我在实现过程中比较困难,因为我的要求是显示各列的大小和位置可以选择记录下来,如果记录下来,下次启动的时候就要按照记录的来显示,因为各列的位置可以随意移动这样就不能确定下次隐藏列到底显示在什么位置,只有真正可以把要隐藏的列隐藏起来,这个问题才可以真正解决!还是谢谢老兄!