⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 minecrackdlg.cpp

📁 Windows XP/2000/NT 中扫雷的外挂程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// MineCrackDlg.cpp : implementation file
//

#include "stdafx.h"
#include "MineCrack.h"
#include "MineCrackDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMineCrackDlg dialog

CMineCrackDlg::CMineCrackDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CMineCrackDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CMineCrackDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

	m_nWidth = m_nHeight =0;
	m_nMineNum = 0;
	m_nMineCurNum = 0;

	m_bWin98 = FALSE;
	m_bStart = FALSE;
	m_map = NULL;
}

void CMineCrackDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMineCrackDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CMineCrackDlg, CDialog)
	//{{AFX_MSG_MAP(CMineCrackDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BTSTART, OnBtstart)
	ON_BN_CLICKED(IDC_BTSWEEPMINE, OnBtsweepmine)
	ON_BN_CLICKED(IDC_ABOUT, OnAbout)
	ON_WM_COPYDATA()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMineCrackDlg message handlers

BOOL CMineCrackDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	srand((unsigned)time(NULL));
	rand();

	DWORD dwBuild;
	
	DWORD dwVersion = GetVersion();
	
	// Get major and minor version numbers of Windows
	DWORD dwWindowsMajorVersion =  (DWORD)(LOBYTE(LOWORD(dwVersion)));
	DWORD dwWindowsMinorVersion =  (DWORD)(HIBYTE(LOWORD(dwVersion)));
	// Get build numbers for Windows NT or Win32s
	if (dwVersion < 0x80000000)                // Windows NT
		dwBuild = (DWORD)(HIWORD(dwVersion));
	else if (dwWindowsMajorVersion < 4)        // Win32s
		dwBuild = (DWORD)(HIWORD(dwVersion) & ~0x8000);
	else         // Windows 95 and Windows 98 -- No build numbers provided
		dwBuild =  0;
	
	CString str;
	WORD lan = (WORD)::GetSystemDefaultLangID();
	if (lan == 0x0804) 	
		winMineClassName = "扫雷";
	else if (lan == 0x0409)	
		winMineClassName = "Minesweeper";
	
	if (dwWindowsMajorVersion==5 && dwWindowsMinorVersion==2)
	{
		str.Format("Windows 2003  %d.%d.%d, %s", dwWindowsMajorVersion,
			dwWindowsMinorVersion, dwBuild, (lan == 0x0804) ? "简体中文版" : "English(USA) Edition");
		m_bWin98 = TRUE;
	} 
	else if(dwWindowsMajorVersion==5 && dwWindowsMinorVersion==1) 
	{
		str.Format("Windows XP  %d.%d.%d, %s",dwWindowsMajorVersion,
			dwWindowsMinorVersion,dwBuild, (lan == 0x0804) ? "简体中文版" : "English(USA) Edition");
		m_bWin98 = FALSE;
	} 
	else if(dwWindowsMajorVersion==5 && dwWindowsMinorVersion==0) 
	{
		str.Format("Windows 2000  %d.%d.%d, %s",dwWindowsMajorVersion,
			dwWindowsMinorVersion,dwBuild, (lan == 0x0804) ? "简体中文版" : "English(USA) Edition");
		m_bWin98 = FALSE;
	} 
	else if(dwWindowsMajorVersion==4 && dwWindowsMinorVersion==10) 
	{
		str.Format("Windows 98  %d.%d.%d, %s",dwWindowsMajorVersion,
			dwWindowsMinorVersion,dwBuild, (lan == 0x0804) ? "简体中文版" : "English(USA) Edition");
		m_bWin98 = TRUE;
	}
	else 
	{
		str.Format("Unknow Windows %d.%d.%d, %s",dwWindowsMajorVersion,
			dwWindowsMinorVersion,dwBuild, (lan == 0x0804) ? "简体中文版" : "English(USA) Edition");
		m_bWin98 = TRUE;
	}

	( (CStatic *)GetDlgItem(IDC_STCSHOW) ) -> SetWindowText(str);

