追逐自己的梦想----------辅助制作第二十三课:挂机选项卡的实现

本文介绍如何利用C++实现挂机选项卡功能,包括创建对话框类、添加TAB CTRL控件、初始化对话框及处理选项卡切换事件。通过详细步骤,展示挂机页面和测试页面的显示与隐藏,以及后续的数据交互和自动打怪类设计的关键代码。
摘要由CSDN通过智能技术生成

要实现挂机选项卡,首先我们就要新建一个对话框类,并为该对话框类添加关联类,然后在这个对话框上面添加TAB CTRL控件,并为其添加成员变量


然后在主对话框中 的initdialog函数中添加

m_pageMainTabe.Create(CPageMain::IDD);

并且添加一个按钮来显式窗口

m_pageMainTabe.ShowWindow(SW_SHOW);

下面就可以完成对tab控件的初始化了

首先为tab添加一个无边框的对话框,作为他子对话框的页面

然后在他的初始化函数中添加1-n个tab标题

RECT t_recttab;
m_Tabctrl.GetClientRect(&t_recttab);
t_recttab.top += 23;
t_recttab.left += 3;
t_recttab.bottom -= 3;
t_recttab.right -= 3;




m_Tabctrl.InsertItem(0, "挂机页面");
m_PageGuaji.Create(CPageGuaji::IDD);
m_PageGuaji.MoveWindow(&t_recttab);
m_PageGuaji.ShowWindow(SW_SHOW);
m_PageGuaji.SetParent(&m_Tabctrl);


m_Tabctrl.InsertItem(1, "测试");

并未子页面设置位置等。

然后在改变选项卡消息中 添加页面的显式或者隐藏的代码

void CPageMain::OnTcnSelchangeTabmain(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO:  在此添加控件通知处理程序代码
switch (m_Tabctrl.GetCurSel())
{
case 0:
m_PageGuaji.ShowWindow(SW_SHOW);
break;
case 1:
m_PageGuaji.ShowWindow(SW_HIDE);
break;
}
*pResult = 0;
}


以上就完成了对对话框显示的处理。


下面我们要做的就是数据的交互,以及自动打怪类的设计了


#pragma once
#include<Windows.h>
class CAutoPlay
{
public:
	CAutoPlay();
	~CAutoPlay();


public:
	//应用设置
	//开始挂机
	//停止挂机
	 BOOL IsAutoBeatMonster; 
	 DWORD ndTime; //打怪频率
	 HANDLE ht_AutoBeat;
	//挂机回调函数
	 void TjreadProc_AutoBeatMonsterANdPickGoods(LPVOID lpData);
	//开始挂机
	void AutoPlay();
	//停止挂机
	void StopPlay();
};



#include "AutoPlay.h"
#include"HookMainWnd.h"

CAutoPlay g_autoplay; 


//初始化create
CAutoPlay::CAutoPlay()
{
	ndTime = 100;
	DWORD proc = NULL;
	__asm{
		mov eax, TjreadProc_AutoBeatMonsterANdPickGoods
			mov proc , eax
	}
	ht_AutoBeat = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)proc, this, CREATE_SUSPENDED, NULL);
}


CAutoPlay::~CAutoPlay()
{
	TerminateThread(ht_AutoBeat, 1);
}


void CAutoPlay::TjreadProc_AutoBeatMonsterANdPickGoods(LPVOID lpData){

	__asm{
		mov ecx , lpData
		mov this , ecx

	}
	while (true)
	{
		//打怪,捡物
		if (IsAutoBeatMonster){
			msgAutoBeatMosterForSkill("碧波潮生");
		}
		//等待多少毫秒
		Sleep(ndTime);
	}
}


void CAutoPlay::AutoPlay(){
	//恢复线程
	ResumeThread(ht_AutoBeat);

}

void CAutoPlay::StopPlay(){
	//挂起线程
	SuspendThread(ht_AutoBeat);
}


//对话框中的数据的交互
void CPageMain::OnBnClickedButtonSupply()
{
// TODO:  应用设置
m_PageGuaji.UpdateData(TRUE);
g_autoplay.IsAutoBeatMonster = m_PageGuaji.m_chk_IsAutoPlay;


}


以上就是本次程序的关键代码,具体代码看源码点击打开链接


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值