重载了一个CListCtrl类对其做如下操作:BOOL CMyList::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
// TODO: 在此添加专用代码和/或调用基类
 HD_NOTIFY *pHDN = (HD_NOTIFY*)lParam; 
if( (HDN_ITEMCHANGINGW == ((NMHDR*)lParam)->code) || (HDN_ITEMCHANGINGA == ((NMHDR*)lParam)->code) )
{
int iWidth = GetColumnWidth(pHDN->iItem);//获得当前操作的列的宽度
//此处,本意是想做如下处理:
//当该列的宽度小于20的时候,就将其设置为20,并且返回TRUE。
//问题----->会报错,貌似死循环了?
if( iWidth < 20 )
{
SetColumnWidth(pHDN->iItem,20);  //这个地方貌似会引起崩溃?死循环了?
return *pResult = TRUE;
}
} return CListCtrl::OnNotify(wParam, lParam, pResult);
}
本意是想在OnNotify这个里面随时对当前列宽的改变进行监控,让其在小于20的时候就不能继续小了,也就是,最小是20的宽度。但是,使用 SetColumnWidth(pHDN->iItem,20) 这句后,会出现报错?那请问,我应该怎么做呢?谢谢!
我就是希望能控制列宽,让其在20以下。

解决方案 »

  1.   

    不要if( (HDN_ITEMCHANGINGW == ((NMHDR*)lParam)->code) || (HDN_ITEMCHANGINGA == ((NMHDR*)lParam)->code) )这么写。
    HDN_ITEMCHANGINGW和HDN_ITEMCHANGINGA这两个值是不一样的。
    写成if(HDN_ITEMCHANGING == ((NMHDR*)lParam)->code))
      

  2.   

    BOOL CMylist::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) 
    {
    HD_NOTIFY *pHDN = (HD_NOTIFY*)lParam; 
        if((pHDN-> hdr.code == HDN_ITEMCHANGINGW||pHDN-> hdr.code   ==   HDN_ITEMCHANGINGA)&& pHDN-> pitem-> cxy < 120) 

    pHDN->pitem->cxy = 120;
    return   TRUE;                                         }  return CListCtrl::OnNotify(wParam, lParam, pResult);}
      

  3.   


    BOOL bRet = FALSE;
    BOOL CMyList::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) 
    {
    // TODO: Add your specialized code here and/or call the base class
    HD_NOTIFY *pHDN = (HD_NOTIFY*)lParam; 
        if(!bRet && (HDN_ITEMCHANGEDA == ((NMHDR*)lParam)->code) || (HDN_ITEMCHANGEDW == ((NMHDR*)lParam)->code) )
        {
            int iWidth = GetColumnWidth(pHDN->iItem);        if( iWidth < 50 )
            {
    SetColumnWidth(pHDN->iItem, 50);
                bRet = TRUE;
    return *pResult = FALSE;
            }
    else
    {
    bRet = FALSE;
    }
        }

        return CListCtrl::OnNotify(wParam, lParam, pResult);
    }