使用ListCtrl创建了一个列表,我希望能在列表上直接编辑数据,请问如何才能办到?谢谢。
解决方案 »
- 收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 怎样才能在VC中使拆分窗口(如基于对话框的拆分窗体)右上角具有象关闭窗口时右上角使用的叉叉按钮
- ListView控件中或者其他类似listview的控件中,怎样去嵌入按钮,从而可以操作?
- 侯捷最近两年怎么没有消息了
- 大家进来讨论一个微软的数字签名技术(这么多分,应该有人感兴趣吧,希望微软的技术专家进来看看)
- CTreeCtrl中能不能分列来显示不同信息?
- HOOK OF COM (1)最近写COM程序,看到这个,翻译了以下,有错在所难免,欢迎指教(使用最新的MSDN 在VC6.0中)
- CDialog里OK,Cancel,Apply,Help按钮Caption名称能随系统变动自动获得吗?
- 为什么CreateProcess和LoadLibrary都失败
- vc中用什么控件来显示声音的波形
- 求助:怎么改变 win32 内核的一个文件,使任务栏不显示,谢谢!
- 有关结束线程的问题
- 求救:通过HTTP代理服务器提交文件
http://www.codeproject.com/listctrl/xlistctrl.asp
如果是,在ListView中加入风格LVS_EDITLABELS
然后处理LVN_BEGINLABELEDIT 和LVN_ENDLABELEDIT
在TreeView中就是这样用的
下面是我的代码,可以实现,我刚刚测试过
注,我用了LVS_REPORT风格
void CListViewView::OnBeginlabeledit(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
// TODO: Add your control notification handler code here GetListCtrl().GetEditControl()->LimitText(20); //设置文本最大长度 *pResult = 0;
}void CListViewView::OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
// TODO: Add your control notification handler code here //** Get the modified text from the edit control
CString strText;
GetListCtrl().GetEditControl()->GetWindowText(strText); //获取当前文本 //** Might do some text validation here //** Check string isn't empty
if (strText.GetLength() > 0)
{
//** Get the selected item handle
int hSelected = pDispInfo->item.iItem;
int hSelected1 = pDispInfo->item.iSubItem;
//** Set the modified text
GetListCtrl().SetItemText(hSelected, hSelected1, strText); //设置后来文本
}
*pResult = 0;
}
m_list.SetExtendedStyle(m_list.GetExtendedStyle()|LVS_EX_GRIDLINES|LVS_EX_ONECLICKACTIVATE|LVS_EDITLABELS);
void CLabTestDlg::OnBeginlabeleditList(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
m_list.GetEditControl()->LimitText(20);
*pResult = 0;
}
void CLabTestDlg::OnEndlabeleditList(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
//** Get the modified text from the edit control
CString strText;
m_list.GetEditControl()->GetWindowText(strText); //获取当前文本 //** Might do some text validation here //** Check string isn't empty
if (strText.GetLength() > 0)
{
//** Get the selected item handle
int hSelected = pDispInfo->item.iItem;
int hSelected1 = pDispInfo->item.iSubItem;
//** Set the modified text
strText="dsaf";
m_list.SetItemText(hSelected, hSelected1, strText); //设置后来文本
}
*pResult = 0;
}
//** Get the current style flags
DWORD dwStyle = GetWindowLong(GetListCtrl().GetSafeHwnd(), GWL_STYLE); //** Remove the current style flags
dwStyle &=~LVS_TYPEMASK; //** Add the List style
dwStyle |= LVS_REPORT + LVS_EDITLABELS; //Set it back into the list view
SetWindowLong(GetListCtrl().GetSafeHwnd(), GWL_STYLE, dwStyle);
SetRedraw(TRUE);另外:(1)OnBeginlabeleditList就是开始编辑,就是你单击选定条目,变成可编辑状态调用的
(2)OnEndlabeleditList结束编辑,你跟踪的是后可以看到,当修改后回车,就会进入到该函数中