多语言展示
当前在线:1667今日阅读:26今日分享:39

VC/MFC 如何使列表控件(CListCtrl)可编辑

我们在使用VC进行列表控编程中,常常需要在用户点击列表控件中某个单元格时,对单元格内容进行修改,就像EXCEL一样。那么,这个功能如何实现呢?大概过程如下:在对话框加入列表控件、要显示在列表中的控件(比如CComboBox控件,这个控件初始设置为影藏)、然后在列表控件的单击事件中将编辑控件显示在单元格中。具体方法如下:
工具/原料
1

电脑一台

2

vc++ 6.0或者更高版本

方法/步骤
1

一、新建一个基于对话框的工程文件,在对话框中添加ListCtrl控件,设置控件属性为报告,如下图:

2

二、在对话框中为列表控件添加变量:如下图:

3

三、在对话框的OnInitDialog初始化函数中添加如下代码(对列表控件进行初始化):m_lstcoudata.InsertColumn(0,'课程名称',LVCFMT_CENTER,100); m_lstcoudata.InsertColumn(1,'是否主科',LVCFMT_CENTER,100); m_lstcoudata.InsertColumn(2,'周课时',LVCFMT_CENTER,100); m_lstcoudata.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);m_lstcoudata.SetBkColor(RGB(172,199,235)); m_lstcoudata.SetRowHeigt(40); m_lstcoudata.SetFontHW(15,10); GRADE *pgrd=CArrangeCourseApp::Adu .GetGrdPointer()->pnext; for(int n=0;n<10;n++)   m_lstcoudata.InsertItem(n,'');   //ect rc;  m_lstcoudata.GetClientRect(&rc);  m_lstcoudata.SetColumnWidth(0,rc.Width()/2);  m_lstcoudata.SetColumnWidth(1,rc.Width()/4);  m_lstcoudata.SetColumnWidth(2,rc.Width()/4);

4

四、下面我们要在鼠标对列表控件的单击事件中,将需要显示的控件移动到鼠标单击的单元格中。代码如下:NM_LISTVIEW* pNMListView=(NM_LISTVIEW*)pNMHDR;        CRect rc;        if(pNMListView->iItem==-1)return;        m_row=pNMListView->iItem;//m_row为被选中行的行序号(int类型成员变量)    m_column=pNMListView->iSubItem;//m_column为被选中行的列序号(int类型成员变量) if(m_column!=2)return; //if(m_column<0)return;        UpdateData(TRUE);    m_lstcoudata.GetSubItemRect(pNMListView->iItem, pNMListView->iSubItem,LVIR_LABEL,rc);//取得子项的矩   rc.left+=150;   rc.right+=150;   rc.bottom+=100;   m_cmbcnt.ShowWindow(SW_SHOW);           m_cmbcnt.MoveWindow(&rc);           m_cmbcnt.SetFocus(); *pResult = 0;

5

五、(注意)要显示的控件和列表控件的ID号必须相连,并且列表ID大于显示控件ID,处理方法为:在对话框中依次按下“CTRL+D”组合键,如图:按照顺序依次点击相应控件重新对控件进行排序。

6

六、编译、调试,弹出窗口如下图:

7

七、点击单元格,弹出要显示的控件,如下图:

注意事项

(注意)要显示的控件和列表控件的ID号必须相连,并且列表ID大于显示控件ID,处理方法请参考第五步

推荐信息