我想在ListCtrl里面添加一列,这样的一列实际是存在的,但是用户实际是看不到的,
能否做到?

解决方案 »

  1.   

    不能,但你可以通过SetItemData和GetItemData额外保存你必要的数据
      

  2.   

    呵呵,我刚刚完成这样一个CListCtrl。
      

  3.   

    可以做到,把该列的长度设置为 0 就可以。
    ========================================这个办法不错,不过要小心“非法”用户的拖拉操作哦,呵呵。happyparrot(为何我买彩票从来不中奖?没钱怎么办阿?) 
    ---------------------------------------------------
    你是怎么做到的?能否谈一下原理?
      

  4.   

    原理比较简单阿。一是要将长度设置为0
    二是要派生CHeaderCtrl子类,在子类中响应OnChildNotify消息,截获鼠标拖拉修改宽度的事件,将这些事件屏蔽就OK了。样例代码://锁定第一列
    BOOL CSortHeaderCtrl::OnChildNotify(UINT msg, WPARAM wp, LPARAM lp, LRESULT* pRes)
    {
    NMHDR& nmh = *(NMHDR*)lp;
    if (nmh.code == HDN_BEGINTRACKA || nmh.code == HDN_BEGINTRACKW
    ||nmh.code == HDN_DIVIDERDBLCLICKA ||nmh.code == HDN_DIVIDERDBLCLICKW) 
    {
    CRect rc;
    GetItemRect(0,rc);
    CPoint pt;
    GetCursorPos(&pt);
    ScreenToClient(&pt);
    if(pt.x < rc.Width() + 5)
    return *pRes=TRUE; // eat message to disallow sizing
    }
    // otherwise, pass to header control for default processing
    return CHeaderCtrl::OnChildNotify(msg, wp, lp, pRes);
    }
      

  5.   

    OnChildNotify 是什么消息事件?
      

  6.   

    参考:http://www.vckbase.com/document/viewdoc/?id=675
      

  7.   

    是不是要放一些数据,比如ID之类的
    干吗不用SetItemData