ListControl双击实现可编辑
来源:互联网 发布:餐饮经营数据分析 编辑:程序博客网 时间:2024/04/30 07:06
http://blog.csdn.net/zhenhua10/article/details/5622497
所谓List Contro l,就是用来做LIist的,至于编辑,估计MS也没提供这个功能。比较诡异的是在给List Control 设 置属性的时候居然看到Edit Label ,处于好奇点了点,发现只能修改第一列,改了之后失去焦点又变 回原来的文本。没有深入试下去,我估计可以修改第一列的数据。
其实要实现编辑功能,只要做一个Edit Control 就 可以了,当需要编辑的时候,把这个Edit Control 动态显示到需要显示的地方。看效果图:
双击输入框:
输入完成,点击空白处:
在这里,响应List Control的双击事件:
代码
12 if (editItem.m_hWnd == NULL) // editItem为一输入框控件,
13 {
14 RECT rect;
15 rect.left = 0 ;
16 rect.top = 0 ;
17 rect.bottom = 15 ;
18 rect.right = 200 ;
19 editItem .Create(WS_CHILD | ES_LEFT | WS_BORDER | ES_AUTOHSCROLL | ES_WANTRETURN | ES_MULTILINE, rect, this , 101 );
20 editItem.SetFont( this -> GetFont(), FALSE);
21 }
22 CRect rect;
23 listControl.GetSubItemRect(info.iItem, info.iSubItem, LVIR_BOUNDS, rect);
24 rect.top += 12 ;
25 rect.left += 13 ;
26 rect.right += 13 ;
27 rect.bottom += 12 ;
28
29 editItem.SetWindowText(listControl.GetItemText( info .iItem, info .iSubItem));
30 editItem.MoveWindow( & rect, TRUE);
31 editItem.ShowWindow( 1 );
32 editItem.SetFocus();
33 }
34 * pResult = 0 ;
35 }
1 void CAddInstanceDlg::OnNMDblclkList3(NMHDR * pNMHDR, LRESULT * pResult)
2 {
3 LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast < LPNMITEMACTIVATE > (pNMHDR);
4
5 LVHITTESTINFO info;
6 info.pt = pNMItemActivate -> ptAction;
7
8 if (listControl.SubItemHitTest( & info) != - 1 )
9 {
10 hitRow = info.iItem;
11 hitCol = info.iSubItem;
2 {
3 LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast < LPNMITEMACTIVATE > (pNMHDR);
4
5 LVHITTESTINFO info;
6 info.pt = pNMItemActivate -> ptAction;
7
8 if (listControl.SubItemHitTest( & info) != - 1 )
9 {
10 hitRow = info.iItem;
11 hitCol = info.iSubItem;
12 if (editItem.m_hWnd == NULL) // editItem为一输入框控件,
13 {
14 RECT rect;
15 rect.left = 0 ;
16 rect.top = 0 ;
17 rect.bottom = 15 ;
18 rect.right = 200 ;
19 editItem .Create(WS_CHILD | ES_LEFT | WS_BORDER | ES_AUTOHSCROLL | ES_WANTRETURN | ES_MULTILINE, rect, this , 101 );
20 editItem.SetFont( this -> GetFont(), FALSE);
21 }
22 CRect rect;
23 listControl.GetSubItemRect(info.iItem, info.iSubItem, LVIR_BOUNDS, rect);
24 rect.top += 12 ;
25 rect.left += 13 ;
26 rect.right += 13 ;
27 rect.bottom += 12 ;
28
29 editItem.SetWindowText(listControl.GetItemText( info .iItem, info .iSubItem));
30 editItem.MoveWindow( & rect, TRUE);
31 editItem.ShowWindow( 1 );
32 editItem.SetFocus();
33 }
34 * pResult = 0 ;
35 }
这里比较诡异的是我用Visual Studio 2008自动生成的事件响应函数的第一行居然出错,google之后第一个就是微软关于这个自动生成代码错误的修正。
在这个代码里面先得到鼠标双击的位置,判断是否击中了单元格,击中就调用Edit Control ,大小就是选中的单元 格,至于为什么rect要+12啊+13什么的,那是因为他出来的输入框跟单元格没对齐,导致很丑。最后再给这个Edit Control 一 个焦点,就可以直接输入了。
另外,为了能使输入之后有所反应,我们还要做一个鼠标的单击事件响应函数。
代码
1 void CAddInstanceDlg::OnNMClickList3(NMHDR * pNMHDR, LRESULT * pResult)
2 {
3 LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast < LPNMITEMACTIVATE > (pNMHDR);
4
5 if (editItem.m_hWnd != NULL)
6 {
7 editItem.ShowWindow( 0 );
8 if (hitRow != - 1 )
9 {
10 CString text;
11 editItem.GetWindowText(text);
12 listControl.SetItemText(hitRow, hitCol, text);
13 }
14 }
15 hitCol = hitRow = - 1 ;
16 * pResult = 0 ;
17 }
2 {
3 LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast < LPNMITEMACTIVATE > (pNMHDR);
4
5 if (editItem.m_hWnd != NULL)
6 {
7 editItem.ShowWindow( 0 );
8 if (hitRow != - 1 )
9 {
10 CString text;
11 editItem.GetWindowText(text);
12 listControl.SetItemText(hitRow, hitCol, text);
13 }
14 }
15 hitCol = hitRow = - 1 ;
16 * pResult = 0 ;
17 }
- ListControl双击实现可编辑
- ListControl双击实现可编辑
- ListControl双击实现可编辑
- 双击listcontrol 可编辑
- ListControl双击实现可编辑 2010-11-16 11:40
- 双击文本实现可编辑
- 双击文本实现可编辑
- 双击文本实现可编辑
- 使listcontrol可编辑
- 实现JTree双击节点的可编辑
- VC 双击编辑ListControl中的数据
- 双击div变成可编辑区的简单实现
- JS实现双击内容变为可编辑状态
- JS实现双击内容变为可编辑状态
- 双击实现文字编辑
- 双击单元格变成可编辑的文本框
- 双击单元格变成可编辑的文本框
- jquery实现双击编辑表格
- History(历史)命令用法 15 例
- 移动互联网,政府服务怎么做?
- 解决MDKv4.7x的调试bug,让v2.0x固件的ulink2支持MDK 4.54
- https://www.cocoacontrols.com/
- OpenCV/FreeImage/CImg/CxImage
- ListControl双击实现可编辑
- C++图书推荐
- HashMap工作原理
- C++类的私有成员变量和函数的隐藏
- ubuntu 下安装和卸载软件
- B/S架构的优点和缺点
- 如何在windows2008 iis7取消目录执行权限技巧
- 如何用scoket发送结构体
- 半监督学习【领域简介】