QQ登录

只需一步,快速开始

上位机MFC可编辑的列表控件

[ 复制链接 ]
效果演示 2019-07-10_200202.jpg
当前例程实现一种网格效果的列表视控件,双击选项可编辑,效果如上图。



实现过程
也是建立自己的项目工程,这里建立基于对话框的。添加列表控件。
2。复制两文件GRIDLISTCTRL.H,GRIDLISTCTRL.CPP,导入工程,这样就可以使用类CGridListCtrl。
包含头文件,将列表控件与类关联。注意列表控件属性设置为报表形式。
然后就初始化列表控件,添加行与列。
  1. m_GridListCtrl.PrepareControl(0);
  2.         TCHAR rgtsz[4][10] = {_T("Column 1"), _T("Column 2"), _T("Column 3"), _T("Column 4")};
  3.        
  4.         LV_ITEM                        lvitem;
  5.         LV_COLUMN                lvcolumn;
  6.         CRect rect;
  7.         m_GridListCtrl.GetWindowRect( &rect );
  8.        
  9.         // Insert Image Lists
  10.         m_pImageList = new CImageList();
  11.         m_pImageList->Create( IDB_BITMAP1, 16, 1, RGB(255,255,255) );
  12.         m_GridListCtrl.SetImageList( m_pImageList, LVSIL_SMALL );
  13.        
  14.         // Insert columns using the order field
  15.         int i;
  16.         for(i = 0; i < 4; i++)  
  17.         {
  18.                 lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH | LVCF_ORDER;
  19.                 lvcolumn.fmt = LVCFMT_LEFT;
  20.                 lvcolumn.pszText = rgtsz[i];
  21.                 lvcolumn.iSubItem = i;
  22.                 lvcolumn.iOrder = i;
  23.                 lvcolumn.cx = rect.Width() / 4;  
  24.                 m_GridListCtrl.InsertColumn(i, &lvcolumn);  
  25.         }
  26.        
  27.         int iItem, iSubItem, iActualItem;
  28.         TCHAR buffer[30];
  29.        
  30.         for (iItem = 0; iItem < 50; iItem++)  // will now insert the items and subitems into the list view.
  31.                 for (iSubItem = 0; iSubItem < 4; iSubItem++)
  32.                 {
  33.                         lvitem.mask = LVIF_TEXT | (iSubItem == 0? LVIF_IMAGE : 0);
  34.                         lvitem.iItem = (iSubItem == 0)? iItem : iActualItem;
  35.                         lvitem.iSubItem = iSubItem;
  36.                         lvitem.iImage = (iItem%2)?0:2;
  37.                         sprintf( buffer, "Cell( %d, %d )", iItem+1, iSubItem+1);
  38.                         lvitem.pszText = buffer;
  39.                        
  40.                         if (iSubItem == 0)
  41.                                 iActualItem = m_GridListCtrl.InsertItem(&lvitem);
  42.                         else
  43.                                 m_GridListCtrl.SetItem(&lvitem);
  44.                 }
复制代码
初始化时使用了一资源ID,IDB_BITMAP1用于列表行图标,
还有一个变量        CImageList *m_pImageList;用于管理这些图标。
添加了这些后,就可以成功编译,运行可以查看效果。
但双击列表选项,并没有进行编辑状态。通过下面进行实现

3.复制两文件INPLACEEDIT.H,INPLACEEDIT.CPP,并导入工程。
在主对话框包含头文件且添加变量
#include "InPlaceEdit.h"
CInPlaceEdit *m_pListEdit;
在对话框类中添加列表控件的LVN_ENDLABELEDIT,LVN_BEGINLABELEDIT消息处理函数。
  1. void CCTestDlg::OnEndlabeleditList2(NMHDR* pNMHDR, LRESULT* pResult)
  2. {
  3.         LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
  4.         // TODO: Add your control notification handler code here
  5.         int item = pDispInfo->item.iItem;
  6.         int subitem = pDispInfo->item.iSubItem;
  7.         // This is coming from the grid list control notification.
  8.         if( m_pListEdit )
  9.         {
  10.                 CString str;
  11.                 if( pDispInfo->item.pszText )
  12.                         m_GridListCtrl.SetItemText( item, subitem, pDispInfo->item.pszText );
  13.                 delete m_pListEdit;
  14.                 m_pListEdit = 0;
  15.         }
  16.         *pResult = 0;
  17. }

  18. void CCTestDlg::OnBeginlabeleditList2(NMHDR* pNMHDR, LRESULT* pResult)
  19. {
  20.         LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;

  21.         CString str = pDispInfo->item.pszText;
  22.         int item = pDispInfo->item.iItem;
  23.         int subitem = pDispInfo->item.iSubItem;
  24.         // Construct and create the custom multiline edit control.
  25.         // We could just as well have used a combobox, checkbox,
  26.         // rich text control, etc.
  27.         m_pListEdit = new CInPlaceEdit( item, subitem, str );
  28.         // Start with a small rectangle.  We'll change it later.
  29.         CRect  rect( 0,0,1,1 );
  30.         DWORD dwStyle = ES_LEFT;
  31.         dwStyle |= WS_BORDER|WS_CHILD|WS_VISIBLE|ES_MULTILINE|ES_AUTOVSCROLL;
  32.         m_pListEdit->Create( dwStyle, rect, &m_GridListCtrl, 103 );
  33.         // Have the Grid position and size the custom edit control
  34.         m_GridListCtrl.PositionControl( m_pListEdit, item, subitem );
  35.         // Have the edit box size itself to its content.
  36.         m_pListEdit->CalculateSize();
  37.         // Return TRUE so that the list control will hnadle NOT edit label itself.
  38.         *pResult = 1;
  39. }
复制代码


4.。这样就可以编译运行例程,选中单一选项后,再点击可以编译选中的单项。
下载地址:
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:CTest.rar 
文件大小:42.02 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我



回复

使用道具 举报

快速回复 返回列表 客服中心 搜索