Eaglooe 学习日记2

**

Eaglooe 学习日记2

**

首先在Cheat.cpp的

  1. 开辟一个线程
BOOL CCheatApp::InitInstance()
{
	CWinApp::InitInstance();
	//开辟一个线程
	g_hUIThread = ::CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)UIThread, NULL, 0, 0);
	return TRUE;
}
  1. 去做UIThread这件事
  2. g_hUIThread是一个全局句柄
  3. 加LPTHREAD_START_ROUTINE 强制编译强转
g_hUIThread = ::CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)UIThread, NULL, 0, 0);
  1. 然后在外面添加全局变量
HANDLE g_hUIThread; //默认初始化为空
HANDLE g_hFreeThread;
  1. 在外面添加 UIThread 界面
void UIThread(void *Param)
{
}
  1. 会变成这样子
// 会变成这样子
#include "stdafx.h"
#include "Cheat.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

BEGIN_MESSAGE_MAP(CCheatApp, CWinApp)
END_MESSAGE_MAP()

CCheatApp::CCheatApp()
{
}

CCheatApp theApp;

HANDLE g_hUIThread; 		//**********

void UIThread(void *Param) 	//**********
{
}

// CCheatApp 初始化
BOOL CCheatApp::InitInstance()//程序先执行这里
{
	CWinApp::InitInstance();//主线程执行
	
	//开辟一个线程
	g_hUIThread = ::CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)UIThread, NULL, 0, 0);
	return TRUE;
}

把创建的窗口,右击 添加类,加入到头文件和源文件,头文件会出现CMainView.h

  1. 在Cheat.cpp添加头文件
#include "CMainView.h"
  1. (搭建框架)把资源切换到我们的模块中最后释放掉
  • 使用 AFX_MANAGE_STATE() 来切换资源到 AfxGetStaticModuleState() 这个目录
AFX_MANAGE_STATE(AfxGetStaticModuleState());
  • 用 hResOld 保存旧句柄
HINSTANCE hResOld = AfxGetResourceHandle(); 
  • AfxSetResourceHandle() 设置资源句柄为我们自己的theApp目录
AfxSetResourceHandle(theApp.m_hInstance);

把CMainView窗口叫出来,设定元素为模态窗口,类似关于,帮助等等的窗口,不把它关掉是无法进行下一步的

	CMainView* MainDlg = new CMainView();
	MainDlg->DoModal();		
  • 创建一个线程去关掉MainDlg
    其中 FreeLibrary 是释放模块
    C语言强转为 (LPTHREAD_START_ROUTINE) FreeLibrary
    C++强转为 reinterpret_cast<LPTHREAD_START_ROUTINE>(FreeLibrary)

	delete MainDlg;		//关掉后,释放掉
	MainDlg = NULL;		//好习惯
	g_hFreeThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)FreeLibrary, theApp.m_hInstance, 0, 0);
	CloseHandle(g_hUIThread);		//释放界面线程的句柄
	CloseHandle(g_hFreeThread);		//释放销毁线程的句柄
  • 刚刚创建的旧句柄呼唤回去,资源切换回去。
	AfxSetResourceHandle(hResOld);// 使用旧句柄

完成后的完整代码:

// 完成后的完整代码
#include "stdafx.h"
#include "Cheat.h"
#include "CMainView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

BEGIN_MESSAGE_MAP(CCheatApp, CWinApp)
END_MESSAGE_MAP()

CCheatApp::CCheatApp()
{
}

CCheatApp theApp;

HANDLE g_hUIThread; 
HANDLE g_hFreeThread;
void UIThread(void *Param)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());	//把资源切换到我们的模块中
	HINSTANCE hResOld = AfxGetResourceHandle(); 	//保存旧句柄
	AfxSetResourceHandle(theApp.m_hInstance);		//使用我们的模块
	
	//创建界面出来
	CMainView* MainDlg = new CMainView();
	MainDlg->DoModal();
	
	//关闭了窗口才会执行这里跟后面

	delete MainDlg;		//关掉后,释放掉
	MainDlg = NULL;		//好习惯
	
	//创建线程去释放掉模块:FreeLibrary是释放模块
	g_hFreeThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)FreeLibrary, theApp.m_hInstance, 0, 0);
	CloseHandle(g_hUIThread);		//释放界面线程的句柄
	CloseHandle(g_hFreeThread);		//释放销毁线程的句柄
	//资源切换回去
	AfxSetResourceHandle(hResOld);
}

// CCheatApp 初始化
BOOL CCheatApp::InitInstance()
{
	CWinApp::InitInstance();
	g_hUIThread = ::CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)UIThread, NULL, 0, 0);
	return TRUE;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值