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

📄 miniguidlg.cpp

📁 内含纯DOS,WIN32控制台和WIN32 GUI三个版本.它们生成的备份文件可以在任何版本中使用. WIN32 GUI版本暂使用备份功能(其他模块也都已全部写好,全是完整的,现在仅开启备份功能),如
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// miniGUIDlg.cpp : implementation file
//

#include "stdafx.h"
#include "miniGUI.h"
#include "miniGUIDlg.h"

#include "mini.c"


#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()

/////////////////////////////////////////////////////////////////////////////
// CMiniGUIDlg dialog

CMiniGUIDlg::CMiniGUIDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CMiniGUIDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CMiniGUIDlg)
	
	m_mode = -1;
	m_letterMode = -1;
	m_target = -1;
	m_all = FALSE;
	m_yes = FALSE;
	m_hdd = FALSE;
	m_part = FALSE;
	m_letter = FALSE;

 start=false;
 pause=false;
 stop=false;
finish=false;
addedDriveString=false;
addedPartString=false;


	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CMiniGUIDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMiniGUIDlg)
	DDX_Control(pDX, IDC_COMBO4, m_print);
	DDX_Control(pDX, IDC_COMBO3, m_combo3);
	DDX_Control(pDX, IDC_COMBO2, m_combo2);
	DDX_Control(pDX, IDC_COMBO1, m_combo);
	DDX_Radio(pDX, IDC_RADIO1, m_mode);
	DDX_Radio(pDX, IDC_RADIO6, m_letterMode);
	DDX_Radio(pDX, IDC_RADIO8, m_target);
	DDX_Check(pDX, IDC_CHECK4, m_all);
	DDX_Check(pDX, IDC_CHECK5, m_yes);
	DDX_Check(pDX, IDC_CHECK1, m_hdd);
	DDX_Check(pDX, IDC_CHECK2, m_part);
	DDX_Check(pDX, IDC_CHECK3, m_letter);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CMiniGUIDlg, CDialog)
	//{{AFX_MSG_MAP(CMiniGUIDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_CHECK1, OnCheck1)
	ON_BN_CLICKED(IDC_CHECK2, OnCheck2)
	ON_BN_CLICKED(IDC_CHECK3, OnCheck3)
	ON_BN_CLICKED(IDC_RADIO8, OnRadio8)
	ON_BN_CLICKED(IDC_RADIO9, OnRadio9)
	ON_BN_CLICKED(IDC_CHECK4, OnCheck4)
	ON_BN_CLICKED(IDC_RADIO10, OnRadio10)
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
	ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
	ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
	ON_WM_LBUTTONDOWN()
	ON_CBN_SETFOCUS(IDC_COMBO1, OnSetfocusCombo1)
	ON_BN_CLICKED(IDC_RADIO6, OnRadio6)
	ON_BN_CLICKED(IDC_RADIO7, OnRadio7)
	ON_CBN_SETFOCUS(IDC_COMBO2, OnSetfocusCombo2)
	ON_CBN_SETFOCUS(IDC_COMBO3, OnSetfocusCombo3)
	ON_BN_CLICKED(IDC_RADIO2, OnRadio2)
	ON_BN_CLICKED(IDC_RADIO1, OnRadio1)
	ON_BN_CLICKED(IDC_RADIO3, OnRadio3)
	ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
	ON_BN_CLICKED(IDC_BUTTON6, OnButton6)
	ON_CBN_SETFOCUS(IDC_COMBO4, OnSetfocusCombo4)
	ON_BN_CLICKED(IDC_BUTTON7, OnButton7)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMiniGUIDlg message handlers

BOOL CMiniGUIDlg::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
	((CProgressCtrl *)GetDlgItem(IDC_PROGRESS1))->SetRange(0,65535);
GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);



memset(&argu,0,sizeof(ARGU));
argu.printDriveOption=PRINT_DRIVE_ALL;
argu.printPartOption=PRINT_PARTITION_ALL;
argu.mode=INVALID_MODE;
argu.target=INVALID_TARGET;
argu.mode=SAVE;

argu.winTRUE=1;
memset(argu.fileStr,0,MAXPATH);
OnButton7();


