如何锁定list control的宽度,谁可以提供一个例子给我,多谢!

解决方案 »

  1.   

    http://hi.baidu.com/lufa2014/blog/item/0a5c069bbc1017b0c9eaf4fd.html
    看看这个了!
      

  2.   

    锁定CListCtrl的宽度?是指CListCtrl的宽度不变还是指CListCtrl的列宽度不变如果是锁定CListCtrl列宽度的话,可以通过继承CListCtrl实现
    /****************************************CMyListCtrl.h****************************************************/
    #pragma once
    #include "HeaderCtrlEx.h"
    // CMyListCtrlclass CMyListCtrl : public CListCtrl
    {
        DECLARE_DYNAMIC(CMyListCtrl)public:
        CMyListCtrl();
        virtual ~CMyListCtrl();protected:
        DECLARE_MESSAGE_MAP()
        virtual void PreSubclassWindow();public:
        CHeaderCtrlEx m_ctrlHeader;
    };
    /****************************************CMyListCtrl.h****************************************************/
    /****************************************CMyListCtrl.cpp****************************************************/
    //子类化CHeaderCtrlEx
    void CMyListCtrl::PreSubclassWindow()
    {
        // TODO: Add your specialized code here and/or call the base class
        CListCtrl::PreSubclassWindow();
        m_ctrlHeader.SubclassWindow(::GetDlgItem(m_hWnd,0));
    }
    /****************************************CMyListCtrl.cpp****************************************************/
    /****************************************CHeaderCtrl.h****************************************************/
    #pragma once
    // CHeaderCtrlExclass CHeaderCtrlEx : public CHeaderCtrl
    {
        DECLARE_DYNAMIC(CHeaderCtrlEx)public:
        CHeaderCtrlEx();
        virtual ~CHeaderCtrlEx();protected:
        DECLARE_MESSAGE_MAP()
    public:
        virtual BOOL OnChildNotify(UINT msg,WPARAM wp,LPARAM lp,LRESULT* pRes);
    };
    /****************************************CHeaderCtrl.h****************************************************//****************************************CHeaderCtrl.cpp****************************************************/
    //固定列宽
    BOOL CHeaderCtrlEx::OnChildNotify(UINT msg,WPARAM wp,LPARAM lp,LRESULT* pRes)   
    {   
        HD_NOTIFY  *phdn = (HD_NOTIFY*)lp;   
        if((phdn->hdr.code==HDN_BEGINTRACKA||phdn->hdr.code==HDN_BEGINTRACKW)   
            &&(phdn->iItem==0||phdn->iItem==1||phdn->iItem==2))   
        {   
            //禁止列被拖动
             return   *pRes=TRUE;   
        }    return   CHeaderCtrl::OnChildNotify(msg,wp,lp,pRes);   
    }/****************************************CHeaderCtrl.cpp****************************************************/
      

  3.   

    看看这篇文章,有源码的如何锁定 ListView 的栏目头宽度
      

  4.   

    4楼推荐的源码还是不行,当将鼠标放在两栏之间双击时,栏宽还是会改变。谁可推荐一个List Control的例子,多谢!
      

  5.   

    重载,在OnSize里面处理(我没试过,不过应该可以)
      

  6.   


    楼主,写程序要举一反三才行,你应该学习的是例子里的方法上面提供的例子是只限制了拖动HDN_BEGINTRACK消息,只需要再加两行代码就可以限制双击HDN_DIVIDERDBLCLICK消息,限制改变宽度
    BOOL CLockableHeader::OnChildNotify(UINT msg, WPARAM wp, LPARAM lp, LRESULT* pRes)
    {
    NMHDR& nmh = *(NMHDR*)lp;
    if (nmh.code == HDN_BEGINTRACKA || nmh.code == HDN_BEGINTRACKW) {
    if (m_bLocked)
    return *pRes=TRUE; // eat message to disallow sizing
    }
    else if(nmh.code == HDN_DIVIDERDBLCLICKA || nmh.code == HDN_DIVIDERDBLCLICKW)
    {
    if (m_bLocked)
    return *pRes=TRUE; // eat message to disallow sizing
    }

    // otherwise, pass to header control for default processing
    return CHeaderCtrl::OnChildNotify(msg, wp, lp, pRes);
    }
      

  7.   

    [email protected]
    先谢过9楼的朋友。
      

  8.   

    在列插入完了之后,可以用下面两句来固定列宽
    CHeaderCtrl*   pHeaderCtrl   =   (CHeaderCtrl*)m_ListCtrl.GetHeaderCtrl();   
    pHeaderCtrl->EnableWindow(   FALSE   )   ;