26.入口点注入项目搭建

上一个内容:25.入口点注入

首先创建一个mfc项目:

然后

然后

然后就创建好了,选择Dlg自定义比较方便

然后可以设置一下项目的版本信息

然后设置一下tab,让它可以随着窗口的大小进行灵活变更

tab设置之后的效果图:

然后添加一个tab的变量,点完成

在下图红框位置添加额外的初始化代码

然后先插入两个Dialog

它们的样式属性要设置为Child,否则主页面的TAb控制没法切换

然后给新加的Dialog添加上类

双击下图红框位置可以自动创建一个函数,这个函数是用来切换的

函数图:

代码:

GAMEHACKERDlg.cpp文件

bool CGAMEHACKERDlg::InstallPage(CDialogEx* wnd, int IDD_WND, CString&& _Name, BOOL IsShow)
{
    if (CurPage >= MAX_PAGE) {
        return false;
    }

    Pages[CurPage] = wnd;

    Pages[CurPage]->Create(IDD_WND);
    Pages[CurPage]->SetParent(this);
    Pages[CurPage]->ShowWindow(IsShow);

    CRect rect;
    mTab.GetClientRect(&rect);

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

    CurPage++;
    return false;
}

    InstallPage(&PageINJ, IDD_PAGE_0, L"注入", TRUE);
    InstallPage(&PageINC, IDD_PAGE_1, L"注入检测");

void CGAMEHACKERDlg::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);
    }
}

GAMEHACKERDlg.h文件

protected:
    HICON m_hIcon;
    
    CWndINJ PageINJ;
    CWndINC PageINC;

    CDialogEx* Pages[MAX_PAGE];
    // CString Name[MAX_PAGE];
    short CurPage = 0;

    bool InstallPage(CDialogEx* wnd, int IDD_WND, CString&& _Name, BOOL IsShow = FALSE);

    // 生成的消息映射函数
    virtual BOOL OnInitDialog();
    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    DECLARE_MESSAGE_MAP()
public:
    
    CTabCtrl mTab;
    afx_msg void OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult);
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值