1. #include <windows.h>
  2. #include <commctrl.h>
  3. #include <tlhelp32.h>
  4.  
  5. #include "resource.h"
  6.  
  7. // 链接到comctl32.lib库
  8. #pragma comment(lib,"comctl32.lib")
  9.  
  10. BOOL __stdcall DlgProc(HWND, UINT, WPARAM, LPARAM);
  11. void UpdateProcess(HWND hWndList);
  12.  
  13. int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
  14. {
  15. // 初始化Comctl32.dll库
  16. ::InitCommonControls();
  17.  
  18. ::DialogBoxParam(hInstance, (LPCTSTR)IDD_DIALOG1, NULL, DlgProc, NULL);
  19.  
  20. return ;
  21. }
  22.  
  23. BOOL __stdcall DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  24. {
  25. switch(message)
  26. {
  27. case WM_INITDIALOG:
  28. {
  29. // 初始化列表视图控件
  30.  
  31. HWND hWndList = ::GetDlgItem(hDlg, IDC_LIST);
  32. TCITEM tci={};
  33. tci.mask=TCIF_TEXT;
  34. tci.pszText="进程";
  35. TabCtrl_InsertItem(GetDlgItem(hDlg,IDC_TAB1),,&tci);
  36. tci.pszText="标签2";
  37. TabCtrl_InsertItem(GetDlgItem(hDlg,IDC_TAB1),,&tci);
  38. tci.pszText="标签3";
  39. TabCtrl_InsertItem(GetDlgItem(hDlg,IDC_TAB1),,&tci);
  40. //进程标签分栏
  41. LVCOLUMN lvi={};
  42. lvi.mask=LVCF_WIDTH|LVCF_TEXT|LVCF_FMT;
  43. lvi.pszText="进程名称";
  44. lvi.cx=;
  45. lvi.fmt=LVCFMT_CENTER;
  46. ListView_InsertColumn(GetDlgItem(hDlg,IDC_LIST),,&lvi);
  47. lvi.pszText="PID";
  48. ListView_InsertColumn(GetDlgItem(hDlg,IDC_LIST),,&lvi);
  49. //标签2分栏
  50. lvi.mask=LVCF_WIDTH|LVCF_TEXT|LVCF_FMT;
  51. lvi.pszText="进程名称2";
  52. lvi.cx=;
  53. lvi.fmt=LVCFMT_CENTER;
  54. ListView_InsertColumn(GetDlgItem(hDlg,IDC_LIST1),,&lvi);
  55. lvi.pszText="PID2";
  56. ListView_InsertColumn(GetDlgItem(hDlg,IDC_LIST1),,&lvi);
  57. // 刷新进程列表
  58. UpdateProcess(hWndList);
  59. }
  60. break;
  61. case WM_NOTIFY:
  62. {
  63.  
  64. if (*(LPDWORD)((LPBYTE)lParam+)==TCN_SELCHANGE )
  65. {
  66. int i = SendMessage(GetDlgItem(hDlg,IDC_TAB1),TCM_GETCURSEL,,);
  67. //第一个标签被点击时
  68. if (i == )
  69. {
  70. UpdateProcess(::GetDlgItem(hDlg, IDC_LIST));
  71. //显示ID为IDC_LIST的列表控件
  72. ShowWindow(GetDlgItem(hDlg,IDC_LIST),true);
  73.  
  74. //隐藏ID为IDC_LIST1的列表控件
  75. ShowWindow(GetDlgItem(hDlg,IDC_LIST1),false);
  76. }
  77. //第二个标签被点击时
  78. else if (i==)
  79. {
  80. //隐藏ID为IDC_LIST的列表控件
  81. ShowWindow(GetDlgItem(hDlg,IDC_LIST),false);
  82. //显示ID为IDC_LIST1的列表控件
  83. ShowWindow(GetDlgItem(hDlg,IDC_LIST1),true);
  84. }
  85. //第三个标签被点击时
  86. else if (i==)
  87. {
  88. //隐藏ID为IDC_LIST的列表控件
  89. ShowWindow(GetDlgItem(hDlg,IDC_LIST),false);
  90. //隐藏ID为IDC_LIST1的列表控件
  91. ShowWindow(GetDlgItem(hDlg,IDC_LIST1),false);
  92. MessageBox(NULL,"标签3","您点击了标签3!",MB_OK);
  93. }
  94. }
  95. }
  96. break;
  97. case WM_COMMAND:
  98. switch(LOWORD(wParam))
  99. {
  100. case IDCANCEL:
  101. ::EndDialog(hDlg, IDCANCEL);
  102. break;
  103. }
  104. break;
  105. }
  106. return ;
  107. }
  108.  
  109. void UpdateProcess(HWND hWndList)
  110. {
  111. // 删除所有的项
  112. ::SendMessage(hWndList, LVM_DELETEALLITEMS, , );
  113.  
  114. int nItem = ; // 项计数
  115.  
  116. PROCESSENTRY32 pe32 = { sizeof(PROCESSENTRY32) };
  117. HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, );
  118. if(hProcessSnap == INVALID_HANDLE_VALUE)
  119. return;
  120. if(Process32First(hProcessSnap, &pe32))
  121. {
  122. do
  123. {
  124. // 取得进程ID号
  125. char szID[];
  126. wsprintf(szID, "%u", pe32.th32ProcessID);
  127.  
  128. // 插入一个项
  129. LVITEM item = { };
  130. item.iItem = nItem;
  131.  
  132. item.mask = LVIF_TEXT; // 指定pszText域有效
  133. item.pszText = (LPTSTR)pe32.szExeFile; // 设置文本
  134.  
  135. ::SendMessage(hWndList, LVM_INSERTITEM, , (long)&item);
  136.  
  137. // 设置新项的文本
  138. LVITEM lvi;
  139. lvi.iSubItem = ; // 指定要设置第1个专栏的文本
  140. lvi.pszText = (LPTSTR)szID; // 要设置的文本
  141. ::SendMessage(hWndList, LVM_SETITEMTEXT, nItem, (LPARAM)&lvi);
  142.  
  143. nItem++;
  144.  
  145. }
  146. while(Process32Next(hProcessSnap, &pe32));
  147. }
  148. ::CloseHandle(hProcessSnap);
  149. }

