关于CListCtrl的LabelEdit的问题

yvone 2004-10-12 12:25:45
我在Dialog的OnEndlabeleditList1消息响应函数中写了如下代码:

void CDlgLayer::OnEndlabeleditList1(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;

m_List1.SetItemText(pDispInfo->item.iItem,0,pDispInfo->item.pszText);
m_List1.SetItemData(pDispInfo->item.iItem,0);

*pResult = 0;
}

运行结果,当我点击一个item,开始编辑后,如果改变其文字,或者仅仅在编辑框中改变一下光标位置,使光标脱离选中编辑框中全部文字的状态后,再结束编辑,则编辑过的文字显示正常。

而如果开始编辑后通过点击其他地方,直接脱离编辑状态(这时光标处于选中编辑框中全部文字的状态),则刚才编辑过的item的文字直接变成了空串,请问这是为什么?如何解决?

谢谢!
...全文
90 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lixiaosan 2004-10-12
  • 打赏
  • 举报
回复
http://www.codeproject.com/useritems/nirs2000.asp
liuxianzhi 2004-10-12
  • 打赏
  • 举报
回复
参考一下我的代码吧:

void CEditList::OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO *plvDispInfo = (LV_DISPINFO*)pNMHDR;
LV_ITEM *plvItem = &plvDispInfo->item;

if( plvItem->iItem != -1 && // valid item
plvItem->pszText ) // valid text
{
SetItemText( plvItem->iItem, plvItem->iSubItem, plvItem->pszText);

// this will invoke an ItemChanged handler in parent
if ( plvItem->iSubItem != 0 )
{
//char szText[0x10+1];
char szText[0x20+1]; //31
GetItemText( plvItem->iItem, 0, szText, 0x20);
//SetItemText( plvItem->iItem, 0, szText);
CString sText;
char ch;
for(int n=0; n<31; n++)
{
ch = szText[n];
if(ch<0)//汉字
{
if(n<30){
sText += ch;
n++;
sText += szText[n];
}
else{
break;
}
}
else{
sText += ch;
}
}
SetItemText( plvItem->iItem, 0, sText);
}
//New added @2003/09/30
if(m_nChangeWhat==1 &&
m_sEditContents!=plvItem->pszText)
{
SetModify( true );
}
else if(m_nChangeWhat==2 && m_sComboBoxContents!="" &&
m_sComboBoxContents!=plvItem->pszText)
{
SetModify( true );
}
}
//清空这两个变量
m_sEditContents = "";
m_sComboBoxContents = "";

*pResult = 0;
}
property1 2004-10-12
  • 打赏
  • 举报
回复
up

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