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

📄 tab4.cpp

📁 三个实验,作业管理,内存管理,文件管理,好东西来的
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	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 + -