• 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 0;
    }
    
    BOOL __stdcall DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch(message)
        {    
        case WM_INITDIALOG:
            {
                // 初始化列表视图控件
    
                HWND hWndList = ::GetDlgItem(hDlg, IDC_LIST);
        
                // 设置它的扩展风格
                ::SendMessage(hWndList, LVM_SETEXTENDEDLISTVIEWSTYLE, 
                            0, LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
    
                LVCOLUMN column;
                // 指定LVCOLUMN结构中的pszText、fmt、cx域有效
                column.mask = LVCF_TEXT|LVCF_FMT|LVCF_WIDTH;    
                // 设置有效的域的属性
                column.fmt = LVCFMT_CENTER;    // 指定文本居中显示
                column.cx = 100;        // 指定此栏的宽度
                column.pszText = "进程名称";    // 指定此栏显示的文本
    
                // 添加一个新的专栏
                ::SendMessage(hWndList, LVM_INSERTCOLUMN, 0, (LPARAM)&column);
                // 再添加一个专栏
                column.pszText = "PID";
                column.cx = 50;
                ::SendMessage(hWndList, LVM_INSERTCOLUMN, 1, (LPARAM)&column);
    
                // 刷新进程列表
                UpdateProcess(hWndList);
            }
            break;
    
        case WM_COMMAND:
            switch(LOWORD(wParam))
            {
            case IDCANCEL:
                ::EndDialog(hDlg, IDCANCEL);
                break;
            }
            break;
        }
        return 0;
    }
    
    void UpdateProcess(HWND hWndList)
    {
        // 删除所有的项
        ::SendMessage(hWndList, LVM_DELETEALLITEMS, 0, 0);
    
        int nItem = 0;    // 项计数
    
        PROCESSENTRY32 pe32 = { sizeof(PROCESSENTRY32) }; 
        HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
        if(hProcessSnap == INVALID_HANDLE_VALUE) 
            return; 
        if(Process32First(hProcessSnap, &pe32)) 
        { 
            do 
            { 
                // 取得进程ID号
                char szID[56];
                wsprintf(szID, "%u", pe32.th32ProcessID);
                
                // 插入一个项
                LVITEM item = { 0 };
                item.iItem = nItem;
    
                item.mask = LVIF_TEXT;            // 指定pszText域有效
                item.pszText = (LPTSTR)pe32.szExeFile;    // 设置文本
                
                ::SendMessage(hWndList, LVM_INSERTITEM, 0, (long)&item);
                
                // 设置新项的文本
                LVITEM lvi;
                lvi.iSubItem = 1;        // 指定要设置第1个专栏的文本
                lvi.pszText = (LPTSTR)szID;    // 要设置的文本
                ::SendMessage(hWndList, LVM_SETITEMTEXT, nItem, (LPARAM)&lvi);
    
                nItem++;
                
            } 
            while(Process32Next(hProcessSnap, &pe32)); 
        }
        ::CloseHandle(hProcessSnap);
    }

    在对话框上画一个列表控件后,要把属性中的View设置为:Report

    效果图:

  • 相关阅读:
    python学习之函数基础
    Java并发编程之支持并发的list集合你知道吗
    Java并发编程之CAS第三篇-CAS的缺点及解决办法
    Java并发编程之CAS二源码追根溯源
    Java并发编程之CAS第一篇-什么是CAS
    Java并发编程之验证volatile指令重排-理论篇
    【免费百度网盘不限速】爱奇艺万能联播 百度网盘不限速的方法
    Java并发编程之验证volatile不能保证原子性
    Java并发编程之验证volatile的可见性
    Java并发编程学习前期知识下篇
  • 原文地址:https://www.cnblogs.com/qiangua/p/3463593.html
Copyright © 2020-2023  润新知