CXListCtrl的编辑框无法删除文本

来源:互联网 发布:mt4软件开发 编辑:程序博客网 时间:2024/06/05 22:30

codeproject上有个CXListCtrl,非常好用。

链接:http://www.codeproject.com/Articles/1796/XListCtrl-A-custom-draw-list-control-with-subitem

在使用其编辑框的时候,发现删除功能不起作用,即当删除一个编辑框的内容的时候,它会自动恢复成之前的文本。不清楚作者该设计的意图。

相关的代码如下:

///////////////////////////////////////////////////////////////////////////////// OnXEditKillFocusLRESULT CXListCtrl::OnXEditKillFocus(WPARAM, LPARAM){    XLISTCTRL_TRACE(_T("in CXListCtrl::OnXEditKillFocus\n"));    CString str = _T("");    if (m_pEdit && ::IsWindow(m_pEdit->m_hWnd))    {        m_pEdit->GetWindowText(str);        if (str.IsEmpty())        {            // restore original string            //str = m_strInitialString;         }        m_pEdit->DestroyWindow();        delete m_pEdit;    }    m_pEdit = NULL;    // set new string in subitem    SetItemText(m_nEditItem, m_nEditSubItem, str);    if (str != m_strInitialString)    {        XLISTCTRL_TRACE(_T("m_strInitialString=<%s>\n"), m_strInitialString);        // string is not the same, mark item as modified        XLISTCTRLDATA *pXLCD = (XLISTCTRLDATA *) CListCtrl::GetItemData(m_nEditItem);        if (pXLCD)        {            pXLCD[m_nEditSubItem].bModified = TRUE;            m_bListModified = TRUE;        }    }    XLISTCTRL_TRACE(_T("current text=<%s>\n"), str);    UpdateSubItem(m_nEditItem, m_nEditSubItem);    CWnd *pWnd = GetParent();    if (!pWnd)        pWnd = GetOwner();    if (pWnd && ::IsWindow(pWnd->m_hWnd))        pWnd->SendMessage(WM_XLISTCTRL_EDIT_END,                          m_nEditItem, m_nEditSubItem);    return 0;}

为了实现删除功能,可以注释掉 if (str.IsEmpty())这个语句块,或者注释掉str=这一行。

    if (m_pEdit && ::IsWindow(m_pEdit->m_hWnd))    {        m_pEdit->GetWindowText(str);        if (str.IsEmpty())        {            // restore original string            //str = m_strInitialString;         }        m_pEdit->DestroyWindow();        delete m_pEdit;    }


另外就是SetEdit()的一个修改:——原来是可以设置某个单元格是编辑框,但一旦设置之后就不能取消了。



0 0