📄 miniguidlg.cpp
字号:
// 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 + -