#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. 最小生成树(Kruskal+Prim)--模板

    最小生成树-----在连通网的所有生成树中,所有边的代价和最小的生成树,称为最小生成树. 应用场景 1.假设以下情景,有一块木板,板上钉上了一些钉子,这些钉子可以由一些细绳连接起来.假设每个钉子可以通 ...

  2. ZOJ - 3123 Subsequence (滑动窗口)

    题意:给定N个数,求和大于等于S的最短连续子序列的长度. 分析:滑动窗口即可.两种写法. 1. #include<cstdio> #include<cstring> #incl ...

  3. Loading PDSC Debug Description Failed for STMicroelectronics STM32Lxxxxxxx”

    今天在调程序的时候遇到这个问题 解决办法:将安装在MDK下面的文件属性由只读去掉: 成功!可以下载.

  4. Spring Tools 4 STS没有创建Dynamic Web Project的选项 以及 Spring Tools 4 STS New 菜单没有Spring Bean Configuration File选项

    Spring Tools 4 STS没有创建Dynamic Web Project的选项 STS4默认不带Dynamic Web Project插件. 解决方法:1.打开:Help 选择 Instal ...

  5. 【LeetCode】电话号码的字母组合

    [问题]给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:" 输出:["ad ...

  6. 集合框架的详解,List(ArrayList,LinkedList,Vector),Set(HashSet,TreeSet)-(14)

    集合详解: /* Collection |--List:元素是有序的,元素可以重复.因为该集合体系有索引. |--ArrayList:底层的数据结构使用的是数组结构.特点:查询速度很快.但是增删稍慢. ...

  7. 全局唯一性ID生成方法小结

    全局ID通常要满足分片的一些要求:1 不能有单点故障.2 以时间为序,或者ID里包含时间.这样一是可以少一个索引,二是冷热数据容易分离.3 可以控制ShardingId.比如某一个用户的文章要放在同一 ...

  8. idea~创建maven webapp项目

    1.选择 org.apache.maven.archtypes:maven-archtype-webapp 2.禁止远程下载 archetypeCatalog=internal 目的是不远程下载,否则 ...

  9. Oracle专题

    定时任务:JOB文件夹 监视执行过的SQL 语句 select * from v$sqlarea a where module='PL/SQL Developer' order by a.FIRST_ ...

  10. Navicat for Mysql 11.2 的下载,安装与激活

    1. Navicat for Mysql 11.2 的下载 链接:https://pan.baidu.com/s/1w54F-MYTLuy4TQwpzUE7bQ       密码:zsfu 2.下载的 ...