List Control控件

显示方式

属性【View】选择成【Report】。

添加成员变量

绑定变量:m_listCtrl

设置值

  1. // 表头添加
  2. m_listCtrl.SetExtendedStyle( LVS_EX_FULLROWSELECT);
  3. m_listCtrl.InsertColumn( 0, _T("网站来源"),LVCFMT_LEFT,85);
  4. m_listCtrl.InsertColumn( 1, _T("产品"),LVCFMT_LEFT,110);
  5. m_listCtrl.InsertColumn( 2, _T("价格"),LVCFMT_LEFT,80);
  6. // 插入值
  7. int iLine = m_listCtrl.GetItemCount(); // 列表的里面的条目数量, 横着的行
  8. m_listCtrl.InsertItem( iLine,_T("SOHU")); // 第一行第一列
  9. m_listCtrl.SetItemText( iLine, 1,_T("IPHONE") ); // 第一行第二列
  10. m_listCtrl.SetItemText( iLine, 2,_T("5000") ); // 第一行第三列
  11. // 最末行添加数据
  12. iLine = m_listCtrl.GetItemCount();
  13. m_listCtrl.InsertItem( iLine,_T("TAOBAO")); // 第二行第一列
  14. m_listCtrl.SetItemText( iLine, 1,_T("奔驰") ); // 第二行第二列
  15. m_listCtrl.SetItemText( iLine, 2,_T("500000") ); // 第二行第三列
  16. iLine = m_listCtrl.GetItemCount();
  17. m_listCtrl.InsertItem( iLine,_T("GOOGLE")); // 第三行第一列
  18. m_listCtrl.SetItemText( iLine, 1,_T("宝马") ); // 第三行第二列
  19. m_listCtrl.SetItemText( iLine, 2,_T("600000") ); // 第三行第三列

清空所有值

  1. //清空列表记录
  2. while(m_listCtrl.DeleteItem(0));

刷新功能

  • 删除所有值
  • 初始化所有值

菜单消息处理

NM_CLICK 左键处理

  1. void CmyfirstmfcDlg::OnNMClickListInfo(NMHDR *pNMHDR, LRESULT *pResult)
  2. {
  3. int istat=m_listCtrl.GetSelectionMark(); //用istat存放当前选定的是第几项
  4. CString szSite = m_listCtrl.GetItemText(istat,0); //获取当前项中的数据,0代表是第0列
  5. CString szProduct = m_listCtrl.GetItemText(istat,1); // 第一列
  6. CString szValue = m_listCtrl.GetItemText(istat,2); // 第二列
  7. UINT iValue = _ttol(m_listCtrl.GetItemText(istat,2));
  8. MessageBox(szSite,szProduct+szValue,MB_OK);
  9. *pResult = 0;
  10. }

NM_RCLICK 右键处理

IDR_MENU_TOPICR 是插入的菜单选项,菜单项是【购买】、【删除】

  1. void CmyfirstmfcDlg::OnNMRClickListInfo(NMHDR *pNMHDR, LRESULT *pResult)
  2. {
  3. // m_istat、m_szSite、m_szSite、m_szProduct、m_szValue、m_iValue是类中的数据成员,传递数据用
  4. m_istat=m_listCtrl.GetSelectionMark(); //用istat存放当前选定的是第几项
  5. m_szSite = m_listCtrl.GetItemText(m_istat,0);//获取当前项中的数据,0代表是第0列
  6. m_szProduct = m_listCtrl.GetItemText(m_istat,1);
  7. m_szValue = m_listCtrl.GetItemText(m_istat,2);
  8. m_iValue = _ttol(m_listCtrl.GetItemText(m_istat,2));
  9. POINT point;
  10. HMENU hMenu, hSubMenu;
  11. GetCursorPos(&point); //鼠标位置
  12. hMenu = LoadMenu(NULL,
  13. MAKEINTRESOURCE(IDR_MENU_TOPICR)); // 加载菜单
  14. hSubMenu = GetSubMenu(hMenu, 0); //得到子菜单(因为弹出式菜单是子菜单)
  15. SetMenuDefaultItem(hSubMenu, -1, FALSE);//设置缺省菜单项,-1为无缺省项
  16. SetForegroundWindow(); // 激活窗口并置前
  17. TrackPopupMenu(hSubMenu, 0,
  18. point.x, point.y, 0, m_hWnd, NULL);
  19. *pResult = 0;
  20. }

