TabControl+ListView
阅读原文时间:2023年07月13日阅读:2

#include
#include
#include

#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);

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章