列名、行内容的添加、删除。

据列名、行内容长度设置列宽。

排序。

提升权限

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相关推荐

  1. MFC CListCtrl修改表头字体、字体颜色、背景颜色、字体垂直居中、表头高度

    文章目录 前言 一.文件链接 二.如何使用 效果 前言 本人最近在MFC项目中需要做到如文章标题的效果,查了很久资料,终于实现了上述功能.为了后人少走弯路,本人决定将自己这部分相关代码开源出来,大家可 ...

  2. MFC CListCtrl 虚拟列表使用详解

    一.简介 CListCtrl 是MFC 库的一个列表控件,用于显示数据的.可以通过 InsertItem 快速向列表添加一行数据,并且用 SetItemText 设置其后面列的数据项. 但是本篇文章重 ...

  3. MFC::CListCtrl常用操作

    提示 创建MFC项目 添加 listControl 控件 设置视图:Report 添加关联变量:m_CListCtrl 文章目录 提示 设置选中整行 插入 "行"/"列& ...

  4. MFC CListCtrl控件基本使用图解

    新建一个对话框工程:添加CListCtrl控件:为控件添加成员变量,如下图: 成员变量名称,m_ctrllist: 如下图,找到对话框初始化成员函数,转到定义,进入此函数代码: 找到 // TODO: ...

  5. MFC CListCtrl 取消选中

    最近写一个程序,用到CListCtrl .其中取消选中,我开始使用的是 SetItemState(i,   NULL,  NULL); 一直觉得程序有问题,但是没有去深究.今天回过头来找原因,发现原来 ...

  6. MFC CListCtrl 点击选中整行

    CListCtrl 默认只有点击第一列才能选中,而且只能让第一列高亮,那么如何让点击某一行的任何列,整行都高亮呢? 有2个方法,如下: //方法1::SendMessage(m_listCtrlDev ...

  7. MFC CListCtrl右键菜单

    ON_NOTIFY(NM_RCLICK, IDC_LIST_ShowMsg, &CDlg::OnNMRClickListShowmsg) //list右键菜单 void CDlg::OnNMR ...

  8. 实现HOOK其他进程的Messagebox(2) DLL注入工具

    DLL注入工具(远程线程技术和简单的MFC CListCtrl控件知识). DLL文件已经编写好.测试程序也很简单.现在就是解决将DLL注入到目标进程中.. 这里采用远程线程注入技术..本来WIN32 ...

  9. MFC 列表控件CListCtrl加载类似QQ界面的头像与文字

    本文主要讲述使用VS2012 MFC的CListCtrl(列表)控件加载类似于QQ界面的图片与文字数据.主要通过CListCtrl::InsertColumn.InsertItem.SetItemTe ...

最新文章

  1. asp.net 中的错误处理
  2. linux 切图软件下载,学会23个linux常用命令,不做前端切图仔~
  3. Newtonsoft.Json.dll 反序列化JSON字符串
  4. java里冒泡排序编程案例_冒泡排序法-java案例详解
  5. 蚂蚁分类信息系统 5.8 信息浏览量后台自定义设置
  6. python functools
  7. 自动优化工具Black帮你写出规范漂亮的python代码
  8. vue怎么实现右键二级菜单_vue中如何自定义右键菜单详解
  9. C++ override什么意思
  10. java敏感词过滤算法
  11. win7美化_Windows 美化资源大合集!
  12. css 写一个左中右布局占满屏幕,左右两块固定宽度200,中间自适应宽,先加载中间块
  13. cmake-自动识别新增子模块
  14. python时间序列因果检验_用python做时间序列预测8:Granger causality test(格兰杰因果检验)...
  15. 路由器什么牌子好?游戏宅强推
  16. kubernetes 使用kubectl port-forward 访问应用
  17. 欧拉角表示以及万向节死锁
  18. 浅谈数据清洗的一些要素
  19. 记一次内网jenkins自动发布血泪史
  20. TortoiseGit 的使用

热门文章

  1. linux 4.1.16 ftrace 进程调度,Linux内核进程调度overview(1)
  2. 土木计算机2级,请教各位,我是学土木的,考计算机二级的哪个比较好?
  3. git gui 历史版本_这些Git命令都不会,还是不要去面试了
  4. iptables 开放远程_JavaWeb项目的部署以及远程调试
  5. 51单片机有几个通用io口_51单片机IO口的四种使用方法
  6. java命令框编译代码的方式_在命令行模式下如何编译运行Java代码
  7. linux netty udp服务端,Netty实现UDP服务端
  8. 【渝粤教育】电大中专财务管理与分析 (2)作业 题库
  9. 【渝粤教育】电大中专幼儿园课程论 (7)作业 题库
  10. 【渝粤教育】电大中专测量学作业 题库