TabControl+ListView
- #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的更多相关文章
- C# Listview 数据绑定
今天搞Winform,有串数据需要绑定到TabControl里面,原来用datatable,组长说这玩意会有问题不让用,菜鸟实在不会,百度查的Listview用法,写了个数组进去绑定 using Sy ...
- [WPF系列]-基础系列 TabControl应用
引言 Tabcontrol控件也是我们在项目中经常用到的一个控件,用它将相关的信息组织在一起分类显示. 简介 ========================================= ...
- Winform listview控件、 容器控件
1.常用的基本属性: (1)FullRowSelect:设置是否行选择模式.(默认为false) 提示:只有在Details视图该属性才有意义. (2) GridLines:设置行和列之间是否显示网格 ...
- winform listview控件、容器控件
ListVies控件主要用于展示数据 常用属性: FullRowSelect:设置是否行选择模式.(默认为false) (开启之后一下选中一行数据) GridLines:设置行和列之间是否显示网格线. ...
- winform常用的属性(listview),常用容器(二者结合)
ListVies控件主要用于展示数据(非常实用和重要的控件) FullRowSelect:设置是否行选择模式.(默认为false) (开启之后一下选中一行数据) ___________________ ...
- C# 用tabcontrol实现窗体类似网页排版的显示
这里做的比较简陋,可以美化下 把form设置为非顶级控件,直接放在tabcontrol里边,然后实现tabcontrol的拖拽移除tabpage显示form以及添加tabpage mousemove的 ...
- WPF TabControl SelectionChanged 重复执行的问题
很邪门的问题,我曾经都感觉是微软的bug了. 问题是这样的:在我的tabcontrol下的tabitem中有一个combobox控件,由于一些原因,需要执行tabcontrol的SelectionCh ...
- WPF DataGrid与ListView性能对比与场景选择
开门见山的说 性能对比: 在Demo中,DataGrid与ListView默认开启虚拟化(可以理解为动态渲染,类似懒加载只渲染屏幕可以看见的地方) DataGrid渲染10列50行随机字符280ms ...
- 张高兴的 UWP 开发笔记:横向 ListView
ListView 默认的排列方向是纵向 ( Orientation="Vertical" ) ,但如果我们需要横向显示的 ListView 怎么办? Blend for Visua ...
随机推荐
- Sublime 一些常用快捷键
Sublime插件安装和使用-----------------------------最常用的1.新建文件-输入"html:xt"后 按"Ctrl+E键"或 & ...
- 快速搭建单机版Spring Cloud EurekaServer
原文链接:http://www.yiidian.com/springcloud/build-eureka-single.html 本文介绍搭建单机版的Eureka Server服务 1 创建项目,导入 ...
- Adobe Photoshop CC2014 for MAC 详细破解步骤
1,安装Adobe Photoshop CC2014 for MAC,可以断网安装,如果不断网的话,需要申请一个Adobe ID,是免费申请. 2,下载破解工具,https://sdifen.ctfi ...
- C++基础--函数模板
函数模板是通用的函数描述,其使用泛型来定义函数.其实就是有些操作,如果撇开具体的变量的数据类型,其操作是一样的如果我们将这些操作写成一个模板,在调用不同变量的时候就设定好变量类型就可了,后续的操作基本 ...
- 不同DIV滚动条如何同步?
$(".DIV").scroll(function(){ $(".target").scrollLeft($(".DIV ").scrol ...
- python实现微信发送服务器监控报警消息代码实现
这篇文章主要介绍了python3.8 微信发送服务器监控报警消息代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 ! python版本 > ...
- Win7 node多版本管理gnvm采坑记录
采坑描述:下载新node版本及切换node失败 解决:1.要用管理员权限启动cmd:2.确保node是空闲的 Gnvm下载地址: 32-bit | 64-bit Github 1.下载之后为 得到一个 ...
- 转: 十大Intellij IDEA快捷键
Intellij IDEA中有很多快捷键让人爱不释手,stackoverflow上也有一些有趣的讨论.每个人都有自己的最爱,想排出个理想的榜单还真是困难.以前也整理过Intellij的快捷键,这次就按 ...
- 支持 UTF-8 中文的串口调试工具
最近使用 mdk526,编辑设置使用 utf-8,编辑窗口中文正常,但是编译的时候提示 warning: #870-D: invalid multibyte character sequence,解决 ...
- HZNU-ACM寒假集训Day9小结 倍增
LCA 倍增法求最近公共祖先 首先对于每个结点先进行dfs预处理它的深度,再记录下它们往父亲方向走2的0次,1次...k次步所到达的结点.在这里2的k次大于整棵树的最大深度. 预处理完后,需要查询两个 ...