#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. Dynamic Route Matching Vue路由(1)

    Dynamic Route Matching 动态的 路由 匹配 Very often we will need to map routes with the given pattern to the ...

  2. 第一部分 JavaScript语言核心(一)

    第二章 词法结构 P25 JavaScript是区分大小写的语言:但HTML不区分大小写(XHTML区分大小写,但浏览器具有强大的纠错能力.) 第三章 类型.变量和值 P32 var(variable ...

  3. Vue中 几个常用的命名规范

    1,组件名 官方推荐的组件名是 每个单词首字母大写(PascalCase) 或者 全小写用 - 连接(kebab-case) . 在DOM中使用的时候, 改为全小写, 单词之间用 - 连接. Vue. ...

  4. typeof()与Object.prototype.toString.call()

    用typeof方法只能初步判断number string undefined boolean object function symbol这几种初步类型 使用Object.prototype.toSt ...

  5. 在mysql中计算百分比

    通过查找资料,得到了如下解决方法: 用到了concat()和left() 两个函数 1.CONCAT(str1,str2,...) 返回来自于参数连结的字符串.如果任何参数是NULL, 返回NULL. ...

  6. spring boot2 运行环境

    1.springboot个版本系统需求 spring boot maven jdk 内置tomcat 内置jetty servlet 2.0.x 3.2+ 8或9 8.5(3.1) 9.4(3.1) ...

  7. SAP_FICO常用事务代码

    1.会计科目维护: FS00:总账科目主记录维护 FSP0:科目表中总账科目主记录维护 FSS0:公司代码中总账科目主记录维护 2.会计凭证创建 FB01:创建凭证 F-02:总账凭证创建(在FB01 ...

  8. k8s安装helm

    1.客户端安装 A.直接在github上下载二进制文件进行解压,下载地址:https://github.com/kubernetes/helm/releases B.将解压出来的二进制文件helm 拷 ...

  9. CSS 宽,高,背景设置

    width 宽,height 高,background 背景:背景色 background-color:颜色值--英文单词/十六进制/rgb:背景图 background-image:url(‘图片路 ...

  10. VS程序不显示控制台

    之所以会有这样的想法是因为,有时候我会用到一些库,这些库在使用的时候会在控制台输出一些信息,虽然这是无可厚非的事情,但是,如果我写了一个界面,这个时候当然是希望要显示什么就显示在界面上,或者就不要显示 ...