初始化消息最好添加:

//隐藏ID为IDC_LIST1的列表控件
ShowWindow(GetDlgItem(hDlg,IDC_LIST1),false);

TabControl+ListView的更多相关文章

  1. C# Listview 数据绑定

    今天搞Winform,有串数据需要绑定到TabControl里面,原来用datatable,组长说这玩意会有问题不让用,菜鸟实在不会,百度查的Listview用法,写了个数组进去绑定 using Sy ...

  2. [WPF系列]-基础系列 TabControl应用

    引言 Tabcontrol控件也是我们在项目中经常用到的一个控件,用它将相关的信息组织在一起分类显示. 简介     ========================================= ...

  3. Winform listview控件、 容器控件

    1.常用的基本属性: (1)FullRowSelect:设置是否行选择模式.(默认为false) 提示:只有在Details视图该属性才有意义. (2) GridLines:设置行和列之间是否显示网格 ...

  4. winform listview控件、容器控件

    ListVies控件主要用于展示数据 常用属性: FullRowSelect:设置是否行选择模式.(默认为false) (开启之后一下选中一行数据) GridLines:设置行和列之间是否显示网格线. ...

  5. winform常用的属性(listview),常用容器(二者结合)

    ListVies控件主要用于展示数据(非常实用和重要的控件) FullRowSelect:设置是否行选择模式.(默认为false) (开启之后一下选中一行数据) ___________________ ...

  6. C# 用tabcontrol实现窗体类似网页排版的显示

    这里做的比较简陋,可以美化下 把form设置为非顶级控件,直接放在tabcontrol里边,然后实现tabcontrol的拖拽移除tabpage显示form以及添加tabpage mousemove的 ...

  7. WPF TabControl SelectionChanged 重复执行的问题

    很邪门的问题,我曾经都感觉是微软的bug了. 问题是这样的:在我的tabcontrol下的tabitem中有一个combobox控件,由于一些原因,需要执行tabcontrol的SelectionCh ...

  8. WPF DataGrid与ListView性能对比与场景选择

    开门见山的说 性能对比: 在Demo中,DataGrid与ListView默认开启虚拟化(可以理解为动态渲染,类似懒加载只渲染屏幕可以看见的地方) DataGrid渲染10列50行随机字符280ms ...

  9. 张高兴的 UWP 开发笔记:横向 ListView

    ListView 默认的排列方向是纵向 ( Orientation="Vertical" ) ,但如果我们需要横向显示的 ListView 怎么办? Blend for Visua ...

随机推荐

  1. Sublime 一些常用快捷键

    Sublime插件安装和使用-----------------------------最常用的1.新建文件-输入"html:xt"后 按"Ctrl+E键"或 & ...

  2. 快速搭建单机版Spring Cloud EurekaServer

    原文链接:http://www.yiidian.com/springcloud/build-eureka-single.html 本文介绍搭建单机版的Eureka Server服务 1 创建项目,导入 ...

  3. Adobe Photoshop CC2014 for MAC 详细破解步骤

    1,安装Adobe Photoshop CC2014 for MAC,可以断网安装,如果不断网的话,需要申请一个Adobe ID,是免费申请. 2,下载破解工具,https://sdifen.ctfi ...

  4. C++基础--函数模板

    函数模板是通用的函数描述,其使用泛型来定义函数.其实就是有些操作,如果撇开具体的变量的数据类型,其操作是一样的如果我们将这些操作写成一个模板,在调用不同变量的时候就设定好变量类型就可了,后续的操作基本 ...

  5. 不同DIV滚动条如何同步?

    $(".DIV").scroll(function(){  $(".target").scrollLeft($(".DIV ").scrol ...

  6. python实现微信发送服务器监控报警消息代码实现

    这篇文章主要介绍了python3.8 微信发送服务器监控报警消息代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 ! python版本 > ...

  7. Win7 node多版本管理gnvm采坑记录

    采坑描述:下载新node版本及切换node失败 解决:1.要用管理员权限启动cmd:2.确保node是空闲的 Gnvm下载地址: 32-bit | 64-bit Github 1.下载之后为 得到一个 ...

  8. 转: 十大Intellij IDEA快捷键

    Intellij IDEA中有很多快捷键让人爱不释手,stackoverflow上也有一些有趣的讨论.每个人都有自己的最爱,想排出个理想的榜单还真是困难.以前也整理过Intellij的快捷键,这次就按 ...

  9. 支持 UTF-8 中文的串口调试工具

    最近使用 mdk526,编辑设置使用 utf-8,编辑窗口中文正常,但是编译的时候提示 warning: #870-D: invalid multibyte character sequence,解决 ...

  10. HZNU-ACM寒假集训Day9小结 倍增

    LCA 倍增法求最近公共祖先 首先对于每个结点先进行dfs预处理它的深度,再记录下它们往父亲方向走2的0次,1次...k次步所到达的结点.在这里2的k次大于整棵树的最大深度. 预处理完后,需要查询两个 ...