排序

类.h文件中定义两个静态变量

  1. static DWORD m_SortColum;
  2. static BOOL m_bAs;

myfirstmfcDlg.cpp初始化

  1. DWORD CmyfirstmfcDlg::m_SortColum = 0;
  2. BOOL CmyfirstmfcDlg::m_bAs = TRUE;

类.h文件中声明回调函数

  1. static int CALLBACK MyListCompar(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);

代码实现部分

  1. int CALLBACK CmyfirstmfcDlg::MyListCompar(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
  2. {
  3. //通过传递的参数来得到CSortList对象指针,从而得到排序方式
  4. CListCtrl* pListCtrl = (CListCtrl*) lParamSort;
  5. //通过ItemData来确定数据
  6. int iCompRes;
  7. CString szComp1 = pListCtrl->GetItemText(lParam1,m_SortColum);
  8. CString szComp2 = pListCtrl->GetItemText(lParam2,m_SortColum);
  9. switch (m_SortColum)
  10. {
  11. // 这里是要修改的部分,要根据有整数的列进行排序。2是代表第三列为整数
  12. case(2): {
  13. //以第一列为根据排序 编号
  14. //_ttol
  15. iCompRes = _ttol(szComp1) <= _ttol(szComp2) ? -1 : 1;
  16. break;
  17. }
  18. default:
  19. iCompRes=szComp1.Compare(szComp2);
  20. break;
  21. }
  22. //根据当前的排序方式进行调整
  23. if(m_bAs)
  24. return iCompRes;
  25. else
  26. return -iCompRes;
  27. }

添加消息LVN_COLUMNCLICK(单击某一列触发),实现代码如下:


  1. void CMFC03CListCtrlDlg::OnLvnColumnclickList1(NMHDR *pNMHDR, LRESULT *pResult)
  2. {
  3. LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
  4. NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
  5. m_SortColum = pNMListView->iSubItem;
  6. m_bAs = !m_bAs;//升序还是降序
  7. int count = m_listCtrl.GetItemCount(); //行数
  8. for (int i = 0; i < count; i++)
  9. {
  10. m_listCtrl.SetItemData(i, i);
  11. }
  12. m_listCtrl.SortItems(MyListCompar, (LPARAM)&m_listCtrl);
  13. *pResult = 0;
  14. }

List Control控件的更多相关文章

  1. MFC编程 | tab control控件的使用

    因为课程需要,会用到MFC编程,所以讲一些经验总结下,以便日后使用查询. // tab control控件的使用 // 建立一个Cluster窗口,通过tab可以切换成C-Means和Fuzzy C- ...

  2. OpenCV 2.2版本号以上显示图片到 MFC 的 Picture Control 控件中

    OpenCV 2.2 以及后面的版本号取消掉了 CvvImage.h 和CvvImage.cpp 两个文件,直接导致了苦逼的程序猿无法调用里面的显示函数来将图片显示到 MFC 的 Picture Co ...

  3. 在VC++中使用Tab Control控件

    系统环境:Windows 7软件环境:Visual Studio 2008 SP1本次目的:在模态或非模态对话框中使用Tab Control控件,及引申在单/多文档中使用 查阅MSDN文档,对于创建T ...

  4. OpenCV 通过 MFC 的 Picture Control 控件操作图像

    假设希望对显示在MFC Picture Control 控件里的图像进行操作,比方画线画点之类的,能够利用 OpenCV 结合 MFC 本身的鼠标响应函数来实现. 怎样将图像显示到 Picture C ...

  5. list control控件的一些操作

    一.添加数据 这里介绍的是最平常的添加方法,当然也有很多其他比较好的方法.这里要非常注意添加顺序.先上代码: //导入excel文档中的内容到list中 CoInitialize(NULL); if ...

  6. ASP.NET MVC 枚举类型转LIST CONTROL控件

    在实际应用中,我们经常会用到下拉框.多选.单选等类似的控件,我们可以统称他们为List Control,他们可以说都是一种类型的控件,相同之处都是由一个或一组键值对的形式的数据进行绑定渲染而成的. 这 ...

  7. CEdit使用(Edit Control控件)

    CEdit使用(Edit Control控件) 编辑框只读 属性 Read Only等于 True,就有了只读效果 密码框 属性 Password 等于 True,就有了密码效果 获取值/赋予值 Up ...

  8. C++ 关于MFC List Control 控件的使用事项 原创

    1\在开发项目时,使用到了 listcontrol 控件,就一些问题,做一下备注,以备以后使用 (1)  给list项目 删除所有的项目  DeleteAllItems(); (2) 给list项目 ...

  9. C++ MFC Tab Control控件的详细使用

    1. 新建一个MFC工程, 取名MyTab, 选择Dialog based, 然后Finish. 2. 删除对话框上默认添加的三个控件. 添加Tab Control控件并在Property属性中设置I ...

随机推荐

  1. Inside JVM 内存模型

    Inside JVM 内存模型 来源  原文:https://blog.csdn.net/silentbalanceyh/article/details/4661230 参考:IBM开发中心文档,&l ...

  2. debian 系统安装配置apache

    安装sshapt-get install ssh-server  (安装失败请插入镜像)service ssh start Apache 服务安装apt-get install apache2 apa ...

  3. 51单片机 | I/O口直接输入输出实例

    51单片机P0/P1/P2/P3口的区别: P0口要作为低8位地址总线和8位数据总线用,这种情况下P0口不能用作I/O,要先作为地址总线对外传送低8位的地址,然后作为数据总线对外交换数据: P1口只能 ...

  4. 算法--java实现将数字转换成人民币大写(迅雷面试题)

    今天去迅雷面试,是个数字转换成人民币的算法题: public class Rmb { /** * 人民币的基本信息和操作 * * @author soyoungboy * @version 1.0 * ...

  5. LICS O(n*m)+前驱路径

    LICS:最长公共上升子序列: 一般令f[i][j]表示a串前i位,b串以j结尾的LICS长度.于是,答案为:max(1~m)(f[n][i]); 朴素做法:O(n^3) 相等时,从1~j-1枚举最大 ...

  6. 【模板】K短路 A-star

    引理:当一个状态对应的节点第K次从堆中取出时,该状态对应的当前代价是从起点到该点的第K优解. 代码如下 /* POJ2449 */ #include <cstdio> #include & ...

  7. Flash与JavaScript互动

    最近做的一个项目需要用javascript来实现自动复制文本到剪切板,但测试时发现只有ie6.0支持. 到百度搜索后才发现,原来ie7.0.firefox是不支持这样的操作的,随后又搜索了一下,找到一 ...

  8. Mac下Vim编辑快捷键小结(移动光标)

    Mac下Vim编辑快捷键小结(移动光标) 1.移动到行尾"$",移动到行首"0"(数字),移动到行首第一个字符处"^" 2.移动到段首&qu ...

  9. 多线程Java Socket编程

    采用Java 5的ExecutorService来进行线程池的方式实现多线程,模拟客户端多用户向同一服务器端发送请求. 1.服务端 package localSocket; import java.i ...

  10. CentOS下安装zookeeper并设置开机自启动

    转自: 一.安装zookeeper # cd /opt/ # mkdir zookeeper # cd zookeeper/ # tar -zxvf zookeeper-3.4.6.tar.gz # ...