58.模块列表界面

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

内容参考于:易道云信息技术研究院

上一个内容:57.获取进程列表

以 57.获取进程列表 它的代码为基础进行修改

效果图:

首先添加一个tab控件

然后给tab控件添加一个变量

tab控件的属性

然后新创建一个Dialog,并给它拖入一个List控件

dialog的属性

然后给新加的Dialog添加类,list控件添加变量

CWndINC.h文件内容:

#pragma once
#include "CWindProcess.h"
#include "CWndModuleList.h"

#define MAX_PAGE 2
// CWndINC 对话框

class CWndINC : public CDialogEx
{
    DECLARE_DYNAMIC(CWndINC)

public:
    CWndINC(CWnd* pParent = nullptr);   // 标准构造函数
    virtual ~CWndINC();

// 对话框数据
#ifdef AFX_DESIGN_TIME
    enum { IDD = IDD_PAGE_1 };
#endif

protected:
    virtual BOOL OnInitDialog();
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

    DECLARE_MESSAGE_MAP()
public:
    CWindProcess wndProcess;
    CString UExe;
    CString UExeRoot;
    CTabCtrl mTab;
    CWndModuleList modPage[MAX_PAGE]; 
    CDialogEx* Pages[MAX_PAGE];
    int CurPage{};
public:
    afx_msg void OnBnClickedButton1();
    afx_msg void OnBnClickedButton2();
    void SetProcess(unsigned Pid, CString& wExe, BOOL bFirst = FALSE);
    bool InstallPage(CDialogEx* wnd, int IDD_WND, CString&& _Name, BOOL IsShow);
    
    
    afx_msg void OnSize(UINT nType, int cx, int cy);
    afx_msg void OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult);
};

 CWndINC.cpp文件的修改:

// 下方是修改了的函数
BOOL CWndINC::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    InstallPage(&modPage[0], IDD_MOD_LIST, L"正常进程", TRUE);
    InstallPage(&modPage[1], IDD_MOD_LIST, L"感染进程", TRUE);

    return 0;
}

// 下方是新加的函数
bool CWndINC::InstallPage(CDialogEx* wnd, int IDD_WND, CString&& _Name, BOOL IsShow)
{
    if (CurPage > MAX_PAGE) {
        return false;
    }

    Pages[CurPage] = wnd;

    Pages[CurPage]->Create(IDD_WND, &mTab);
    //Pages[CurPage]->SetParent(this);
    Pages[CurPage]->ShowWindow(IsShow);

    CRect rect;
    mTab.GetClientRect(&rect);

    rect.top += 0;
    rect.left += 5;
    rect.bottom -= 25;
    rect.right += 0;
    Pages[CurPage]->MoveWindow(&rect);
    mTab.InsertItem(CurPage, _Name);

    CurPage++;

    return true;
}

void CWndINC::OnSize(UINT nType, int cx, int cy)
{
    CDialogEx::OnSize(nType, cx, cy);

    // TODO: 在此处添加消息处理程序代码
    CDialogEx::OnSize(nType, cx, cy);

    if (nType == 1 || !mTab)return;
    CRect rect;
    GetClientRect(&rect);

    rect.top += 00;
    rect.left += 0;
    rect.bottom -= 130;
    rect.right += 0;

    for (int i = 0; i < CurPage; i++) {
        if (Pages[i]) {
            Pages[i]->MoveWindow(&rect);
        }
    }
}


void CWndINC::OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)
{
    // TODO: 在此添加控件通知处理程序代码
    *pResult = 0;
    // 得到当前选择的tab
    int n = mTab.GetCurSel();
    for (int i = 0; i < CurPage; i++) {
        Pages[i]->ShowWindow(i == n);
    }
}

CWndModuleList.cpp文件里的内容:CWndModuleList.cpp是新加Dialogd的类

// CWndModuleList.cpp: 实现文件
//

#include "pch.h"
#include "GAMEHACKER2.h"
#include "CWndModuleList.h"
#include "afxdialogex.h"


// CWndModuleList 对话框

IMPLEMENT_DYNAMIC(CWndModuleList, CDialogEx)

CWndModuleList::CWndModuleList(CWnd* pParent /*=nullptr*/)
    : CDialogEx(IDD_MOD_LIST, pParent)
{

}

CWndModuleList::~CWndModuleList()
{
}

void CWndModuleList::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_LIST1, LstModule);
}

BOOL CWndModuleList::OnInitDialog()
{
        CDialogEx::OnInitDialog();

        LONG_PTR lStyle;
        // 得到窗口的样式,GWL_STYLE在GetWindowLongPtr说明中有
        lStyle = GetWindowLongPtr(LstModule.m_hWnd, GWL_STYLE);
        lStyle |= LVS_REPORT;
        SetWindowLongPtr(LstModule.m_hWnd, GWL_STYLE, lStyle);

        DWORD dStyle = LstModule.GetExtendedStyle();
        dStyle |= LVS_EX_FULLROWSELECT;
        dStyle |= LVS_EX_GRIDLINES;
        LstModule.SetExtendedStyle(dStyle);

        LstModule.InsertColumn(0, L"模块名称", 0, 200);
        LstModule.InsertColumn(1, L"基址", 0, 400);
        LstModule.InsertColumn(2, L"大小", 0, 400);
        LstModule.InsertColumn(3, L"文件位置", 0, 400);

        return TRUE;
}


BEGIN_MESSAGE_MAP(CWndModuleList, CDialogEx)
END_MESSAGE_MAP()


// CWndModuleList 消息处理程序

CWndModuleList.h文件内容:CWndModuleList.h是新加Dialogd的类

#pragma once


// CWndModuleList 对话框

class CWndModuleList : public CDialogEx
{
    DECLARE_DYNAMIC(CWndModuleList)

public:
    CWndModuleList(CWnd* pParent = nullptr);   // 标准构造函数
    virtual ~CWndModuleList();

// 对话框数据
#ifdef AFX_DESIGN_TIME
    enum { IDD = IDD_MOD_LIST };
#endif

protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

    DECLARE_MESSAGE_MAP()
public:
    CListCtrl LstModule;
public:
    virtual BOOL OnInitDialog();
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值