MFC--CListCtrl控件

关注微信公众号“二进制小站”~~获取更多分析~~(文末二维码~~)

文章转自:http://jingyan.baidu.com/article/e75057f2f438f8ebc91a89a7.html

我们在使用VC进行列表控编程中,常常需要在用户点击列表控件中某个单元格时,对单元格内容进行修改,就像EXCEL一样。那么,这个功能如何实现呢?

大概过程如下:在对话框加入列表控件、要显示在列表中的控件(比如CComboBox控件,这个控件初始设置为影藏)、然后在列表控件的单击事件中将编辑控件显示在单元格中。具体方法如下:

 

 

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

 

 

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

 

 

  1. 三、在对话框的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);

  2. 四、下面我们要在鼠标对列表控件的单击事件中,将需要显示的控件移动到鼠标单击的单元格中。代码如下:

    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;

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

 

 

 

 

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

 

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值