mfc的listctrl类型的数据无法保存

由该函数(双击列表中某项)在listctrl中生成的数据无法进行保存 保存之后再刷新就消失了

void CDataExtractionView::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
    POSITION pos = m_listCtrlRight.GetFirstSelectedItemPosition();
    TCHAR szBuf[100];
    LVITEM lvi;
    lvi.pszText = szBuf; // 存放item的文本内容
    lvi.iItem = -1;         // 索引下标
    lvi.iSubItem = 0;
    lvi.mask = LVIF_TEXT;
    lvi.cchTextMax = 1024;
    if (pos == NULL)
    {
           CString str;
           for (int i = 0; i < m_listCtrlLeft.GetItemCount(); i++)
           {
             if (LVIS_SELECTED == m_listCtrlLeft.GetItemState(i, LVIS_SELECTED))
             {
                lvi.iItem = i;
                m_listCtrlLeft.GetItem(&lvi);
                if (m_flag)
            {
                int nHeadNum = m_listCtrlRight.GetItemCount();
                m_listCtrlRight.InsertItem(nHeadNum, szBuf);
                m_listCtrlRight.SetItemText(nHeadNum, 1, m_listCtrlLeft.GetItemText(i, 1));
            }
            m_flag = TRUE;
             }
           }
           return;
    }
    else
    {
    while (pos)
    {
        
        int nId = m_listCtrlRight.GetNextSelectedItem(pos);
        CString str;
        for (int a = 0; a < m_listCtrlLeft.GetItemCount(); a++)
        {
            if (LVIS_SELECTED == m_listCtrlLeft.GetItemState(a, LVIS_SELECTED))
            {
                lvi.iItem = a;
                m_listCtrlLeft.GetItem(&lvi);
                if (m_flag)
                {
                    nId++;
                    m_listCtrlRight.InsertItem(nId, szBuf);
                    m_listCtrlRight.SetItemText(nId, 1, m_listCtrlLeft.GetItemText(a, 1));
                }
                m_flag = TRUE;
            }
        this->m_listCtrlRight.SetItemState(a, 0,-1);
        }
    }
    }
    *pResult = 0;
}

你的意思是自己双击单元格输入进去的内容没保存在list中?

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/191709
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:MFC中的ListCtrl控件中每个单元格宽度自适应
  • 除此之外, 这篇博客: 设置MFC中的ListCtrl控件的列宽固定不可变中的 设置MFC中的ListCtrl控件的列宽固定不可变 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 通过重写虚函数OnNotify实现,OnNotify函数是CListCtrl类中的虚函数,通过重载该函数,来修改ListCtrl控件的一些属性。

    具体方法:
    在控件对应的 .cpp文件中:
    //禁止控件列宽可变
    BOOL XXXXXXX::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
    {
    HD_NOTIFY pHDN = (HD_NOTIFY)lParam;
    switch(((NMHDR*)lParam)->code)
    {
    case HDN_BEGINTRACKW://拖动
    case HDN_BEGINTRACKA:
    if (pHDN->iItem == Col) // Col—设定为自己不想改变的列值,比如Col=0,就是第1列
    {
    *pResult = TRUE;
    return TRUE;
    }
    break;
    }
    return XXXXXXX::OnNotify(wParam, lParam, pResult); //注意这里
    }
    至此,我们的ListCtrl控件的列宽便是固定不可变的了。(注意:OnNotify函数不需要我们去调用,会自动调用)