关于MFC中CListCtrl 编辑某项的显示字符 的菜鸟问题
来源:百度知道 编辑:UC知道 时间:2024/06/03 12:26:14
//处理消息 LVN_BEGINLABELEDITvoid CParentWnd::OnBeginEditList(NMHDR* pNMHDR, LRESULT* pResult){ LV_DISPINFO* pLVDI = (LV_DISPINFO*)pNMHDR; if(pLVDI->item.iItem==0);//判断是否取消该操作 *pResult = 1; else *pResult = 0;}//处理消息 LVN_BEGINLABELEDITvoid CParentWnd::OnBeginEditList(NMHDR* pNMHDR, LRESULT* pResult){ LV_DISPINFO* pLVDI = (LV_DISPINFO*)pNMHDR; if(pLVDI->item.pszText==NULL);//判断是否已经取消取消编辑 m_list.SetItemText(pLVDI->item.iItem,0,pLVDI->pszText);//重置显示字符 *pResult = 0;}
以上是一个教程的片段 我根本看不懂 什么叫做编辑某项 而且前面要选入一个标记“LVS_EDITLABELS”
而且我查了MSND 关于LV_DISPINFO结构 根本没有pszText这一项 那上面那个教程的最后那个“pLVDI->pszText”不是误人子弟吗? 根本是错的啊
高手指教 我会追加分的 帮我分析下
MSDN上关于 LVS_EDITLABELS 说明如下:
Item text can be edited in place. The parent window must process the LVN_ENDLABELEDIT notification message.
项目文字可以被修改,父窗口必须处理消息LVN_ENDLABELEDIT
关于LVN_BEGINLABELEDIT说明如下:
This message notifies a list-view control parent window about the start of label editing for an item. It is sent in the form of a WM_NOTIFY message.
这个消息通知被修改的项目的起始编号, 它以WM_NOTIFY的形式被发送
先解释一下教程:
在OnBeginEditList中先判断ListCtrl中要修改的的Item个数,如果为0则设置*pResult为了1, 表示不修改, 如果不为0 则设置*pResult为0,表示进行修改
第二个OnBeginEditList是不是笔误, 应为OnEndlabeleditList, 功能为如果没有修改,将文字还原,即你单击一下某个选项,进入编辑状态,但是你没有输入,又单击了别的地方,此时将由于编辑状态清除的文字还原.
加标记LVS_EDITLABELS就是在ListCtrl中勾选edit labels属性
至于pLVDI->pszTex, 是教程笔误,应为pLVDI->item.pszText,即用该item原来的文字替换显示
关于更详细的CListCtrl的用法可以参考一下这里:
http://blog.csdn.net/bwmwm/archive