/*
	CFile fl;
	if ( fl.Open("Sign.bmp", CFile::modeRead) )
	{
		BITMAPFILEHEADER bitmapfileheader;
		BITMAPINFOHEADER bitmapinfoheader;
		fl.Read((void *)&bitmapfileheader, sizeof(BITMAPFILEHEADER));
		ASSERT(bitmapfileheader.bfType == 0x4d42);	//BM
		fl.Read((void *)&bitmapinfoheader, sizeof(BITMAPINFOHEADER));
		ASSERT(bitmapinfoheader.biWidth == 16);		//位图宽16像素
		ASSERT(bitmapinfoheader.biHeight == 256);	//位图高256像素
		ASSERT(bitmapinfoheader.biBitCount == 4);	//位图为16色
		BYTE * bmpData = new BYTE[bitmapinfoheader.biSizeImage];
		fl.Seek(bitmapfileheader.bfOffBits, CFile::begin);
		fl.Read(bmpData, bitmapinfoheader.biSizeImage);
		
		for( int i=0; i<16; i++)
			for( int j=0; j<8; j++)
				m_ColorSample[i][j] = * (bmpData + i*256/2 + 8*8 + j);
		delete bmpData;
		fl.Close();
	}
	else
	{
		MessageBox("Sign.bmp 文件不存在!");
		CDialog::EndDialog(0);
		return FALSE;
	}

*/

	m_ColorSample[ 0][ 0] = 0x78; 
	m_ColorSample[ 0][ 1] = 0x88;
	m_ColorSample[ 0][ 2] = 0x88;
	m_ColorSample[ 0][ 3] = 0x88;
	m_ColorSample[ 0][ 4] = 0x88;
	m_ColorSample[ 0][ 5] = 0x88;
	m_ColorSample[ 0][ 6] = 0x88;
	m_ColorSample[ 0][ 7] = 0x88;
	m_ColorSample[ 1][ 0] = 0x78;
	m_ColorSample[ 1][ 1] = 0x88;
	m_ColorSample[ 1][ 2] = 0x88;
	m_ColorSample[ 1][ 3] = 0x8c;
	m_ColorSample[ 1][ 4] = 0xcc;
	m_ColorSample[ 1][ 5] = 0x88;
	m_ColorSample[ 1][ 6] = 0x88;
	m_ColorSample[ 1][ 7] = 0x88;
	m_ColorSample[ 2][ 0] = 0x78;
	m_ColorSample[ 2][ 1] = 0x88;
	m_ColorSample[ 2][ 2] = 0x88;
	m_ColorSample[ 2][ 3] = 0x88;
	m_ColorSample[ 2][ 4] = 0x22;
	m_ColorSample[ 2][ 5] = 0x22;
	m_ColorSample[ 2][ 6] = 0x88;
	m_ColorSample[ 2][ 7] = 0x88;
	m_ColorSample[ 3][ 0] = 0x78;
	m_ColorSample[ 3][ 1] = 0x88;
	m_ColorSample[ 3][ 2] = 0x88;
	m_ColorSample[ 3][ 3] = 0x99;
	m_ColorSample[ 3][ 4] = 0x99;
	m_ColorSample[ 3][ 5] = 0x99;
	m_ColorSample[ 3][ 6] = 0x88;
	m_ColorSample[ 3][ 7] = 0x88;
	m_ColorSample[ 4][ 0] = 0x78;
	m_ColorSample[ 4][ 1] = 0x84;
	m_ColorSample[ 4][ 2] = 0x44;
	m_ColorSample[ 4][ 3] = 0x44;
	m_ColorSample[ 4][ 4] = 0x44;
	m_ColorSample[ 4][ 5] = 0x44;
	m_ColorSample[ 4][ 6] = 0x48;
	m_ColorSample[ 4][ 7] = 0x88;
	m_ColorSample[ 5][ 0] = 0x78;
	m_ColorSample[ 5][ 1] = 0x81;
	m_ColorSample[ 5][ 2] = 0x11;
	m_ColorSample[ 5][ 3] = 0x11;
	m_ColorSample[ 5][ 4] = 0x11;
	m_ColorSample[ 5][ 5] = 0x11;
	m_ColorSample[ 5][ 6] = 0x88;
	m_ColorSample[ 5][ 7] = 0x88;
	m_ColorSample[ 6][ 0] = 0x78;
	m_ColorSample[ 6][ 1] = 0x86;
	m_ColorSample[ 6][ 2] = 0x66;
	m_ColorSample[ 6][ 3] = 0x66;
	m_ColorSample[ 6][ 4] = 0x66;
	m_ColorSample[ 6][ 5] = 0x66;
	m_ColorSample[ 6][ 6] = 0x88;
	m_ColorSample[ 6][ 7] = 0x88;
	m_ColorSample[ 7][ 0] = 0x78;
	m_ColorSample[ 7][ 1] = 0x88;
	m_ColorSample[ 7][ 2] = 0x88;
	m_ColorSample[ 7][ 3] = 0x88;
	m_ColorSample[ 7][ 4] = 0x80;
	m_ColorSample[ 7][ 5] = 0x00;
	m_ColorSample[ 7][ 6] = 0x88;
	m_ColorSample[ 7][ 7] = 0x88;
	m_ColorSample[ 8][ 0] = 0x78;
	m_ColorSample[ 8][ 1] = 0x88;
	m_ColorSample[ 8][ 2] = 0x77;
	m_ColorSample[ 8][ 3] = 0x77;
	m_ColorSample[ 8][ 4] = 0x77;
	m_ColorSample[ 8][ 5] = 0x77;
	m_ColorSample[ 8][ 6] = 0x88;
	m_ColorSample[ 8][ 7] = 0x88;
	m_ColorSample[ 9][ 0] = 0x78;
	m_ColorSample[ 9][ 1] = 0x88;
	m_ColorSample[ 9][ 2] = 0x88;
	m_ColorSample[ 9][ 3] = 0x88;
	m_ColorSample[ 9][ 4] = 0x88;
	m_ColorSample[ 9][ 5] = 0x00;
	m_ColorSample[ 9][ 6] = 0x88;
	m_ColorSample[ 9][ 7] = 0x88;
	m_ColorSample[10][ 0] = 0x78;
	m_ColorSample[10][ 1] = 0x88;
	m_ColorSample[10][ 2] = 0x00;
	m_ColorSample[10][ 3] = 0xff;
	m_ColorSample[10][ 4] = 0x00;
	m_ColorSample[10][ 5] = 0x00;
	m_ColorSample[10][ 6] = 0x08;
	m_ColorSample[10][ 7] = 0x88;
	m_ColorSample[11][ 0] = 0x78;
	m_ColorSample[11][ 1] = 0x88;
	m_ColorSample[11][ 2] = 0x00;
	m_ColorSample[11][ 3] = 0x99;
	m_ColorSample[11][ 4] = 0x09;
	m_ColorSample[11][ 5] = 0x90;
	m_ColorSample[11][ 6] = 0x08;
	m_ColorSample[11][ 7] = 0x88;
	m_ColorSample[12][ 0] = 0x79;
	m_ColorSample[12][ 1] = 0x99;
	m_ColorSample[12][ 2] = 0x00;
	m_ColorSample[12][ 3] = 0xff;
	m_ColorSample[12][ 4] = 0x00;
	m_ColorSample[12][ 5] = 0x00;
	m_ColorSample[12][ 6] = 0x09;
	m_ColorSample[12][ 7] = 0x99;
	m_ColorSample[13][ 0] = 0xff;
	m_ColorSample[13][ 1] = 0x88;
	m_ColorSample[13][ 2] = 0x88;
	m_ColorSample[13][ 3] = 0x88;
	m_ColorSample[13][ 4] = 0x00;
	m_ColorSample[13][ 5] = 0x88;
	m_ColorSample[13][ 6] = 0x88;
	m_ColorSample[13][ 7] = 0x77;
	m_ColorSample[14][ 0] = 0xff;
	m_ColorSample[14][ 1] = 0x88;
	m_ColorSample[14][ 2] = 0x88;
	m_ColorSample[14][ 3] = 0x89;
	m_ColorSample[14][ 4] = 0x98;
	m_ColorSample[14][ 5] = 0x88;
	m_ColorSample[14][ 6] = 0x88;
	m_ColorSample[14][ 7] = 0x77;
	m_ColorSample[15][ 0] = 0xff;
	m_ColorSample[15][ 1] = 0x88;
	m_ColorSample[15][ 2] = 0x88;
	m_ColorSample[15][ 3] = 0x88;
	m_ColorSample[15][ 4] = 0x88;
	m_ColorSample[15][ 5] = 0x88;
	m_ColorSample[15][ 6] = 0x88;
	m_ColorSample[15][ 7] = 0x77;

	StartGame();

	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CMineCrackDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CMineCrackDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CMineCrackDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CMineCrackDlg::StartGame()
{
	hWinMineWnd = ::FindWindow(winMineClassName,NULL);
	
	if (hWinMineWnd == NULL) 
	{
		TCHAR strSysPath[ MAX_PATH ] = { '0' };
		GetWindowsDirectory( strSysPath, MAX_PATH );
		lstrcat( strSysPath, TEXT( "\\System32\\WinMine.exe" ) );
		
		PROCESS_INFORMATION ProcessInfo;
		STARTUPINFO	StartupInfo;
		ZeroMemory( & ProcessInfo, sizeof( PROCESS_INFORMATION ) );
		ZeroMemory( & StartupInfo, sizeof( STARTUPINFO ) );
		StartupInfo.cb = sizeof( StartupInfo );
		
		if ( CreateProcess( strSysPath,
			NULL, NULL, NULL, FALSE, 0, NULL, NULL, 
			&StartupInfo, &ProcessInfo ) )
		{
			WaitForInputIdle( ProcessInfo.hProcess, INFINITE );
			hWinMineWnd = ::FindWindow(winMineClassName,NULL);
			ASSERT( hWinMineWnd );
		}
	}	
	
	if(::IsIconic(hWinMineWnd))	::ShowWindow(hWinMineWnd,SW_SHOWNORMAL);
	::BringWindowToTop(hWinMineWnd);
	::SetActiveWindow(hWinMineWnd);
	
	CRect rectWinMinelocal, rectMelocal;
	::GetWindowRect(hWinMineWnd, &rectWinMinelocal);
	::GetWindowRect(CWnd::m_hWnd, &rectMelocal);
	
	if ( rectWinMine != rectWinMinelocal || rectMe != rectMelocal )
	{
		int cxScreen = ::GetSystemMetrics(SM_CXSCREEN);
		int cyScreen = ::GetSystemMetrics(SM_CYSCREEN);
		::MoveWindow(
			hWinMineWnd, 
			(cxScreen-(rectWinMinelocal.right-rectWinMinelocal.left)-(rectMelocal.right-rectMelocal.left))/2,
			(cyScreen-(rectWinMinelocal.bottom-rectWinMinelocal.top))/2,
			rectWinMinelocal.right-rectWinMinelocal.left,
			rectWinMinelocal.bottom-rectWinMinelocal.top,
			TRUE);
		::MoveWindow(
			CWnd::m_hWnd,
			(cxScreen+(rectWinMinelocal.right-rectWinMinelocal.left)-(rectMelocal.right-rectMelocal.left))/2,
			(cyScreen-(rectWinMinelocal.bottom-rectWinMinelocal.top))/2,
			rectMelocal.right-rectMelocal.left,
			rectMelocal.bottom-rectMelocal.top,
			TRUE);
		
		::GetWindowRect(hWinMineWnd, &rectWinMine);
		::GetWindowRect(CWnd::m_hWnd, &rectMe);
		
		CRect tmpRect;
		::GetClientRect(hWinMineWnd, &tmpRect);
		if(m_bWin98)
		{
			m_nWidth=(tmpRect.right-tmpRect.left-24)/16;
			m_nHeight=(tmpRect.bottom-tmpRect.top-67)/16;
		}
		else
		{
			m_nWidth=(tmpRect.right-tmpRect.left-20)/16;
			m_nHeight=(tmpRect.bottom-tmpRect.top-63)/16;
		}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -