由该函数(双击列表中某项)在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中?
通过重写虚函数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函数不需要我们去调用,会自动调用)