/*
int item=0;
	CString drive;
	
	UpdateData(TRUE);


	for(i=0;argu.driveTable[i] && argu.driveTable[i]->number>0;i++)		
		item++;
	if(item) 
	{
		m_combo2.ResetContent();
		m_combo2.InitStorage(item+1,3);
		m_combo2.AddString("");
	}
	else return 0;
for(i=0;i<item;i++)		
{
	drive.Format("%d",argu.driveTable[i]->number);
	m_combo2.AddString(drive);
}
*/


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

void CMiniGUIDlg::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 CMiniGUIDlg::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 CMiniGUIDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}


int CMiniGUIDlg::OnButton1() 
{
	// TODO: Add your control notification handler code here
		
/*if(start==false) start=true;*/
if(start==true) return 0;
	

if(stop==true) stop=false;
/*((CProgressCtrl *)GetDlgItem(IDC_PROGRESS1))->SetPos(0);*/

/*
memset(&argu,0,sizeof(ARGU));
argu.printDriveOption=PRINT_DRIVE_ALL;
argu.printPartOption=PRINT_PARTITION_ALL;
argu.mode=INVALID_MODE;
argu.target=INVALID_TARGET;
argu.mode=SAVE;

argu.winTRUE=1;*/

CString startReport;
/*
int i;	


	for(i=0;i<MAX_DRIVE_NUM;i++)
		argu.driveTable[i]=NULL;
	
	for(i=0;i<MAX_PARTITION_NUM;i++)
		argu.partitionTable[i]=NULL;
	
	for(i=0;i<MAX_TASK_NUM;i++)
		argu.srcStr[i]=NULL;
	
	for(i=0;i<MAX_TASK_NUM;i++)
		argu.dstStr[i]=NULL;
	
	for(i=0;i<MAX_TASK_NUM;i++)
		argu.src[i]=NULL;
	
	for(i=0;i<MAX_TASK_NUM;i++)
		argu.dst[i]=NULL;
		
	memset(argu.fileStr,0,MAXPATH);*/


int option;
bool check;
CString drive,partition,letter,deviceStr,file;

	UpdateData();


switch(m_mode)
{
case 0 : argu.mode=SAVE; startReport="保存 "; break;
case 1 : argu.mode=RESTORE; startReport="恢复 "; break;
case 2 : argu.mode=REPLACE; startReport="替换 "; break;
case 3 : argu.mode=COMPARE; startReport="比较 "; break;
case 4 : argu.mode=PRINT; startReport="显示 "; break;
default : argu.mode=SAVE; startReport="保存 ";
}

if(argu.mode==COMPARE ||  argu.mode==PRINT)
{
	MessageBox("此功能正在建设中。");
	
	return 0;
}



CString targetStr;
switch(m_target)
{
case 0 : argu.target=DPT; targetStr="分区表"; break;
case 1 : argu.target=DBR; targetStr="分区引导"; break;
case 2 : argu.target=FAT; targetStr="文件分配表"; break;
/*default : argu.target=DBR; targetStr="分区引导";*/
}

if(argu.mode==RESTORE) argu.target=INVALID_TARGET; 
if(argu.mode==REPLACE && argu.target==DPT) ((CButton *)GetDlgItem(IDC_RADIO8))->SetCheck(0);

switch(m_letterMode)
{
case 0 : argu.winTRUE=1; break;
case 1 : argu.winTRUE=0; break;
default : argu.winTRUE=1;
}

 argu.allTRUE=(m_all ? 1 : 0);
 argu.yesTRUE=(m_yes ? 1 : 0);
/*
GetDlgItemText(IDC_COMBO2,drive);
GetDlgItemText(IDC_COMBO3,partition);
GetDlgItemText(IDC_COMBO1,letter);
*/


GetDlgItemText(IDC_COMBO2,drive);
 GetDlgItemText(IDC_COMBO3,partition);
 GetDlgItemText(IDC_COMBO1,letter);

GetDlgItemText(IDC_EDIT5,file);


/*
if(strcmpi((char *)(LPCSTR)drive,"no")==0) drive.Empty();*/

	if(drive.IsEmpty()==FALSE)
	
		deviceStr=drive+(partition.IsEmpty() ? "" : ":"+partition);	

else if(letter.IsEmpty()==FALSE)
deviceStr=letter;
/*		
if(deviceStr.IsEmpty()==FALSE)
{
	argu.mainArg=(commonArg *)malloc(sizeof(commonArg));
	getCommonArgFromArg((char *)(LPCSTR)deviceStr,argu.driveTable,argu.partitionTable,&(argu.mainArg),argu.winTRUE);
	


}*/




if(file.IsEmpty()==FALSE)
{
	strcpy(argu.fileStr,(char *)(LPCSTR)file);
	argu.fileTRUE=1;
}
/*
if(argu.mode!=SAVE)
{
	MessageBox("WIN图形界面 测试版,目前仅支持备份操作。");
start=false;
	return 0;
}*/

/*
file.Format("mode=%d device=%s target=%d file=%s ",mode,(char *)(LPCSTR)deviceStr,target,fileStr);

MessageBox(file);*

/*return 0;*/
	
/*
	getDriveTable(driveTable,useFloppyTRUE,ignoreHDDparameterTRUE);
	
	getPartitionTable(driveTable,partitionTable);
	putInDOSletter(partitionTable);
	
	if(ntfsproTRUE || ifsTRUE)
		putInExtraLetter(partitionTable,(ntfsproTRUE ? NTFSPRO : IFS));
	
	
getWINletterVol(partitionTable);

	WINgetDiskFreeSpace(partitionTable);
	*/
/*	
getDriveTable(argu.driveTable,argu.useFloppyTRUE,argu.ignoreHDDparameterTRUE);


	getPartitionTable(argu.driveTable,argu.partitionTable);


	
	putInDOSletter(argu.partitionTable);
	
	
	
getWINletterVol(argu.partitionTable);*/

argu.mainArg=NULL;
if(deviceStr.IsEmpty()==FALSE && argu.mode!=RESTORE)
{
/*	argu.mainArg=(commonArg *)malloc(sizeof(commonArg));*/
	
	if(getCommonArgFromArg((char *)(LPCSTR)deviceStr,argu.driveTable,argu.partitionTable,&(argu.mainArg),argu.winTRUE)!=0)
	{
		/*start=false;*/
		MessageBox("硬盘/分区/盘符 输入错误:\n"+deviceStr);
/*	SetDlgItemText(IDC_COMBO2,"");
SetDlgItemText(IDC_COMBO3,"");
SetDlgItemText(IDC_COMBO1,"");
GetDlgItem(IDC_COMBO2)->EnableWindow(TRUE);
GetDlgItem(IDC_COMBO3)->EnableWindow(TRUE);
GetDlgItem(IDC_COMBO1)->EnableWindow(TRUE);*/

		return 0;
	}
}
/*	WINgetDiskFreeSpace(argu.partitionTable);*/

/*
if(argu.mode==RESTORE)
{
	argu.target=INVALID_TARGET;
	if(argu.allTRUE)
	{
	
	if(argu.mainArg && argu.mainArg->argMode!=ARGUMENT_DISK)
	argu.mainArg=NULL;

	}

else 

	argu.mainArg=NULL;
	
}
*/

if(argu.mainArg)
{
CString temp;
char space[128];

if(argu.mainArg->argMode==ARGUMENT_DISK) temp.Format("硬盘 %d 全部分区 ",argu.mainArg->drive);
else if(argu.mainArg->argMode==ARGUMENT_PARTITION || argu.mainArg->argMode==ARGUMENT_DOSLETTER)
{
	
	temp.Format("%c:(WIN) %s:(DOS) %d:%d ",
				argu.partitionTable[argu.mainArg->index]->WINletter,
				(argu.partitionTable[argu.mainArg->index]->letter ? CString(argu.partitionTable[argu.mainArg->index]->letter) : "无"),
		argu.partitionTable[argu.mainArg->index]->hardDrive,
		argu.partitionTable[argu.mainArg->index]->number);

}

startReport+=temp;



}
else if(argu.allTRUE) startReport+="全部硬盘全部分区 ";


startReport+=(argu.allTRUE ? "" : targetStr)+"吗?";




/*
for(i=0;argu.partitionTable[i];i++)
{
CString temp;
			temp.Format("%d %c %c ---",i,argu.partitionTable[i]->WINletter,argu.partitionTable[i]->letter);
	MessageBox(temp);
	
}*/
if(argu.mode==RESTORE || argu.mode==REPLACE)
	
			{
if(MessageBox("写盘操作!继续吗?",NULL,MB_YESNO)!=IDYES)
{
/*	start=false;*//*
SetDlgItemText(IDC_COMBO2,"");
SetDlgItemText(IDC_COMBO3,"");
SetDlgItemText(IDC_COMBO1,"");*/
	return 0;
}

}
 
if(argu.printDriveTRUE || argu.printPartTRUE)
	{
	argu.mainArg=NULL;	
	if(argu.printDriveTRUE)
		{
			/*if(addedDriveString) return 0;*/
			argu.printDriveOption=PRINT_DRIVE_ALL;
			
			printDrive(argu.driveTable,/*argu.partitionTable,*/((argu.mainArg && argu.mainArg->index!=INVALID_INDEX) ? argu.mainArg->index : argu.printDriveOption));
	/*	addedDriveString=true;*/
		}
		else if(argu.printPartTRUE)
			
		{
			/*if(addedPartString) return 0;*/
				if(argu.mainArg)
			{
				
				argu.printPartOption=PRINT_PARTITION_ALL;
					printPartitionTable(argu.partitionTable,argu.printPartOption,
					(argu.mainArg->argMode==ARGUMENT_DISK ? ALL_OR_THIS_TYPE : argu.mainArg->index),
					(argu.mainArg->argMode==ARGUMENT_DISK ? argu.mainArg->drive : NULL),argu.winTRUE);
			}
			else	 printPartitionTable(argu.partitionTable,argu.printPartOption,ALL_OR_THIS_TYPE,NULL,argu.winTRUE);
			/*addedPartString=true;*/
		}
		
		
	}
	
	else if(argu.mode!=INVALID_MODE)
	{
		
if(MessageBox(startReport,NULL,MB_YESNO)!=IDYES)
{
	start=false;/*
SetDlgItemText(IDC_COMBO2,"");
SetDlgItemText(IDC_COMBO3,"");
SetDlgItemText(IDC_COMBO1,"");*/
	return 0;
}

		if(argu.mode==PRINT)
			{
				printf("Sorry, /L UNsupported yet\n");
return 0;
			}



		
		if((argu.mode==SAVE || argu.mode==RESTORE || argu.mode==COMPARE || (argu.mode==PRINT && !argu.allTRUE && !argu.mainArg)) && !argu.fileTRUE)
		{
			printf("File required\n");
			return -1;
		}


		if(argu.allTRUE || argu.mode==RESTORE)
		{
			
			if(argu.mainArg && argu.mainArg->argMode!=ARGUMENT_DISK)
			{
				printf("Drive parameter invalid\n");
				return -1;
			}
	
			
			if(argu.mode==SAVE || (argu.mode==PRINT && !argu.fileTRUE))
		/*	savePrintPartitionTable(argu.partitionTable,
				(argu.mainArg ? argu.mainArg->drive : 0),
				(argu.mode==SAVE ? argu.fileStr : NULL),
				argu.mode,
				0,
				argu.yesTRUE);*/
AfxBeginThread(savePrintPartitionTable,this);
			else if(argu.mode==RESTORE || argu.mode==COMPARE || argu.mode==PRINT)
			/*	restoreComparePrintPartitionTable((argu.mainArg ? argu.mainArg->drive : 0),
				argu.fileStr,
				argu.mode,
				1,
				argu.yesTRUE);*/
			
			
AfxBeginThread(restoreComparePrintPartitionTable,this);


			
			
		}
		else
		{
		commonArg *mainArgCopy=argu.mainArg;	
		

			if(argu.mode==PRINT && !argu.mainArg) argu.target==PRINTFILE;
			
			if(argu.mode==REPLACE && argu.target!=DBR && argu.target!=FAT)
			{
				printf("/E (rEplace) requires /BOOT or /FAT\n");
				return -1;
			}
			

			
			if(argu.mode==SAVE || argu.mode==REPLACE || (argu.mode==PRINT && !argu.fileTRUE))
			{



				if(!argu.mainArg)
			{
				
				printf("n/n:n/?: required\n");
				return -1;
			}




				if(argu.target==INVALID_TARGET)
				{
					printf("/MBR/BOOT/FAT required\n");
					return -1;
				}




if(argu.target==DPT && argu.mainArg->argMode!=ARGUMENT_DISK && argu.mainArg->argMode!=ARGUMENT_PARTITION  && argu.mainArg->argMode!=ARGUMENT_DOSLETTER)
			{
				printf("n/n:n/?: required\n");
				return -1;
			}

⌨️ 快捷键说明

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