可编辑的listcontrol

liulin2025 2012-12-28 03:28:55


可编辑的listCtrl控件失败(没有采用子类化,直接在dialog 中处理)

ON_NOTIFY(NM_CLICK, IDC_LIST1, OnClickList)




CListCtrl m_List;

对话框上方了一个Edit控件



关键代码:
::ShowWindow(::GetDlgItem(m_hWnd,IDC_EDIT1),SW_HIDE);
::SetParent(::GetDlgItem(m_hWnd,IDC_EDIT1),m_List.GetSafeHwnd());



void CMyDlg::OnClickList(NMHDR* pNMHDR, LRESULT* pResult)
{

LPNMITEMACTIVATE temp = (LPNMITEMACTIVATE) pNMHDR;

if( (temp->iItem< 0 )|| (temp->iSubItem<0) )
return ;

CString str = GetItemText(temp->hdr.hwndFrom,temp->iItem ,temp->iSubItem);

RECT rect; //子矩形大小

ListView_GetSubItemRect(temp->hdr.hwndFrom,temp->iItem,temp->iSubItem,LVIR_BOUNDS,&rect);

::MoveWindow(::GetDlgItem(m_hWnd,IDC_EDIT1),rect.left+1,rect.top+1,rect.right-1,rect.bottom-1,TRUE);

::ShowWindow(::GetDlgItem(m_hWnd,IDC_EDIT1),SW_SHOW);

::UpdateWindow(::GetDlgItem(m_hWnd,IDC_EDIT1));

::SetFocus(::GetDlgItem(m_hWnd,IDC_EDIT1));

::SetWindowText(::GetDlgItem(m_hWnd,IDC_EDIT1),str);

*pResult = 0;
}

结果不管用啊 ,失败了,点击某个子项的时候,不能够编辑!



...全文
262 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
这不是鸭头 2012-12-29
  • 打赏
  • 举报
回复
那些自己派生的一般都是 继承的CListCtrl,CEdit这2个类的。主要就是在点中的地方创建一个Edit来实现的。你这代码是移动了一个Edit来实现这个效果的。你这代码是直接写在了dlg那个文件中,还是可以的,只是重用不方便。主要是封装成类。
这不是鸭头 2012-12-29
  • 打赏
  • 举报
回复
引用 12 楼 liulin2025 的回复:
你好,帮忙看看7楼这不是实现了么? ……
LVS_EDITLABELS Allows item text to be edited in place. The parent window must process the LVN_ENDLABELEDIT notification message.
liulin2025 2012-12-29
  • 打赏
  • 举报
回复
引用 11 楼 arpnet99 的回复:
引用 10 楼 liulin2025 的回复:引用 9 楼 arpnet99 的回复:http://www.codeproject.com/Articles/5709/Customized-Report-List-Control-With-In-Place-Combo 上面的弄错了 你好,帮忙看看7楼这不是实现了么?
引用 5 楼 VisualEleven 的回复: 怎么不用LVS_EDITLABELS 如果真如你说,只需要设置一个风格即可搞定,为什么网上会有那多文章介绍,如何是你的list view 具有: 可编辑功能?
这不是鸭头 2012-12-29
  • 打赏
  • 举报
回复
引用 10 楼 liulin2025 的回复:
引用 9 楼 arpnet99 的回复:http://www.codeproject.com/Articles/5709/Customized-Report-List-Control-With-In-Place-Combo 上面的弄错了 你好,帮忙看看7楼
这不是实现了么?
liulin2025 2012-12-29
  • 打赏
  • 举报
回复
引用 9 楼 arpnet99 的回复:
http://www.codeproject.com/Articles/5709/Customized-Report-List-Control-With-In-Place-Combo 上面的弄错了
你好,帮忙看看7楼
这不是鸭头 2012-12-29
  • 打赏
  • 举报
回复
http://www.codeproject.com/Articles/5709/Customized-Report-List-Control-With-In-Place-Combo
也可以先学习一下他人的嘛
liulin2025 2012-12-29
  • 打赏
  • 举报
回复
大佬,问题解决了,根本原因: ::SetParent(::GetDlgItem(m_hWnd,IDC_EDIT1),m_List.GetSafeHwnd()); 改变了父子关系 ::MoveWindow(::GetDlgItem(m_hWnd,IDC_EDIT1),rect.left+1,rect.top+1,rect.right-1,rect.bottom-1,TRUE); 这句代码,自然获得的句柄为NULL.
引用 5 楼 VisualEleven 的回复:
怎么不用LVS_EDITLABELS
如果真如你说,只需要设置一个风格即可搞定,为什么网上会有那多文章介绍,如何是你的list view 具有: 可编辑功能?
bsnry 2012-12-28
  • 打赏
  • 举报
回复
引用 4 楼 VisualEleven 的回复:
void CMyDlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult) { LPNMLISTVIEW pList = reinterpret_cast<NMLISTVIEW*>(pNMHDR); int nItem = pList->iItem; if(-1 != nItem) { int nSubItem =……
笔误: CListCtrl list;这个要去掉, 貌似的你代码和楼主的差不多吧 只不过它的多了Setfocus
Eleven 2012-12-28
  • 打赏
  • 举报
回复
怎么不用LVS_EDITLABELS
Eleven 2012-12-28
  • 打赏
  • 举报
回复
void CMyDlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pList = reinterpret_cast<NMLISTVIEW*>(pNMHDR);
int nItem = pList->iItem;
if(-1 != nItem)
{
int nSubItem = pList->iSubItem;

ASSERT(m_list.GetSafeHwnd());
CRect rc;
m_list.GetSubItemRect(nItem, nSubItem, LVIR_LABEL, rc);
ASSERT(m_edit.GetSafeHwnd());
m_edit.SetWindowText(m_list.GetItemText(nItem, nSubItem));
m_edit.MoveWindow(rc);
}
*pResult = 0;
}
liulin2025 2012-12-28
  • 打赏
  • 举报
回复
引用 2 楼 VisualEleven 的回复:
重写CListCtrl类,在派生类中添加一个CEdit类型对象,创建的时候以CListCtrl为父窗口
晕,我就是想知道, 我强调了: 不子类化, 在 对话框中处理,难道就不行吗? ::SetParent(::GetDlgItem(m_hWnd,IDC_EDIT1),m_List.GetSafeHwnd()); 看到没, 编辑框是list ctrl 的父窗口。
Eleven 2012-12-28
  • 打赏
  • 举报
回复
重写CListCtrl类,在派生类中添加一个CEdit类型对象,创建的时候以CListCtrl为父窗口
liulin2025 2012-12-28
  • 打赏
  • 举报
回复
高手呢

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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