#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. Java8 新特性_Lambda 表达式

    1. Java8新特性_简介 Lambda 表达式 函数式接口 方法引用与构造器引用 Stream API 接口中的默认方法与静态方法 新时间日期 API 减少空指针异常的容器 Optional 2. ...

  2. 个人vim简单配置

    精简.vimrc配置,简约不简单 该配置没有花里胡哨的插件,只是用ctags和cscope然后配合vim提供的基础功能就可以完成常见的代码编辑,浏览,查找等工作. "************ ...

  3. ffmpeg 模块简介

    FFmpeg 是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.它包括了领先的音/视频编码库libavcodec 等.libavformat:用于各种音视频封装格式的生成和解析 ...

  4. PHP的变量作用域-常亮-全局变量-表单提交变量

    一.变量的作用域 作用域是指在一个脚本中某个变量在哪些地方可以使用或可见. 内置超级全局变量可以在脚本的任何地方使用和可见. 常量,一旦被声明,将可以在全局可见.也就是说,他们可以在函数内外使用. 在 ...

  5. ABP which was not registered.

    ABP 错误: 'AoLongData.Finances.FinanceService' is waiting for the following dependencies:- Service 'Ab ...

  6. 全面掌握Nginx配置+快速搭建高可用架构 一 random_index_module 随机主页

    修改default.conf 保存重载Nginx,完成配置 自动随机选择主页 string要替换的内容,replacement表示替换后的内容 示例 效果,只替换了第一个 如果要替换所有的,需要用到s ...

  7. React之Redux知识点补充

    一. reducer纯函数方便自动化测试 二.

  8. idea 2019.3 最新破解补丁和激活码,可破解至2089年!

    链接:https://blog.csdn.net/qq_42914528/article/details/85617901 上面方法失效了,请尝试以下方式激活(2020.1.6更新) idea激活码( ...

  9. Java中的合并与重组(下)

    通过优锐课核心java学习笔记中,我们可以看到,码了很多专业的相关知识, 分享给大家参考学习. Java中的合并与重组上部分链接:https://www.cnblogs.com/youruike1/p ...

  10. vue 插槽 part3

    f vue中的插槽 1.<slot>默认内容</slot> 当副组件不传递信息的时候 显示默认内容 2.<slot></slot> 显示的是插槽中所有的 ...