📄 tab4.cpp
字号:
DECLARE_MESSAGE_MAP()
private:
void CalcBlock();
void InitBlockShow();
CCheckerCtrl m_ctrlChecker;
void AddPiece(COLORREF colorBack, int nAngle, const CString &str);
};
/////////////////////////////////////////////////////////////////////////////
// CDlgDisk dialog
CDlgDisk::CDlgDisk(CWnd* pParent /*=NULL*/)
: CDialog(CDlgDisk::IDD, pParent)
{
//{{AFX_DATA_INIT(CDlgDisk)
m_Used = _T("");
m_UserNum = _T("");
//}}AFX_DATA_INIT
}
void CDlgDisk::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlgDisk)
DDX_Text(pDX, IDC_STATIC_USED, m_Used);
DDX_Text(pDX, IDC_STATIC_USERNUM, m_UserNum);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDlgDisk, CDialog)
//{{AFX_MSG_MAP(CDlgDisk)
ON_BN_CLICKED(IDEXIT, OnExit)
ON_BN_CLICKED(IDOK, OnCancel)
ON_BN_CLICKED(IDC_FORMAT, OnFormat)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlgDisk message handlers
void CTab4::OnBtnDisk()
{
CDlgDisk DlgDisk;
DlgDisk.DoModal();
}
BOOL CDlgDisk::OnInitDialog()
{
CDialog::OnInitDialog();
m_wndChart.SubclassDlgItem(IDC_PIECHART2, this);
InitBlockShow();
CalcBlock();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CDlgDisk::AddPiece(COLORREF colorBack, int nAngle, const CString &str)
{
m_wndChart.AddPiece(colorBack,RGB(0,0,0),nAngle,str);
}
void CDlgDisk::OnExit()
{
OnCancel();
}
void CDlgDisk::OnFormat()
{
if(MessageBox("格式化虚拟磁盘可重新创建文件系统,原来系统中的数据会丢失,继续吗?","警告!",MB_YESNO|MB_ICONINFORMATION)==IDYES)
{
FATIO.Close();
Format();
}
}
bool CTab4::KillFile(CString FileName)
{
int i,FilePos;
bool flag=false;
for(i=0;i<MAXFILE;i++)
{
if(FileFAT.Mfd[CurrentID].ufd[i].FileName==FileName && FileFAT.Mfd[CurrentID].ufd[i].IsExist==true)
{
flag=true;
FilePos=i;
break;
}
}
if(!flag) return false;
if(FileFAT.Mfd[CurrentID].ufd[FilePos].AttrWrite==false)
{
if(MessageBox("文件 "+SelectedFileName+" 是只读文件,您确实要删除吗? ","删除警告:",MB_ICONQUESTION|MB_YESNO)==IDNO)
return true;
}
for(i=0;i<FileFAT.Mfd[CurrentID].ufd[FilePos].BlockNum;i++)
{
if(!FreeBlock(FileFAT.Mfd[CurrentID].ufd[FilePos].FileLink[i])) return false;
}
FileFAT.Mfd[CurrentID].nItem--;
ZeroMemory(&FileFAT.Mfd[CurrentID].ufd[FilePos],sizeof(UFD));
WriteFAT();
return true;
}
void CTab4::OnBtnClose()
{
// TODO: Add your control notification handler code here
if(!CheckLogin()) return;
for(int i=0;i<FileFAT.Mfd[CurrentID].nItem;i++)
{
if(FileFAT.Mfd[CurrentID].ufd[i].FileName==SelectedFileName)
{
OpenList[CurrentID][i]=false;
}
}
m_FileList.SetItem(SelectPos,4,LVIF_TEXT,"关闭",0,0,0,0);
}
void CTab4::OnBtnOpen()
{
if(!CheckLogin()) return;
for(int i=0;i<FileFAT.Mfd[CurrentID].nItem;i++)
{
if(FileFAT.Mfd[CurrentID].ufd[i].FileName==SelectedFileName)
{
OpenList[CurrentID][i]=true;
}
}
m_FileList.SetItem(SelectPos,4,LVIF_TEXT,"打开",0,0,0,0);
}
CString CTab4::GetCurrentTime()
{
SYSTEMTIME systm;
::GetLocalTime(&systm);
CString TimeStr;
CString strHour,strMin;
strHour.Format("%d",systm.wHour);
strMin.Format("%d",systm.wMinute);
if(strHour.GetLength()<2)
strHour="0"+strHour;
if(strMin.GetLength()<2)
strMin+="0"+strMin;
TimeStr.Format("%d/%d/%d %s:%s",systm.wYear,systm.wMonth,systm.wDay,strHour,strMin);
return TimeStr;
}
bool CTab4::CreateNewFile(CString FileName, CString FileContent, bool AttrRead, bool AttrWrite, bool AttrExecute, bool AttrShare)
{
int i,FilePos,FileLen,BlockNum,BlockID;
bool flag=false;
FileContent.TrimLeft();
FileContent.TrimRight();
FileLen=FileContent.GetLength();
char Content[32];
for(i=0;i<MAXFILE;i++)
{
if(!FileFAT.Mfd[CurrentID].ufd[i].IsExist)
{
flag=true;
FilePos=i;
break;
}
}
if(!flag) return false;
BlockNum=(int)FileLen/(BLOCKSIZE+1)+1;
int count;
for(i=0;i<BlockNum;i++)
{
BlockID=AllocBlock();
if(BlockID)
{
FileFAT.Mfd[CurrentID].ufd[FilePos].FileLink[i]=BlockID;
count=FileContent.GetLength()-i*32;
ZeroMemory(&Content,sizeof(Content));
if(count>32)
wsprintf(Content,FileContent.Mid(i*32,32));
else
wsprintf(Content,FileContent.Mid(i*32,count));
if(!WriteBlock(BlockID,(BLOCK*)Content)) return false;
}
else
{
return false;
}
}
wsprintf(FileFAT.Mfd[CurrentID].ufd[FilePos].FileName,FileName.Left(15));
FileFAT.Mfd[CurrentID].ufd[FilePos].IsExist=true;
FileFAT.Mfd[CurrentID].ufd[FilePos].BlockNum=BlockNum;
FileFAT.Mfd[CurrentID].ufd[FilePos].AttrExecute=AttrExecute;
FileFAT.Mfd[CurrentID].ufd[FilePos].AttrRead=AttrRead;
FileFAT.Mfd[CurrentID].ufd[FilePos].AttrWrite=AttrWrite;
FileFAT.Mfd[CurrentID].ufd[FilePos].IsShared=AttrShare;
FileFAT.Mfd[CurrentID].ufd[FilePos].FileLen=FileContent.GetLength();
//str.Format("FileName:%s",FileFAT.Mfd[CurrentID].ufd[FilePos].FileName);
//MessageBox(str);
wsprintf(FileFAT.Mfd[CurrentID].ufd[FilePos].Time,GetCurrentTime());
FileFAT.Mfd[CurrentID].nItem++;
WriteFAT();
ShowUserFiles();
return true;
}
CString CTab4::ReadFile(CString FileName)
{
int i,FilePos;
bool flag=false;
char Buffer[32];
CString strReturn;
for(i=0;i<MAXFILE;i++)
{
if(FileFAT.Mfd[CurrentID].ufd[i].FileName==FileName && FileFAT.Mfd[CurrentID].ufd[i].IsExist==true)
{
flag=true;
FilePos=i;
break;
}
}
if(!flag) return "";
for(i=0;i<FileFAT.Mfd[CurrentID].ufd[FilePos].BlockNum;i++)
{
ZeroMemory(Buffer,32);
if(!ReadBlock(FileFAT.Mfd[CurrentID].ufd[FilePos].FileLink[i],(BLOCK*)Buffer)) return "";
//MessageBox(Buffer);
strReturn+=Buffer;
}
return strReturn;
}
void CTab4::OnClickFilelist(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
CString strFName;
strFName=m_FileList.GetItemText(pNMListView->iItem,0);
SelectPos=pNMListView->iItem;
SelectedFileName=m_FileList.GetItemText(pNMListView->iItem,0);
m_FileContent=ReadFile(strFName);
UpdateData(false);
*pResult = 0;
}
bool CTab4::ModifyFile(CString FileName, CString FileContent, bool AttrRead, bool AttrWrite, bool AttrExecute, bool AttrShare)
{
int i,FilePos,BlockNum,BlockID;
bool flag=false;
FileContent.TrimLeft();
FileContent.TrimRight();
char Content[32];
for(i=0;i<MAXFILE;i++)
{
if(FileFAT.Mfd[CurrentID].ufd[i].FileName==SelectedFileName)
{
flag=true;
FilePos=i;
//CString str;
//str.Format("%d",FilePos);
//MessageBox(str);
break;
}
}
if(!flag) return false;
for(i=0;i<FileFAT.Mfd[CurrentID].ufd[FilePos].BlockNum;i++)
{
if(!FreeBlock(FileFAT.Mfd[CurrentID].ufd[FilePos].FileLink[i])) return false;
}
ZeroMemory(&FileFAT.Mfd[CurrentID].ufd[FilePos].BlockNum,200);
BlockNum=(int)FileContent.GetLength()/(BLOCKSIZE+1)+1;
int count;
for(i=0;i<BlockNum;i++)
{
BlockID=AllocBlock();
if(BlockID)
{
FileFAT.Mfd[CurrentID].ufd[FilePos].FileLink[i]=BlockID;
count=FileContent.GetLength()-i*32;
ZeroMemory(&Content,sizeof(Content));
if(count>32)
wsprintf(Content,FileContent.Mid(i*32,32));
else
wsprintf(Content,FileContent.Mid(i*32,count));
if(!WriteBlock(BlockID,(BLOCK*)Content)) return false;
}
else
{
return false;
}
}
wsprintf(FileFAT.Mfd[CurrentID].ufd[FilePos].FileName,FileName.Left(15));
FileFAT.Mfd[CurrentID].ufd[FilePos].IsExist=true;
FileFAT.Mfd[CurrentID].ufd[FilePos].BlockNum=BlockNum;
FileFAT.Mfd[CurrentID].ufd[FilePos].AttrExecute=AttrExecute;
FileFAT.Mfd[CurrentID].ufd[FilePos].AttrRead=AttrRead;
FileFAT.Mfd[CurrentID].ufd[FilePos].AttrWrite=AttrWrite;
FileFAT.Mfd[CurrentID].ufd[FilePos].IsShared=AttrShare;
FileFAT.Mfd[CurrentID].ufd[FilePos].FileLen=FileContent.GetLength();
wsprintf(FileFAT.Mfd[CurrentID].ufd[FilePos].Time,GetCurrentTime());
WriteFAT();
ShowUserFiles();
return true;
}
void CTab4::ShowBlock(int fileid)
{
CString str,temp;
for (int i=0;i<FileFAT.Mfd[CurrentID].ufd[fileid].BlockNum;i++)
{
temp.Format(",%d",FileFAT.Mfd[CurrentID].ufd[fileid].FileLink[i]);
str+=temp;
}
MessageBox(str);
}
void CDlgDisk::InitBlockShow()
{
CRect rect;
GetDlgItem(IDC_STATIC_CHECKER)->GetWindowRect(rect);
ScreenToClient(rect);
m_ctrlChecker.Create(WS_VISIBLE | WS_CHILD | WS_VSCROLL | WS_TABSTOP, rect, this, IDC_STATIC_CHECKER);
m_ctrlChecker.SetTotalBlocks(1000);
/*for(register i = 10; i < 35; i++)
m_ctrlChecker.SetBlock(i, RGB(0, 155, 0));
for(i = 50; i < 120; i++)
m_ctrlChecker.SetBlock(i, RGB(255, 0, 0));
for(i = 150; i < 255; i++)
m_ctrlChecker.SetBlock(i, RGB(0, 0, i));
for(i = 256; i < 300; i++)
m_ctrlChecker.SetBlock(i, RGB(0, 0, 0));
m_ctrlChecker.Refresh();*/
}
HBRUSH CTab4::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr;
switch (nCtlColor)
{
case CTLCOLOR_EDIT:
case CTLCOLOR_MSGBOX:
switch (pWnd->GetDlgCtrlID())
{
case IDC_FILE_CONTENT: // first CEdit control ID
// put your own CONTROL ID here
pDC->SetBkColor(m_bluecolor); // change the background color
pDC->SetTextColor(m_textcolor); // change the text color
hbr = (HBRUSH) m_bluebrush; // apply the brush
break;
// otherwise do default handling of OnCtlColor
default:
hbr=CDialog::OnCtlColor(pDC,pWnd,nCtlColor);
}
break;
// otherwise do default handling of OnCtlColor
default:
hbr=CDialog::OnCtlColor(pDC,pWnd,nCtlColor);
}
return hbr; // return brush
}
void CDlgDisk::CalcBlock()
{
int i,j,k,sum;
for (i=0;i<MAXUSER;i++)
{
if(FileFAT.Mfd[i].IsExist)
{
for(j=0;j<MAXFILE;j++)
{
if(FileFAT.Mfd[i].ufd[j].IsExist)
{
for(k=0;k<FileFAT.Mfd[i].ufd[j].BlockNum;k++)
{
m_ctrlChecker.SetBlock(FileFAT.Mfd[i].ufd[j].FileLink[k]-1, RGB(0, 0, 255));
sum++;
}
}
}
}
}
AddPiece(RGB(200,0,0),sum*360/1000,"Used");
//CString str;
//str.Format("%d",sum*360/1000);
//MessageBox(str);
m_Used.Format("已用空间:%d 字节",sum*32);
m_UserNum.Format("用户数:%d",FileFAT.UserNum);
UpdateData(false);
}
void CDlgUser::OnClickUserList(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
m_UserName=m_UserListView.GetItemText(pNMListView->iItem,0);
UpdateData(false);
*pResult = 0;
}
void CDlgLogin::OnDblclkUserlist(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
OnOK();
}
void CTab4::ShowBallTip(CPoint pt, CString msg)
{
LOGFONT lf;
::ZeroMemory (&lf, sizeof (lf));
lf.lfHeight = 15;
lf.lfWeight = FW_BOLD;
lf.lfUnderline = FALSE;
::strcpy (lf.lfFaceName, _T("楷体_GB2312"));
m_pBalloonTip = CBalloonTip::Show(pt, CSize(250, 100), msg, lf, 5, TRUE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -