vc中让列表框可编辑
来源:互联网 发布:淘宝哪家手办店好 编辑:程序博客网 时间:2024/05/17 02:45
vc中让列表框可编辑
(2009-03-16 13:03:36)杂谈
分类: VC++技术内幕多功能编辑框的实现
引言:
在运用VC开发数据库管理系统时,列表框无疑是最常用也是最为有用直观的开发控件之一,然而VC所提供的列表框却有其局限,因此,也为运用其开发应用程序带来了一定的麻烦,
在此,本人制作一个功能略强一些的列表框,意在起到引线的作用.
思想:
得到列表框被点击的列与行,临时创建编辑框,并用该行与列的字符填写编辑框,进行编辑后,
用编辑后的字符填充该项行该列,销毁编辑框.
制作过程:
(1)
(2)
(3)
(4)
m_list.InsertColumn(0,"第0列");
//插入列头
CRect rect;
m_list.GetWindowRect(&rect);
int width=(rect.right-rect.left)/4;
m_list.SetColumnWidth(0,width);
m_list.SetColumnWidth(1,width);
m_list.SetColumnWidth(2,width);
m_list.SetColumnWidth(3,width);
//设置列宽
for(int i=0;i<=10;i++){
CString str;
str.Format("第%d行第0列",i);
m_list.InsertItem(i,str);
}
for(int j=0;j<=10;j++){
for(int k=0;k<4;k++)
{
CString str;
str.Format("第行%d第%d列",j,k);
m_list.SetItemText(j,k,str);
}
}
//插入列值
m_list.SetExtendedStyle(WS_CHILD|WS_CLIPSIBLINGS|WS_EX_TOOLWINDOW|WS_BORDER|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);//修改其样式
(5)
(6)
(7)
(8)
CEdit m_edit;//编辑框控件
//m_nitem,m_nsubitem为点击的行号与列号,m_nitem1,m_nsubitem1为前一点点击行号与列
//号
void EndEdit();//自定义的结束编辑函数
(9)打开该类的实现文件,在构造函数中加入下列代码:
(10)编写Edit函数如下:
void CNewListCtrl::Edit()
{
CRect rect;
if(GetSubItemRect(m_nitem,m_nsubitem,LVIR_LABEL,rect)==FALSE)
return;
int sty=WS_CHILD|WS_CLIPSIBLINGS|WS_EX_TOOLWINDOW|WS_BORDER;
//设置编辑框样式
if(m_edit.Create(sty,rect,this,ID_MYEDIT)==FALSE)
//创建编辑框
return;
CString txt=GetItemText(m_nitem,m_nsubitem);
m_edit.SetWindowText(txt);//设置编辑框的内容
m_edit.SetFocus();
m_edit.SetSel(0,-1);
m_edit.ShowWindow(SW_SHOW);//显示编辑框
m_nitem1=m_nitem;
m_nsubitem1=m_nsubitem;
}
(11)编写EndEdit函数如下:
if(m_nitem1!=-1&&m_nsubitem1!=-1)//判断是否为初始时
{
CString txt;
m_edit.GetWindowText(txt);
SetItemText(m_nitem1,m_nsubitem1,txt);//设置为编辑后的文件内容
m_edit.DestroyWindow();
(12)加入左键的点击功能函数:
//{{AFX_MSG(CNewListCtrl)
其次在实现文件中加入消息如下:
BEGIN_MESSAGE_MAP(CNewListCtrl, CListCtrl)
END_MESSAGE_MAP()
最后编写消息函数如下:
void CNewListCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
LVHITTESTINFO testinfo;
testinfo.pt.x=point.x;
testinfo.pt.y=point.y;
testinfo.flags=LVHT_ONITEMLABEL;//强调点击必是标题
if(SubItemHitTest(&testinfo)<0)
return;
m_nitem=testinfo.iItem;//得到行号
m_nsubitem=testinfo.iSubItem;//得到列号
if(m_nitem==m_nitem1&&m_nsubitem==m_nsubitem1)//判断是否是前一点击的行列
return;
else{
Edit();//创建新的编辑框对列表框进行编辑
}
}
至此,完成一个简单的可编辑的列表框的制作,虽然简单,却也是必要的一些实现步骤.
只能自己用浮动的edit.
GetItemRect 可以得到整个一行的rect, GetColumnWidth可以得到column的宽度。
两个函数结合起来可以得到一个cell 的rect。然后搞一个edit在上面
- vc中让列表框可编辑
- 让下拉列表可编辑
- 可编辑下拉列表框
- VC++中可编辑的CListCtrl实现
- 让下拉列表select可编辑的简便方法
- 让下拉列表select可编辑的简便方法 2
- VC/MFC可编辑的列表控件的实现
- MFC列表框实现可编辑功能
- 可编辑列表
- 让DIV可编辑
- 让PLSQL中查询出来的数据可进行编辑
- 可编辑的下拉列表
- 可编辑的列表控件
- select 下拉列表可编辑
- 可编辑的下拉列表
- C# 让ListBox可编辑
- C# 让ListBox可编辑
- 在VC++6.0下构建可直接编辑的列表控件类
- hdoj.1407 测试你是否和LTC水平一样高 20140825
- cocos2d之回调动作、CCSpeed和CCFollow
- 打开子页面的方法以及子页面刷新父页面的方法
- SSH框架 bug记录
- Cocos2d-x 3.0 及以上常用函数
- vc中让列表框可编辑
- android绘制view的过程(自定义view一)
- js实现下拉框根据输入值检索结果
- ScrollView嵌套Scrollview滑动冲突
- HDU 1071 The area
- UpdateLayeredWindow与SetLayeredWindowAttributes
- Qt5 oracle数据库驱动编译
- Java开发之ArrayList 和LinkedList各自的特点是什么
- 程序员创业的十大心得