#include <windows.h>
#include <commctrl.h>
#include <tlhelp32.h> #include "resource.h" // 链接到comctl32.lib库
#pragma comment(lib,"comctl32.lib") BOOL __stdcall DlgProc(HWND, UINT, WPARAM, LPARAM);
void UpdateProcess(HWND hWndList); int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
{
// 初始化Comctl32.dll库
::InitCommonControls(); ::DialogBoxParam(hInstance, (LPCTSTR)IDD_DIALOG1, NULL, DlgProc, NULL); return ;
} BOOL __stdcall DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
{
// 初始化列表视图控件 HWND hWndList = ::GetDlgItem(hDlg, IDC_LIST);
TCITEM tci={};
tci.mask=TCIF_TEXT;
tci.pszText="进程";
TabCtrl_InsertItem(GetDlgItem(hDlg,IDC_TAB1),,&tci);
tci.pszText="标签2";
TabCtrl_InsertItem(GetDlgItem(hDlg,IDC_TAB1),,&tci);
tci.pszText="标签3";
TabCtrl_InsertItem(GetDlgItem(hDlg,IDC_TAB1),,&tci);
//进程标签分栏
LVCOLUMN lvi={};
lvi.mask=LVCF_WIDTH|LVCF_TEXT|LVCF_FMT;
lvi.pszText="进程名称";
lvi.cx=;
lvi.fmt=LVCFMT_CENTER;
ListView_InsertColumn(GetDlgItem(hDlg,IDC_LIST),,&lvi);
lvi.pszText="PID";
ListView_InsertColumn(GetDlgItem(hDlg,IDC_LIST),,&lvi);
//标签2分栏
lvi.mask=LVCF_WIDTH|LVCF_TEXT|LVCF_FMT;
lvi.pszText="进程名称2";
lvi.cx=;
lvi.fmt=LVCFMT_CENTER;
ListView_InsertColumn(GetDlgItem(hDlg,IDC_LIST1),,&lvi);
lvi.pszText="PID2";
ListView_InsertColumn(GetDlgItem(hDlg,IDC_LIST1),,&lvi);
// 刷新进程列表
UpdateProcess(hWndList);
}
break;
case WM_NOTIFY:
{ if (*(LPDWORD)((LPBYTE)lParam+)==TCN_SELCHANGE )
{
int i = SendMessage(GetDlgItem(hDlg,IDC_TAB1),TCM_GETCURSEL,,);
//第一个标签被点击时
if (i == )
{
UpdateProcess(::GetDlgItem(hDlg, IDC_LIST));
//显示ID为IDC_LIST的列表控件
ShowWindow(GetDlgItem(hDlg,IDC_LIST),true); //隐藏ID为IDC_LIST1的列表控件
ShowWindow(GetDlgItem(hDlg,IDC_LIST1),false);
}
//第二个标签被点击时
else if (i==)
{
//隐藏ID为IDC_LIST的列表控件
ShowWindow(GetDlgItem(hDlg,IDC_LIST),false);
//显示ID为IDC_LIST1的列表控件
ShowWindow(GetDlgItem(hDlg,IDC_LIST1),true);
}
//第三个标签被点击时
else if (i==)
{
//隐藏ID为IDC_LIST的列表控件
ShowWindow(GetDlgItem(hDlg,IDC_LIST),false);
//隐藏ID为IDC_LIST1的列表控件
ShowWindow(GetDlgItem(hDlg,IDC_LIST1),false);
MessageBox(NULL,"标签3","您点击了标签3!",MB_OK);
}
}
}
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDCANCEL:
::EndDialog(hDlg, IDCANCEL);
break;
}
break;
}
return ;
} void UpdateProcess(HWND hWndList)
{
// 删除所有的项
::SendMessage(hWndList, LVM_DELETEALLITEMS, , ); int nItem = ; // 项计数 PROCESSENTRY32 pe32 = { sizeof(PROCESSENTRY32) };
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, );
if(hProcessSnap == INVALID_HANDLE_VALUE)
return;
if(Process32First(hProcessSnap, &pe32))
{
do
{
// 取得进程ID号
char szID[];
wsprintf(szID, "%u", pe32.th32ProcessID); // 插入一个项
LVITEM item = { };
item.iItem = nItem; item.mask = LVIF_TEXT; // 指定pszText域有效
item.pszText = (LPTSTR)pe32.szExeFile; // 设置文本 ::SendMessage(hWndList, LVM_INSERTITEM, , (long)&item); // 设置新项的文本
LVITEM lvi;
lvi.iSubItem = ; // 指定要设置第1个专栏的文本
lvi.pszText = (LPTSTR)szID; // 要设置的文本
::SendMessage(hWndList, LVM_SETITEMTEXT, nItem, (LPARAM)&lvi); nItem++; }
while(Process32Next(hProcessSnap, &pe32));
}
::CloseHandle(hProcessSnap);
}

初始化消息最好添加:

//隐藏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. ubuntu16.04 重置mysql密码

    先登陆服务器,找到自己的my.cnf文件,通常会在 /etc目录下(如果不在,可以用find / -name my.cnf命令找一下), 然后使用 vi my.cnf 命令编辑该文件(建议先备份),在 ...

  2. JS ~ Promise 对象

    Promise 对象用于表示一个异步操作的最终状态(完成或失败),以及该异步操作的结果值. Promise.all(iterable) 这个方法返回一个新的promise对象,该promise对象在i ...

  3. 15 —— npm —— package.json 与 package-lock.json 的作用

    一,package.json  是 npm init 时创建的一个文件,会记录当前整个项目中的一些基础信息. 二,package-lock.json 是 node_modules 文件夹或者 pack ...

  4. Floyd--P1119 灾后重建

    题目背景 B地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响.但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车.换句话说,只有连接着两个重建完成的村庄的公路才能 ...

  5. AttributeError: 'list' object has no attribute 'data'智障错误

    import urllib.requestimport urllib.parse url = ['http://fanyi.youdao.com/translate?smartresult=dict& ...

  6. 干货|微软远程桌面服务蠕虫漏洞(CVE-2019-1182)分析

    2019年8月,微软发布了一套针对远程桌面服务的修复程序,其中包括两个关键的远程执行代码(RCE)漏洞,CVE-2019-1181和CVE-2019-1182.与之前修复的"BlueKeep ...

  7. Django回顾之_03_Model属性及后端配置

    1. Django ORM O(objects):类和对象. R(Relation):关系,关系数据库中的表格. M(Mapping):映射. Django ORM框架的功能: a) 建立模型类和表之 ...

  8. VC6.0 The value of ESP was not properly saved across a function call 错误解决方法

    调用DLL函数,出现错误 Run-Time Check Failure #0 - The value of ESP was not properly saved across a function c ...

  9. 直击JDD | 王振辉:技术是驱动物流革新的第一要素

    "从物流基础设施的大规模智能迭代到产业供应链的数字化升级,物流行业从大而重变得'举重若轻',技术是驱动物流革新的第一要素."11月19日,京东物流集团CEO王振辉在2019京东全球 ...

  10. 多种类型SQL注入

    前言 发现MYSQL手注注入方式用得多了,几乎都快忘记其它数据库注入的方式了,这里不讲绕过姿势和写shell,毕竟网上很多前辈都给了方法,我只讲一些基本的注入方式(只是记录一下各自的特性,记下来方便以 ...