MFC CListCtrl
列名、行内容的添加、删除。
据列名、行内容长度设置列宽。
排序。
提升权限
BOOL CDemoListCtrlApp::EnableDebugPrivilege() { HANDLE token; if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&token)) { return FALSE; } TOKEN_PRIVILEGES tkp; tkp.PrivilegeCount = 1; ::LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tkp.Privileges[0].Luid); tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if(!AdjustTokenPrivileges(token,FALSE,&tkp,sizeof(tkp),NULL,NULL)) { return FALSE; } CloseHandle(token); return TRUE; }
取进程全路径
BOOL MFCTool::DosPathToNtPath( LPTSTR pszDosPath, LPTSTR pszNtPath ) {TCHAR szDriveStr[500];TCHAR szDrive[3];TCHAR szDevName[100];INT cchDevName;INT i;//检查参数if(!pszDosPath || !pszNtPath )return FALSE;//获取本地磁盘字符串if(GetLogicalDriveStrings(sizeof(szDriveStr), szDriveStr)){for(i = 0; szDriveStr[i]; i += 4){if(!lstrcmpi(&(szDriveStr[i]), _T("A:\\")) || !lstrcmpi(&(szDriveStr[i]), _T("B:\\")))continue;szDrive[0] = szDriveStr[i];szDrive[1] = szDriveStr[i + 1];szDrive[2] = '\0';if(!QueryDosDevice(szDrive, szDevName, 100))//查询 Dos 设备名return FALSE;cchDevName = lstrlen(szDevName);if(_tcsnicmp(pszDosPath, szDevName, cchDevName) == 0)//命中 {lstrcpy(pszNtPath, szDrive);//复制驱动器lstrcat(pszNtPath, pszDosPath + cchDevName);//复制路径return TRUE;} }}lstrcpy(pszNtPath, pszDosPath);return FALSE; }BOOL MFCTool::GetProcessFullPath( DWORD dwPID, TCHAR pszFullPath[MAX_PATH] ) {TCHAR szImagePath[MAX_PATH];HANDLE hProcess;if(!pszFullPath)return FALSE;pszFullPath[0] = '\0';hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 0, dwPID);if(!hProcess)return FALSE;if(!GetProcessImageFileName(hProcess, szImagePath, MAX_PATH)){CloseHandle(hProcess);return FALSE;}if(!DosPathToNtPath(szImagePath, pszFullPath)){CloseHandle(hProcess);return FALSE;}CloseHandle(hProcess);return TRUE; }
显示进程
void CDemoListCtrlDlg::ShowProcess( CListCtrl& listctrl ) {//清除所有内容行 listctrl.DeleteAllItems();//清除所有列名while (listctrl.DeleteColumn(0)){}//设置显示模式,网格+选中全行listctrl.SetExtendedStyle(listctrl.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);//内容添加结束前停止生绘 listctrl.SetRedraw(FALSE);//添加列名listctrl.InsertColumn(0, "PID");listctrl.InsertColumn(1, "NAME");listctrl.InsertColumn(2, "FULLPATH");HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);if (INVALID_HANDLE_VALUE != hSnap){PROCESSENTRY32 item;item.dwSize = sizeof(item);if (Process32First(hSnap, &item)){CString str;int iLine = 0;char chPath[MAX_PATH];MFCTool mfctool;do {str.Format("%d", item.th32ProcessID);listctrl.InsertItem(iLine, str);listctrl.SetItemText(iLine, 1, item.szExeFile);memset(chPath, 0, MAX_PATH);mfctool.GetProcessFullPath(item.th32ProcessID, chPath);str.Format("%s", chPath);listctrl.SetItemText(iLine, 2, str);iLine++;} while (Process32Next(hSnap, &item));}CloseHandle(hSnap);hSnap = INVALID_HANDLE_VALUE;}//自动变列宽,据字段名&字段值长度int iCount = listctrl.GetHeaderCtrl()->GetItemCount();for (int i = 0; i < iCount; i++){listctrl.SetColumnWidth(i, LVSCW_AUTOSIZE_USEHEADER);}listctrl.SetRedraw(TRUE); }
右键显示菜单
void CDemoListCtrlDlg::OnNMRClickList1(NMHDR *pNMHDR, LRESULT *pResult) {LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);//弹出菜单 CPoint pos;if (GetCursorPos(&pos)){CMenu menu;//加载菜单资源 menu.LoadMenu(IDR_MENU1);//目标子菜单是菜单资源第0列menu.GetSubMenu(0)->TrackPopupMenu(TPM_RIGHTBUTTON, pos.x, pos.y, this);}*pResult = 0; }
右键菜单:刷新
添加菜单资源
xxxDlg.h
class CDemoListCtrlDlg : public CDialog { //...public:afx_msg void OnRefreshList1(); }
xxxDlg.cpp
BEGIN_MESSAGE_MAP(CDemoListCtrlDlg, CDialog) //... ON_COMMAND(ID_REFRESHLIST1, OnRefreshList1) END_MESSAGE_MAP()void CDemoListCtrlDlg::OnRefreshList1() {ShowProcess(m_listctrl); }
排序
静态排序函数
响应消息 ON_NOTIFY(NM_CLICK, IDC_LIST1, &CDemoListCtrlDlg::OnNMClickList1)
xxxDlg.h
static DWORD m_dwSortColumn;static BOOL m_bAscending;//Descending/Ascendingstatic int CALLBACK CompareList1(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);afx_msg void OnLvnColumnclickList1(NMHDR *pNMHDR, LRESULT *pResult);
xxxDlg.cpp
int CALLBACK CDemoListCtrlDlg::CompareList1( LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort ) {CListCtrl* pListCtrl = (CListCtrl*)lParamSort;int iCompare = 0; CString strCompare1 = pListCtrl->GetItemText(lParam1, m_dwSortColumn);CString strCompare2 = pListCtrl->GetItemText(lParam2, m_dwSortColumn);switch (m_dwSortColumn){case 0://by idiCompare = atof((char*)strCompare1.GetBuffer(0)) <= atof((char*)strCompare2.GetBuffer(0)) ? -1 : 1; break;default://by stringiCompare = strCompare1.CompareNoCase(strCompare2);break;}if(m_bAscending) {return iCompare;}return -iCompare; }void CDemoListCtrlDlg::OnLvnColumnclickList1(NMHDR *pNMHDR, LRESULT *pResult) {LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;m_dwSortColumn = pNMListView->iSubItem;m_bAscending = !m_bAscending;//Descending or Ascending int iCount = m_listctrl.GetItemCount();for (int i = 0; i < iCount; i++) { m_listctrl.SetItemData(i, i); }m_listctrl.SortItems(CompareList1, (LPARAM)&m_listctrl);*pResult = 0; }
选中某行,取各列内容
void CDemoListCtrlDlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult) {LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);//selected lineint iSelectedLine = m_listctrl.GetSelectionMark();if (-1 != iSelectedLine){CString str = m_listctrl.GetItemText(iSelectedLine, 0) + "|" + m_listctrl.GetItemText(iSelectedLine, 1)+ "|" + m_listctrl.GetItemText(iSelectedLine, 2);//MessageBox(str); SetWindowText(str);}*pResult = 0; }
转载于:https://www.cnblogs.com/nonebutnow/p/6006009.html
MFC CListCtrl相关推荐
- MFC CListCtrl修改表头字体、字体颜色、背景颜色、字体垂直居中、表头高度
文章目录 前言 一.文件链接 二.如何使用 效果 前言 本人最近在MFC项目中需要做到如文章标题的效果,查了很久资料,终于实现了上述功能.为了后人少走弯路,本人决定将自己这部分相关代码开源出来,大家可 ...
- MFC CListCtrl 虚拟列表使用详解
一.简介 CListCtrl 是MFC 库的一个列表控件,用于显示数据的.可以通过 InsertItem 快速向列表添加一行数据,并且用 SetItemText 设置其后面列的数据项. 但是本篇文章重 ...
- MFC::CListCtrl常用操作
提示 创建MFC项目 添加 listControl 控件 设置视图:Report 添加关联变量:m_CListCtrl 文章目录 提示 设置选中整行 插入 "行"/"列& ...
- MFC CListCtrl控件基本使用图解
新建一个对话框工程:添加CListCtrl控件:为控件添加成员变量,如下图: 成员变量名称,m_ctrllist: 如下图,找到对话框初始化成员函数,转到定义,进入此函数代码: 找到 // TODO: ...
- MFC CListCtrl 取消选中
最近写一个程序,用到CListCtrl .其中取消选中,我开始使用的是 SetItemState(i, NULL, NULL); 一直觉得程序有问题,但是没有去深究.今天回过头来找原因,发现原来 ...
- MFC CListCtrl 点击选中整行
CListCtrl 默认只有点击第一列才能选中,而且只能让第一列高亮,那么如何让点击某一行的任何列,整行都高亮呢? 有2个方法,如下: //方法1::SendMessage(m_listCtrlDev ...
- MFC CListCtrl右键菜单
ON_NOTIFY(NM_RCLICK, IDC_LIST_ShowMsg, &CDlg::OnNMRClickListShowmsg) //list右键菜单 void CDlg::OnNMR ...
- 实现HOOK其他进程的Messagebox(2) DLL注入工具
DLL注入工具(远程线程技术和简单的MFC CListCtrl控件知识). DLL文件已经编写好.测试程序也很简单.现在就是解决将DLL注入到目标进程中.. 这里采用远程线程注入技术..本来WIN32 ...
- MFC 列表控件CListCtrl加载类似QQ界面的头像与文字
本文主要讲述使用VS2012 MFC的CListCtrl(列表)控件加载类似于QQ界面的图片与文字数据.主要通过CListCtrl::InsertColumn.InsertItem.SetItemTe ...
最新文章
- asp.net 中的错误处理
- linux 切图软件下载,学会23个linux常用命令,不做前端切图仔~
- Newtonsoft.Json.dll 反序列化JSON字符串
- java里冒泡排序编程案例_冒泡排序法-java案例详解
- 蚂蚁分类信息系统 5.8 信息浏览量后台自定义设置
- python functools
- 自动优化工具Black帮你写出规范漂亮的python代码
- vue怎么实现右键二级菜单_vue中如何自定义右键菜单详解
- C++ override什么意思
- java敏感词过滤算法
- win7美化_Windows 美化资源大合集!
- css 写一个左中右布局占满屏幕,左右两块固定宽度200,中间自适应宽,先加载中间块
- cmake-自动识别新增子模块
- python时间序列因果检验_用python做时间序列预测8:Granger causality test(格兰杰因果检验)...
- 路由器什么牌子好?游戏宅强推
- kubernetes 使用kubectl port-forward 访问应用
- 欧拉角表示以及万向节死锁
- 浅谈数据清洗的一些要素
- 记一次内网jenkins自动发布血泪史
- TortoiseGit 的使用
热门文章
- linux 4.1.16 ftrace 进程调度,Linux内核进程调度overview(1)
- 土木计算机2级,请教各位,我是学土木的,考计算机二级的哪个比较好?
- git gui 历史版本_这些Git命令都不会,还是不要去面试了
- iptables 开放远程_JavaWeb项目的部署以及远程调试
- 51单片机有几个通用io口_51单片机IO口的四种使用方法
- java命令框编译代码的方式_在命令行模式下如何编译运行Java代码
- linux netty udp服务端,Netty实现UDP服务端
- 【渝粤教育】电大中专财务管理与分析 (2)作业 题库
- 【渝粤教育】电大中专幼儿园课程论 (7)作业 题库
- 【渝粤教育】电大中专测量学作业 题库