Tab4.cpp
上传用户:tianjwyx
上传日期:2007-01-13
资源大小:813k
文件大小:33k
源码类别:

操作系统开发

开发平台:

Visual C++

  1. // Tab4.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "OSDemo.h"
  5. #include "Tab4.h"
  6. #include "PieChartCtrl.h"
  7. #include "CheckerCtrl.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. FAT FileFAT;
  14. CFile FATIO;
  15. CString CurrentUser;
  16. int CurrentID;
  17. bool bLogin;
  18. bool bFormated;
  19. bool WriteFAT()
  20. {
  21.      FATIO.SeekToBegin();
  22.      FATIO.Write(&FileFAT,sizeof(FileFAT));
  23.  return true;
  24. }
  25. bool CheckLogin()
  26. {
  27. if (!bLogin)
  28. {
  29. AfxMessageBox("请先登录文件系统!");
  30. return false;
  31. }
  32. else
  33. return true;
  34. }
  35. bool ReadFAT()
  36. {
  37.  ZeroMemory(&FileFAT,sizeof(FileFAT));
  38.  FATIO.SeekToBegin();
  39.      if (!FATIO.Read(&FileFAT,sizeof(FileFAT))) return false;
  40.  return true;
  41. }
  42. bool FileExist(CString FilePath)
  43. {
  44.     HANDLE Handle;
  45. WIN32_FIND_DATA W32;
  46.     Handle=FindFirstFile(FilePath,&W32);
  47. if (Handle!=INVALID_HANDLE_VALUE)
  48.        return true;
  49. else
  50.    return false;
  51. }
  52. bool Format()
  53. {
  54.      CString FATFile;
  55.  int i;
  56.  char fname[128];
  57.  ::GetCurrentDirectory(128,fname);   //FAT表信息保存在当前目录的VDISK.DAT中
  58.  FATFile.Format("%s",fname);
  59.  if (FATFile.Right(1)!="\")
  60.  FATFile+="\VDISK.DAT";
  61.  else
  62.          FATFile+="VDISK.DAT";
  63.  CFile fout;
  64.  if( !fout.Open(FATFile,CFile::modeCreate|CFile::modeWrite,NULL))
  65.  {
  66.  return false;
  67.  }
  68.  
  69.  ZeroMemory(&FileFAT,sizeof(FileFAT));
  70.  FileFAT.SuperBlock.HeadInfo.pStack=0;
  71.  for(i=0;i<10;i++)
  72.  {
  73.         FileFAT.SuperBlock.HeadInfo.pBlock[i]=i+1;
  74.  }
  75.  fout.WriteHuge(&FileFAT,sizeof(FileFAT));
  76.  BYTE *Buffer;
  77.  
  78.  Buffer=(BYTE*)malloc(DISKSIZE);
  79.      ZeroMemory(Buffer,DISKSIZE);
  80.  BLOCK newBlock;
  81.  for (i=10;i<=990;i+=10)
  82.  {
  83.   ZeroMemory(&newBlock,sizeof(newBlock));
  84.   newBlock.HeadInfo.pStack=0;
  85.   for (int k=0;k<10;k++)
  86.   {
  87.  newBlock.HeadInfo.pBlock[k]=i+1+k;
  88.   }
  89.   memcpy(Buffer+32*(i-1),&newBlock,32);
  90.  }
  91.  fout.WriteHuge(Buffer,DISKSIZE);
  92.  
  93.  free(Buffer);
  94.  
  95.      fout.Close();
  96.  AfxMessageBox("创建虚拟磁盘文件成功!请选择用户管理添加新用户。");
  97.  return true;
  98. }
  99. void StartIO()    //打开VDISK.DAT文件,把该文件句柄保存在全局变量中,如果该文件不存在,创建并初始化该文件。
  100. {
  101.      CString FATFile;
  102.  char fname[128];
  103.  ::GetCurrentDirectory(128,fname);   //FAT表信息保存在当前目录的VDISK.DAT中
  104.  FATFile.Format("%s",fname);
  105.  if (FATFile.Right(1)!="\")
  106.  FATFile+="\VDISK.DAT";
  107.  else
  108.          FATFile+="VDISK.DAT";
  109.  bFormated=true;
  110.  if (!FileExist(FATFile))
  111.  {
  112.  AfxMessageBox("当前目录下找不到VDISK.DAT,该文件是用来模拟磁盘及文件管理表。n单击确定创建新的虚拟磁盘文件!");
  113.  bFormated=false;
  114.  if (!Format())
  115.  {
  116.  AfxMessageBox("创建文件系统出错!");
  117.  return;
  118.  }
  119.  }
  120.  
  121.  if(!FATIO.Open(FATFile,CFile::modeReadWrite|CFile::shareDenyWrite,NULL))
  122.  {
  123.               AfxMessageBox("调入FAT表失败,文件系统可能出错!");
  124.   bFormated=false;
  125.   return;
  126.  }
  127.  
  128. }
  129. bool ReadBlock(int id, BLOCK* buffer)  //读指定块号内容(32字节)到buffer所指向的单元
  130. {
  131. if(!FATIO) return false;
  132. if(!FATIO.Seek(sizeof(FAT)+(id-1)*BLOCKSIZE,CFile::begin)) return false;
  133. if(FATIO.Read(buffer,BLOCKSIZE)!=BLOCKSIZE) return false;
  134.     return true;
  135. }
  136. bool WriteBlock(int id, BLOCK* buffer)  //把buffer所指向的单元的内容(32字节)写到指定的物理块中
  137. {
  138.     if(!FATIO) return false;   
  139. if(!FATIO.Seek(sizeof(FAT)+(id-1)*BLOCKSIZE,CFile::begin)) return false;
  140.     FATIO.Write(buffer,BLOCKSIZE);
  141.     return true;
  142. }
  143. USHORT AllocBlock()    //分配一物理块,成功返回逻辑块号,失败返回0;
  144. {
  145.      if(!FileFAT.SuperBlock.HeadInfo.pBlock[FileFAT.SuperBlock.HeadInfo.pStack]) return 0;  //没有空间可分配,失败返回
  146.  if(FileFAT.SuperBlock.HeadInfo.pStack<9)
  147.  {
  148.  WriteFAT();
  149.  return FileFAT.SuperBlock.HeadInfo.pBlock[FileFAT.SuperBlock.HeadInfo.pStack++];
  150.  }
  151.  else
  152.  {
  153.          WriteFAT();
  154.  USHORT returnBlock=FileFAT.SuperBlock.HeadInfo.pBlock[9];
  155.  if(!ReadBlock(returnBlock,&FileFAT.SuperBlock)) return 0;
  156.  return  returnBlock;
  157.  }
  158.      WriteFAT();
  159.  return 0;
  160. }
  161. bool FreeBlock(USHORT BlockID)  //回收一物理块,成功返回TRUE,失败返回FALSE
  162. {
  163.     if(FileFAT.SuperBlock.HeadInfo.pStack>0)
  164. {
  165.        FileFAT.SuperBlock.HeadInfo.pBlock[--FileFAT.SuperBlock.HeadInfo.pStack]=BlockID;
  166.    BLOCK newBlock;
  167.    if (!WriteBlock(BlockID,&newBlock)) return false;
  168. }
  169. else
  170. {
  171.        if (!WriteBlock(BlockID,&FileFAT.SuperBlock)) return false;
  172.    FileFAT.SuperBlock.HeadInfo.pStack=9;
  173.    FileFAT.SuperBlock.HeadInfo.pBlock[9]=BlockID;
  174. }
  175. WriteFAT();
  176. return true;
  177. }
  178. class CDlgUser : public CDialog
  179. {
  180. // Construction
  181. public:
  182. void ShowUser();
  183. void AddListUser(CString Name,CString FileNum);
  184. void InitUserList();
  185. CDlgUser(CWnd* pParent = NULL);   // standard constructor
  186.     CImageList* ImageList1;
  187. CImageList* ImageList2;
  188. // Dialog Data
  189. //{{AFX_DATA(CDlgUser)
  190. enum { IDD = IDD_DLG_USER };
  191. CListCtrl m_UserListView;
  192. CString m_UserName;
  193. //}}AFX_DATA
  194. // Overrides
  195. // ClassWizard generated virtual function overrides
  196. //{{AFX_VIRTUAL(CDlgUser)
  197. protected:
  198. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  199. //}}AFX_VIRTUAL
  200. // Implementation
  201. protected:
  202. // Generated message map functions
  203. //{{AFX_MSG(CDlgUser)
  204. virtual BOOL OnInitDialog();
  205. afx_msg void OnDelUser();
  206. afx_msg void OnAddUser();
  207. afx_msg void OnClickUserList(NMHDR* pNMHDR, LRESULT* pResult);
  208. //}}AFX_MSG
  209. DECLARE_MESSAGE_MAP()
  210. private:
  211. int ItemUser;
  212. };
  213. /////////////////////////////////////////////////////////////////////////////
  214. // CDlgUser dialog
  215. CDlgUser::CDlgUser(CWnd* pParent /*=NULL*/)
  216. : CDialog(CDlgUser::IDD, pParent)
  217. {
  218. //{{AFX_DATA_INIT(CDlgUser)
  219. m_UserName = _T("");
  220. //}}AFX_DATA_INIT
  221. }
  222. void CDlgUser::DoDataExchange(CDataExchange* pDX)
  223. {
  224. CDialog::DoDataExchange(pDX);
  225. //{{AFX_DATA_MAP(CDlgUser)
  226. DDX_Control(pDX, IDC_USER_LIST, m_UserListView);
  227. DDX_Text(pDX, IDC_USER_NAME, m_UserName);
  228. //}}AFX_DATA_MAP
  229. }
  230. BEGIN_MESSAGE_MAP(CDlgUser, CDialog)
  231. //{{AFX_MSG_MAP(CDlgUser)
  232. ON_BN_CLICKED(IDC_DEL_USER, OnDelUser)
  233. ON_BN_CLICKED(ID_ADD_USER, OnAddUser)
  234. ON_NOTIFY(NM_CLICK, IDC_USER_LIST, OnClickUserList)
  235. //}}AFX_MSG_MAP
  236. END_MESSAGE_MAP()
  237. /////////////////////////////////////////////////////////////////////////////
  238. // CDlgUser message handlers
  239. BOOL CDlgUser::OnInitDialog() 
  240. {
  241. CDialog::OnInitDialog();
  242.     InitUserList();
  243. ShowUser();
  244. return TRUE;  // return TRUE unless you set the focus to a control
  245.               // EXCEPTION: OCX Property Pages should return FALSE
  246. }
  247. void CDlgUser::InitUserList()
  248. {
  249.     DWORD dwStyle = m_UserListView.GetExtendedStyle();
  250. ListView_SetExtendedListViewStyle(m_UserListView.m_hWnd, LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
  251. m_UserListView.InsertColumn(0,"用户名",LVCFMT_LEFT,100);
  252. m_UserListView.InsertColumn(1,"文件数",LVCFMT_RIGHT,50);
  253. ImageList1 = new CImageList();
  254. ImageList1->Create(16, 16, ILC_COLOR8 | ILC_MASK,  9, 9);
  255. ImageList1->Add(AfxGetApp()->LoadIcon(IDI_USER));
  256. m_UserListView.SetImageList(ImageList1, LVSIL_SMALL);
  257. //m_UserListView.SetImageList(ImageList2, LVSIL_NORMAL);
  258.    
  259. }
  260. void CDlgUser::OnDelUser() 
  261. {
  262. UpdateData(true);
  263. int i,j,k,pos;
  264. for(i=0;i<MAXUSER;i++)
  265. {
  266. if(FileFAT.Mfd[i].UserName==m_UserName)
  267. {
  268. pos=i;
  269. if(i==CurrentID)
  270. {
  271. MessageBox("您不能删除当前已登录的用户!","警告:",MB_ICONINFORMATION);
  272. return;
  273. }
  274. for(j=0;j<MAXFILE;j++)
  275. {
  276.                 if( FileFAT.Mfd[i].ufd[j].IsExist)
  277. {
  278. for(k=0;k<FileFAT.Mfd[i].ufd[j].BlockNum;k++)
  279.  {
  280.  if(!FreeBlock(FileFAT.Mfd[i].ufd[j].FileLink[k]))
  281.  {
  282.  MessageBox("删除用户出错,被删除帐号的文件块在回收中发生错误!");
  283.  return;
  284.  }
  285.  }
  286. }
  287. FileFAT.Mfd[i].ufd[j].IsExist=false;
  288. }
  289. }
  290. }
  291. ZeroMemory(&FileFAT.Mfd[pos],sizeof(MFD));
  292. FileFAT.UserNum--;
  293. WriteFAT();
  294. ShowUser();
  295. }
  296. void CDlgUser::AddListUser(CString Name, CString FileNum)
  297. {
  298. LVITEM lvitem;
  299. int iActualItem;
  300. CString strDate;
  301. for(int iSubItem=0;iSubItem<2;iSubItem++)
  302. {
  303. lvitem.mask = LVIF_TEXT|(iSubItem == 0? LVIF_IMAGE : 0);
  304. lvitem.iItem = (iSubItem == 0)? ++ItemUser : iActualItem;
  305. lvitem.iSubItem = iSubItem;
  306. switch(iSubItem)
  307. {
  308. case 0:
  309. lvitem.pszText =(LPTSTR)(LPCTSTR)Name;
  310. lvitem.iImage=0;
  311. break;
  312. case 1:
  313. lvitem.pszText = (LPTSTR)(LPCTSTR)FileNum;
  314.       break;
  315. if (iSubItem == 0)
  316. iActualItem = m_UserListView.InsertItem(&lvitem);
  317. else
  318. m_UserListView.SetItem(&lvitem);
  319. }
  320. }
  321. /////////////////////////////////////////////////////////////////////////////
  322. // CDlgLogin dialog
  323. class CDlgLogin : public CDialog
  324. {
  325. // Construction
  326. public:
  327. int UserID;
  328. void ShowUser();
  329. void AddUserList(CString Name);
  330. CString UserName;
  331. CImageList m_ImageList;
  332. void InitUserList();
  333. CDlgLogin(CWnd* pParent = NULL);   // standard constructor
  334. // Dialog Data
  335. //{{AFX_DATA(CDlgLogin)
  336. enum { IDD = IDD_DIALOG_LOGIN };
  337. CListCtrl m_UserList;
  338. CComboBox m_UserName;
  339. //}}AFX_DATA
  340. // Overrides
  341. // ClassWizard generated virtual function overrides
  342. //{{AFX_VIRTUAL(CDlgLogin)
  343. protected:
  344. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  345. //}}AFX_VIRTUAL
  346. // Implementation
  347. protected:
  348. // Generated message map functions
  349. //{{AFX_MSG(CDlgLogin)
  350. virtual void OnOK();
  351. virtual BOOL OnInitDialog();
  352. afx_msg void OnClickUserlist(NMHDR* pNMHDR, LRESULT* pResult);
  353. afx_msg void OnDblclkUserlist(NMHDR* pNMHDR, LRESULT* pResult);
  354. //}}AFX_MSG
  355. DECLARE_MESSAGE_MAP()
  356. };
  357. /////////////////////////////////////////////////////////////////////////////
  358. // CDlgLogin dialog
  359. CDlgLogin::CDlgLogin(CWnd* pParent /*=NULL*/)
  360. : CDialog(CDlgLogin::IDD, pParent)
  361. {
  362. //{{AFX_DATA_INIT(CDlgLogin)
  363. //}}AFX_DATA_INIT
  364. }
  365. void CDlgLogin::DoDataExchange(CDataExchange* pDX)
  366. {
  367. CDialog::DoDataExchange(pDX);
  368. //{{AFX_DATA_MAP(CDlgLogin)
  369. DDX_Control(pDX, IDC_USERLIST, m_UserList);
  370. DDX_Control(pDX, IDC_USERNAME, m_UserName);
  371. //}}AFX_DATA_MAP
  372. }
  373. BEGIN_MESSAGE_MAP(CDlgLogin, CDialog)
  374. //{{AFX_MSG_MAP(CDlgLogin)
  375. ON_NOTIFY(NM_CLICK, IDC_USERLIST, OnClickUserlist)
  376. ON_NOTIFY(NM_DBLCLK, IDC_USERLIST, OnDblclkUserlist)
  377. //}}AFX_MSG_MAP
  378. END_MESSAGE_MAP()
  379. /////////////////////////////////////////////////////////////////////////////
  380. // CDlgLogin message handlers
  381. void CDlgLogin::OnOK() 
  382. {
  383. // TODO: Add extra validation here
  384. m_UserName.GetWindowText(UserName);
  385. for(int i=0;i<10;i++)
  386. {
  387. if(UserName==FileFAT.Mfd[i].UserName)
  388. {
  389. UserID=i;
  390. }
  391. }
  392. CDialog::OnOK();
  393. }
  394. BOOL CDlgLogin::OnInitDialog() 
  395. {
  396. CDialog::OnInitDialog();
  397.     InitUserList();
  398. ShowUser();
  399. UserID=0;
  400. return TRUE;  // return TRUE unless you set the focus to a control
  401.               // EXCEPTION: OCX Property Pages should return FALSE
  402. }
  403. void CDlgLogin::InitUserList()
  404. {
  405.     HIMAGELIST hList = ImageList_Create(32,32, ILC_COLOR8 |ILC_MASK , 15, 1);
  406. m_ImageList.Attach(hList);
  407. m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_USER));
  408. m_UserList.SetImageList(&m_ImageList, LVSIL_NORMAL);
  409. }
  410. /////////////////////////////////////////////////////////////////////////////
  411. // CTab4 dialog
  412. CTab4::CTab4(CWnd* pParent /*=NULL*/)
  413. : CDialog(CTab4::IDD, pParent)
  414. {
  415. //{{AFX_DATA_INIT(CTab4)
  416. m_FileContent = _T("");
  417. //}}AFX_DATA_INIT
  418. }
  419. void CTab4::DoDataExchange(CDataExchange* pDX)
  420. {
  421. CDialog::DoDataExchange(pDX);
  422. //{{AFX_DATA_MAP(CTab4)
  423. DDX_Control(pDX, IDC_BTN_LOGIN, m_LoginBtn);
  424. DDX_Control(pDX, IDC_FILETREE, m_FileTree);
  425. DDX_Control(pDX, IDC_FILELIST, m_FileList);
  426. DDX_Text(pDX, IDC_FILE_CONTENT, m_FileContent);
  427. //}}AFX_DATA_MAP
  428. }
  429. BEGIN_MESSAGE_MAP(CTab4, CDialog)
  430. //{{AFX_MSG_MAP(CTab4)
  431. ON_BN_CLICKED(IDC_BTN_LOGIN, OnBtnLogin)
  432. ON_BN_CLICKED(IDC_BTN_ADD, OnBtnAdd)
  433. ON_BN_CLICKED(IDC_BTN_MODIFY, OnBtnModify)
  434. ON_BN_CLICKED(IDC_BTN_USER, OnBtnUser)
  435. ON_BN_CLICKED(IDC_BTN_DELETE, OnBtnDelete)
  436. ON_BN_CLICKED(IDC_BTN_DISK, OnBtnDisk)
  437. ON_BN_CLICKED(IDC_BTN_CLOSE, OnBtnClose)
  438. ON_BN_CLICKED(IDC_BTN_OPEN, OnBtnOpen)
  439. ON_NOTIFY(NM_CLICK, IDC_FILELIST, OnClickFilelist)
  440. ON_WM_CTLCOLOR()
  441. //}}AFX_MSG_MAP
  442. END_MESSAGE_MAP()
  443. /////////////////////////////////////////////////////////////////////////////
  444. // CTab4 message handlers
  445. BOOL CTab4::OnInitDialog() 
  446. {
  447. CDialog::OnInitDialog();
  448. bLogin=false;
  449. ItemCount=0;
  450.     m_bluecolor=RGB(239,239,239); // blue
  451. m_textcolor=RGB(0,0,255); // white text
  452. m_bluebrush.CreateSolidBrush(m_bluecolor); // blue background
  453. InitFileList();
  454. InitFileTree();
  455. return TRUE;  // return TRUE unless you set the focus to a control
  456.               // EXCEPTION: OCX Property Pages should return FALSE
  457. }
  458. void CTab4::InitFileList()
  459. {
  460.     DWORD dwStyle = m_FileList.GetExtendedStyle();
  461. ListView_SetExtendedListViewStyle(m_FileList.m_hWnd, LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
  462. m_FileList.InsertColumn(0,"文件名",LVCFMT_LEFT,100);
  463. m_FileList.InsertColumn(1,"文件主",LVCFMT_LEFT,60);
  464. m_FileList.InsertColumn(2,"文件大小",LVCFMT_RIGHT,80);
  465. m_FileList.InsertColumn(3,"修改时间",LVCFMT_LEFT,120);
  466. m_FileList.InsertColumn(4,"状态",LVCFMT_LEFT,40);
  467. m_FileList.InsertColumn(5,"属性",LVCFMT_LEFT,40);
  468. m_pImageList = new CImageList();
  469. m_pImageListL = new CImageList();
  470. SetupImages(m_pImageList, 16);
  471. SetupImages(m_pImageListL, 32);
  472. m_FileList.SetImageList(m_pImageList, LVSIL_SMALL);
  473. m_FileList.SetImageList(m_pImageListL, LVSIL_NORMAL);
  474.     
  475. }
  476. void CTab4::InitFileTree()
  477. {
  478.    TreeImageList = new CImageList();
  479.    TreeImageList->Create(20, 20, ILC_COLOR8 | ILC_MASK,  9, 9);
  480.    TreeImageList->Add(AfxGetApp()->LoadIcon(IDI_COMPUTER));
  481.    TreeImageList->Add(AfxGetApp()->LoadIcon(IDI_USER));
  482.    TreeImageList->Add(AfxGetApp()->LoadIcon(IDI_FILE));
  483.    TreeImageList->Add(AfxGetApp()->LoadIcon(IDI_ICON2));
  484.    m_FileTree.SetImageList(TreeImageList,TVSIL_NORMAL);
  485.    HTREEITEM hRoot = m_FileTree.InsertItem("请先登录文件系统",0,0);
  486.    
  487. }
  488. bool CTab4::AddFile(CString Path, CString FName, int FSize,CString Attr)
  489. {
  490.      return true;
  491. }
  492. void CTab4::AddListFile(CString FName,CString FileOwn,CString FSize,CString Date,CString State,CString Attr)
  493. {
  494. LVITEM lvitem;
  495. int iActualItem;
  496. for(int iSubItem=0;iSubItem<6;iSubItem++)
  497. {
  498. lvitem.mask = LVIF_TEXT|(iSubItem == 0? LVIF_IMAGE : 0);
  499. lvitem.iItem = (iSubItem == 0)? ++ItemCount : iActualItem;
  500. lvitem.iSubItem = iSubItem;
  501. switch(iSubItem)
  502. {
  503. case 0:
  504. lvitem.pszText =(LPTSTR)(LPCTSTR)FName;
  505.             
  506. Attr.MakeUpper();
  507. if (Attr.Find("E")>0)
  508. lvitem.iImage=1;
  509. else
  510. lvitem.iImage=0;
  511. break;
  512. case 1:
  513. lvitem.pszText = (LPTSTR)(LPCTSTR)FileOwn;
  514.       break;
  515.         case 2:
  516. FSize+=" 字节";
  517. lvitem.pszText = (LPTSTR)(LPCTSTR)FSize;
  518. break;
  519. case 3:
  520. lvitem.pszText = (LPTSTR)(LPCTSTR)Date;
  521. break;
  522. case 4:
  523. lvitem.pszText = (LPTSTR)(LPCTSTR)State;
  524. break;
  525. case 5:
  526.             lvitem.pszText = (LPTSTR)(LPCTSTR)Attr;
  527. break;
  528. if (iSubItem == 0)
  529. iActualItem = m_FileList.InsertItem(&lvitem);
  530. else
  531. m_FileList.SetItem(&lvitem);
  532. }
  533. }
  534. void CTab4::SetupImages(CImageList *mImageList, int iSize)
  535. {
  536.     mImageList->Create(iSize, iSize, ILC_COLOR8 | ILC_MASK,  9, 9);
  537. mImageList->Add(AfxGetApp()->LoadIcon(IDI_FILE));
  538. mImageList->Add(AfxGetApp()->LoadIcon(IDI_ICON2));
  539. }
  540. void CTab4::OnBtnAdd() 
  541. {
  542.     
  543.     if(!CheckLogin()) return;
  544.     CDlgNewFile DlgNewFile;
  545. DlgNewFile.flag=true;
  546. if(DlgNewFile.DoModal()==IDOK)
  547. {
  548. if(CreateNewFile(DlgNewFile.m_FileName,DlgNewFile.m_Content,true,(!DlgNewFile.m_Read),DlgNewFile.m_Execute,DlgNewFile.m_Share))
  549. {
  550. MessageBox("添加文件成功!","提示:",MB_ICONINFORMATION);
  551. }
  552. else
  553. {
  554. MessageBox("添加文件失败!可能磁盘空间不足或已超过用户允许保存的文件数!","提示:",MB_ICONEXCLAMATION);
  555. }
  556. }
  557. ShowUserFiles();
  558. }
  559. void CTab4::OnBtnModify() 
  560. {
  561.        if(!CheckLogin()) return;
  562.     CDlgNewFile DlgNewFile;
  563. DlgNewFile.flag=false;
  564. DlgNewFile.m_FileName=SelectedFileName;
  565. DlgNewFile.m_Content=ReadFile(SelectedFileName);
  566.         CString Attribute=m_FileList.GetItemText(SelectPos,5);
  567. DlgNewFile.m_Execute=Attribute.Find("E")>0?true:false;
  568.         DlgNewFile.m_Read=Attribute.Find("W")>0?false:true;
  569. DlgNewFile.m_Share=Attribute.Find("S")>0?true:false;
  570. //DlgNewFile.UpdateData(false);
  571. if(DlgNewFile.DoModal()==IDOK)
  572. {
  573. if(ModifyFile(DlgNewFile.m_FileName,DlgNewFile.m_Content,true,(!DlgNewFile.m_Read),DlgNewFile.m_Execute,DlgNewFile.m_Share))
  574. {
  575. MessageBox("修改文件成功!","提示:",MB_ICONINFORMATION);
  576. }
  577. else
  578. {
  579. MessageBox("修改文件失败!","提示:",MB_ICONEXCLAMATION);
  580. }
  581. }
  582. ShowUserFiles();
  583. }
  584. void CTab4::OnBtnLogin() 
  585. {
  586. FATIO.Close();
  587.    StartIO();
  588.    if(!bFormated) 
  589.    {
  590.    CDlgUser DlgUser;
  591.    DlgUser.DoModal();
  592.    return;
  593.    }
  594.    CDlgLogin dlgLogin;
  595.    ZeroMemory(&OpenList,sizeof(OpenList));
  596.    if(dlgLogin.DoModal()==IDOK)
  597.    {
  598.         CurrentUser=dlgLogin.UserName;
  599. CurrentID=dlgLogin.UserID;
  600. ShowUserFiles();
  601.         bLogin=true;
  602. CRect rect;
  603.         m_FileList.GetWindowRect(&rect);
  604.         CPoint pt = rect.CenterPoint();
  605.         ShowBallTip(pt,"单击列表的文件项,可以选定文件查看其内容或是其它操作!");
  606.    }
  607. }
  608. /////////////////////////////////////////////////////////////////////////////
  609. // CDlgUser dialog
  610. void CTab4::OnBtnUser() 
  611. {
  612.     CDlgUser DlgUser;
  613. DlgUser.DoModal();
  614. }
  615. void CDlgUser::OnAddUser() 
  616. {
  617.      UpdateData(true);
  618. if (FileFAT.UserNum>=10)
  619. {
  620. AfxMessageBox("用户数量已达到最大10个,你可以删除一些无用的帐号!");
  621. return;
  622. }
  623.         for(int i=0;i<10;i++)
  624. {
  625. if(FileFAT.Mfd[i].IsExist==false)
  626. {
  627.                
  628.    wsprintf(FileFAT.Mfd[i].UserName,m_UserName);
  629.    FileFAT.Mfd[i].IsExist=true;
  630.    FileFAT.Mfd[i].nItem=0;
  631.    break;
  632. }
  633. }
  634. FileFAT.UserNum++;
  635.         WriteFAT();
  636. ReadFAT();
  637. ShowUser();
  638. m_UserName.Empty();
  639. UpdateData(false);
  640. }
  641. void CDlgUser::ShowUser()
  642. {
  643.     m_UserListView.DeleteAllItems();
  644. ReadFAT();
  645. int i;
  646. //CString str;
  647. //str.Format("%d",FileFAT.UserNum);
  648.     //MessageBox(str);
  649. CString strItem;
  650. for (i=0;i<FileFAT.UserNum;i++)
  651. {
  652.         strItem.Format("%d",FileFAT.Mfd[i].nItem);
  653. AddListUser(FileFAT.Mfd[i].UserName,strItem);
  654. }
  655. }
  656. void CDlgLogin::AddUserList(CString Name)
  657. {
  658.     LVITEM lvi;
  659. lvi.mask =  LVIF_IMAGE | LVIF_TEXT;
  660. lvi.iItem = 0;
  661. lvi.iSubItem = 0;
  662. lvi.iImage = 0;
  663. lvi.pszText = (LPTSTR)(LPCTSTR)(Name);
  664. m_UserList.InsertItem(&lvi);
  665. }
  666. void CDlgLogin::ShowUser()
  667. {
  668.     m_UserList.DeleteAllItems();
  669. ReadFAT();
  670. for (int i=0;i<FileFAT.UserNum;i++)
  671. {
  672. AddUserList(FileFAT.Mfd[i].UserName);
  673. m_UserName.AddString(FileFAT.Mfd[i].UserName);
  674. m_UserName.SetCurSel(0);
  675. }
  676. m_UserList.SetHotItem(0);
  677. }
  678. void CTab4::OnBtnDelete() 
  679. {
  680. // m_JobList.-1)
  681.        if(!CheckLogin()) return;
  682. if(!m_FileList.GetFirstSelectedItemPosition())
  683. {
  684. MessageBox("请先在文件列表中选择要删除的文件!","提示:",MB_ICONSTOP);
  685. return;
  686. }
  687.         if(KillFile(SelectedFileName))
  688.     ShowUserFiles();
  689.         else
  690. MessageBox("文件删除出错!","错误:",MB_ICONEXCLAMATION);
  691. }
  692. void CDlgLogin::OnClickUserlist(NMHDR* pNMHDR, LRESULT* pResult) 
  693. {
  694. NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
  695. CString strName=m_UserList.GetItemText(pNMListView->iItem,pNMListView->iSubItem);
  696.     CString ComboText;
  697. for (int i=0;i<m_UserName.GetCount();i++)
  698. {
  699. ComboText.Empty();
  700. m_UserName.GetLBText(i,ComboText);
  701.         if (strName==ComboText) m_UserName.SetCurSel(i);
  702. }
  703. *pResult = 0;
  704. }
  705. void CTab4::ShowUserFiles()
  706. {
  707.     int i;
  708. m_FileTree.DeleteAllItems();
  709.     m_FileList.DeleteAllItems();
  710. HTREEITEM hRoot = m_FileTree.InsertItem("我的电脑",0,0);
  711. CString FileNum;
  712. FileNum.Format(" (%d Files)",FileFAT.Mfd[CurrentID].nItem);
  713.     HTREEITEM  hDir1 = m_FileTree.InsertItem (CurrentUser+FileNum,1,1,hRoot);
  714.     
  715.      SYSTEMTIME systm;
  716.     ::GetLocalTime(&systm);
  717.     CString TimeStr;
  718.     TimeStr.Format("%d/%d/%d %d:%d",systm.wYear,systm.wMonth,systm.wDay,systm.wHour,systm.wMinute);
  719.     CString strFileLen,strFileAttr,strFileState;
  720. for (i=0;i<MAXFILE;i++)
  721. {
  722. if(FileFAT.Mfd[CurrentID].ufd[i].IsExist==true)
  723. {
  724.  if(FileFAT.Mfd[CurrentID].ufd[i].AttrExecute)
  725.  m_FileTree.InsertItem ( FileFAT.Mfd[CurrentID].ufd[i].FileName,3,3,hDir1);
  726.  else
  727.                  m_FileTree.InsertItem ( FileFAT.Mfd[CurrentID].ufd[i].FileName,2,2,hDir1);
  728.          strFileLen.Format("%d",FileFAT.Mfd[CurrentID].ufd[i].FileLen);
  729.  strFileAttr.Empty();
  730.              strFileState=(OpenList[CurrentID][i])?"打开":"关闭";
  731.  if(FileFAT.Mfd[CurrentID].ufd[i].AttrRead)
  732.     strFileAttr+="R";
  733.  if(FileFAT.Mfd[CurrentID].ufd[i].AttrWrite)
  734.     strFileAttr+="W";
  735.  if(FileFAT.Mfd[CurrentID].ufd[i].AttrExecute)
  736.     strFileAttr+="E";
  737.  if(FileFAT.Mfd[CurrentID].ufd[i].IsShared)
  738.     strFileAttr+="S";
  739.  AddListFile(FileFAT.Mfd[CurrentID].ufd[i].FileName,CurrentUser,strFileLen,FileFAT.Mfd[CurrentID].ufd[i].Time,strFileState,strFileAttr);
  740. }
  741. }
  742. m_FileTree.Expand(hRoot,TVE_EXPAND);
  743. m_FileTree.Expand(hDir1,TVE_EXPAND);
  744. }
  745. /////////////////////////////////////////////////////////////////////////////
  746. // CDlgDisk dialog
  747. class CDlgDisk : public CDialog
  748. {
  749. // Construction
  750. public:
  751. CDlgDisk(CWnd* pParent = NULL);   // standard constructor
  752.     CPieChartCtrl m_wndChart;
  753. // Dialog Data
  754. //{{AFX_DATA(CDlgDisk)
  755. enum { IDD = IDD_DLGDISK };
  756. CStatic m_PicDisk;
  757. CString m_Used;
  758. CString m_UserNum;
  759. //}}AFX_DATA
  760. // Overrides
  761. // ClassWizard generated virtual function overrides
  762. //{{AFX_VIRTUAL(CDlgDisk)
  763. protected:
  764. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  765. //}}AFX_VIRTUAL
  766. // Implementation
  767. protected:
  768. // Generated message map functions
  769. //{{AFX_MSG(CDlgDisk)
  770. virtual BOOL OnInitDialog();
  771. afx_msg void OnExit();
  772. afx_msg void OnFormat();
  773. //}}AFX_MSG
  774. DECLARE_MESSAGE_MAP()
  775. private:
  776. void CalcBlock();
  777. void InitBlockShow();
  778. CCheckerCtrl m_ctrlChecker;
  779. void AddPiece(COLORREF colorBack, int nAngle, const CString &str);
  780. };
  781. /////////////////////////////////////////////////////////////////////////////
  782. // CDlgDisk dialog
  783. CDlgDisk::CDlgDisk(CWnd* pParent /*=NULL*/)
  784. : CDialog(CDlgDisk::IDD, pParent)
  785. {
  786. //{{AFX_DATA_INIT(CDlgDisk)
  787. m_Used = _T("");
  788. m_UserNum = _T("");
  789. //}}AFX_DATA_INIT
  790. }
  791. void CDlgDisk::DoDataExchange(CDataExchange* pDX)
  792. {
  793. CDialog::DoDataExchange(pDX);
  794. //{{AFX_DATA_MAP(CDlgDisk)
  795. DDX_Text(pDX, IDC_STATIC_USED, m_Used);
  796. DDX_Text(pDX, IDC_STATIC_USERNUM, m_UserNum);
  797. //}}AFX_DATA_MAP
  798. }
  799. BEGIN_MESSAGE_MAP(CDlgDisk, CDialog)
  800. //{{AFX_MSG_MAP(CDlgDisk)
  801. ON_BN_CLICKED(IDEXIT, OnExit)
  802. ON_BN_CLICKED(IDOK, OnCancel)
  803. ON_BN_CLICKED(IDC_FORMAT, OnFormat)
  804. //}}AFX_MSG_MAP
  805. END_MESSAGE_MAP()
  806. /////////////////////////////////////////////////////////////////////////////
  807. // CDlgDisk message handlers
  808. void CTab4::OnBtnDisk() 
  809. {
  810.      CDlgDisk DlgDisk;
  811.  DlgDisk.DoModal();
  812. }
  813. BOOL CDlgDisk::OnInitDialog() 
  814. {
  815. CDialog::OnInitDialog();
  816.     m_wndChart.SubclassDlgItem(IDC_PIECHART2, this);
  817. InitBlockShow();
  818. CalcBlock();
  819. return TRUE;  // return TRUE unless you set the focus to a control
  820.               // EXCEPTION: OCX Property Pages should return FALSE
  821. }
  822. void CDlgDisk::AddPiece(COLORREF colorBack, int nAngle, const CString &str)
  823. {
  824.       m_wndChart.AddPiece(colorBack,RGB(0,0,0),nAngle,str);
  825. }
  826. void CDlgDisk::OnExit() 
  827. {
  828.     OnCancel();
  829. }
  830. void CDlgDisk::OnFormat() 
  831. {
  832.     if(MessageBox("格式化虚拟磁盘可重新创建文件系统,原来系统中的数据会丢失,继续吗?","警告!",MB_YESNO|MB_ICONINFORMATION)==IDYES)
  833. {
  834. FATIO.Close();
  835. Format();
  836. }
  837. }
  838. bool CTab4::KillFile(CString FileName)
  839. {
  840.     int i,FilePos;
  841. bool flag=false;
  842. for(i=0;i<MAXFILE;i++)
  843. {
  844. if(FileFAT.Mfd[CurrentID].ufd[i].FileName==FileName && FileFAT.Mfd[CurrentID].ufd[i].IsExist==true)
  845. {
  846. flag=true;
  847. FilePos=i;
  848. break;
  849. }
  850. }
  851. if(!flag) return false;
  852. if(FileFAT.Mfd[CurrentID].ufd[FilePos].AttrWrite==false)
  853. {
  854. if(MessageBox("文件 "+SelectedFileName+" 是只读文件,您确实要删除吗?   ","删除警告:",MB_ICONQUESTION|MB_YESNO)==IDNO)
  855.           return true;
  856. }
  857. for(i=0;i<FileFAT.Mfd[CurrentID].ufd[FilePos].BlockNum;i++)
  858. {
  859. if(!FreeBlock(FileFAT.Mfd[CurrentID].ufd[FilePos].FileLink[i])) return false;
  860. }
  861. FileFAT.Mfd[CurrentID].nItem--;
  862. ZeroMemory(&FileFAT.Mfd[CurrentID].ufd[FilePos],sizeof(UFD));
  863. WriteFAT();
  864.     return true;
  865. }
  866. void CTab4::OnBtnClose() 
  867. {
  868. // TODO: Add your control notification handler code here
  869.    if(!CheckLogin()) return;
  870. for(int i=0;i<FileFAT.Mfd[CurrentID].nItem;i++)
  871.    {
  872.        if(FileFAT.Mfd[CurrentID].ufd[i].FileName==SelectedFileName)
  873.    {
  874.    OpenList[CurrentID][i]=false;
  875.    }
  876.    }
  877.    m_FileList.SetItem(SelectPos,4,LVIF_TEXT,"关闭",0,0,0,0);
  878. }
  879. void CTab4::OnBtnOpen() 
  880. {
  881.    if(!CheckLogin()) return;
  882. for(int i=0;i<FileFAT.Mfd[CurrentID].nItem;i++)
  883.    {
  884.        if(FileFAT.Mfd[CurrentID].ufd[i].FileName==SelectedFileName)
  885.    {
  886.    OpenList[CurrentID][i]=true;
  887.    }
  888.    }
  889.    m_FileList.SetItem(SelectPos,4,LVIF_TEXT,"打开",0,0,0,0);
  890. }
  891. CString CTab4::GetCurrentTime()
  892. {
  893.     SYSTEMTIME systm;
  894.     ::GetLocalTime(&systm);
  895.     CString TimeStr;
  896. CString strHour,strMin;
  897. strHour.Format("%d",systm.wHour);
  898. strMin.Format("%d",systm.wMinute);
  899. if(strHour.GetLength()<2)
  900. strHour="0"+strHour;
  901. if(strMin.GetLength()<2)
  902. strMin+="0"+strMin;
  903.     TimeStr.Format("%d/%d/%d %s:%s",systm.wYear,systm.wMonth,systm.wDay,strHour,strMin);
  904. return TimeStr;
  905. }
  906. bool CTab4::CreateNewFile(CString FileName, CString FileContent, bool AttrRead, bool AttrWrite, bool AttrExecute, bool AttrShare)
  907. {
  908.     int i,FilePos,FileLen,BlockNum,BlockID;
  909.     bool flag=false;
  910. FileContent.TrimLeft();
  911. FileContent.TrimRight();
  912. FileLen=FileContent.GetLength();
  913. char Content[32];
  914. for(i=0;i<MAXFILE;i++)
  915. {
  916. if(!FileFAT.Mfd[CurrentID].ufd[i].IsExist)
  917. {
  918. flag=true;
  919. FilePos=i;
  920. break;
  921. }
  922. }
  923.     if(!flag) return false;
  924. BlockNum=(int)FileLen/(BLOCKSIZE+1)+1;
  925. int count;
  926.     for(i=0;i<BlockNum;i++)
  927. {
  928. BlockID=AllocBlock();
  929.         if(BlockID)
  930. {
  931. FileFAT.Mfd[CurrentID].ufd[FilePos].FileLink[i]=BlockID;
  932. count=FileContent.GetLength()-i*32;
  933. ZeroMemory(&Content,sizeof(Content));
  934. if(count>32)
  935.                wsprintf(Content,FileContent.Mid(i*32,32));
  936.     else
  937.    wsprintf(Content,FileContent.Mid(i*32,count));
  938. if(!WriteBlock(BlockID,(BLOCK*)Content)) return false;
  939. }
  940. else
  941. {
  942. return false;
  943. }
  944. }
  945. wsprintf(FileFAT.Mfd[CurrentID].ufd[FilePos].FileName,FileName.Left(15));
  946.     FileFAT.Mfd[CurrentID].ufd[FilePos].IsExist=true;
  947. FileFAT.Mfd[CurrentID].ufd[FilePos].BlockNum=BlockNum;
  948. FileFAT.Mfd[CurrentID].ufd[FilePos].AttrExecute=AttrExecute;
  949.     FileFAT.Mfd[CurrentID].ufd[FilePos].AttrRead=AttrRead;
  950. FileFAT.Mfd[CurrentID].ufd[FilePos].AttrWrite=AttrWrite;
  951. FileFAT.Mfd[CurrentID].ufd[FilePos].IsShared=AttrShare;
  952.     FileFAT.Mfd[CurrentID].ufd[FilePos].FileLen=FileContent.GetLength();
  953. //str.Format("FileName:%s",FileFAT.Mfd[CurrentID].ufd[FilePos].FileName);
  954. //MessageBox(str);
  955. wsprintf(FileFAT.Mfd[CurrentID].ufd[FilePos].Time,GetCurrentTime());
  956. FileFAT.Mfd[CurrentID].nItem++;
  957. WriteFAT();
  958. ShowUserFiles();
  959. return true;
  960. }
  961. CString CTab4::ReadFile(CString FileName)
  962. {
  963.     int i,FilePos;
  964. bool flag=false;
  965. char Buffer[32];
  966. CString strReturn;
  967. for(i=0;i<MAXFILE;i++)
  968. {
  969. if(FileFAT.Mfd[CurrentID].ufd[i].FileName==FileName && FileFAT.Mfd[CurrentID].ufd[i].IsExist==true)
  970. {
  971. flag=true;
  972. FilePos=i;
  973. break;
  974. }
  975. }
  976. if(!flag) return "";
  977. for(i=0;i<FileFAT.Mfd[CurrentID].ufd[FilePos].BlockNum;i++)
  978. {
  979. ZeroMemory(Buffer,32);
  980. if(!ReadBlock(FileFAT.Mfd[CurrentID].ufd[FilePos].FileLink[i],(BLOCK*)Buffer)) return "";
  981.         //MessageBox(Buffer);
  982. strReturn+=Buffer;
  983. }
  984. return strReturn;
  985. }
  986. void CTab4::OnClickFilelist(NMHDR* pNMHDR, LRESULT* pResult) 
  987. {
  988.     
  989. NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
  990.     CString strFName;
  991. strFName=m_FileList.GetItemText(pNMListView->iItem,0);
  992. SelectPos=pNMListView->iItem;
  993. SelectedFileName=m_FileList.GetItemText(pNMListView->iItem,0);
  994.     m_FileContent=ReadFile(strFName);
  995. UpdateData(false);
  996. *pResult = 0;
  997. }
  998. bool CTab4::ModifyFile(CString FileName, CString FileContent, bool AttrRead, bool AttrWrite, bool AttrExecute, bool AttrShare)
  999. {
  1000.     int i,FilePos,BlockNum,BlockID;
  1001.     bool flag=false;
  1002. FileContent.TrimLeft();
  1003. FileContent.TrimRight();
  1004. char Content[32];
  1005. for(i=0;i<MAXFILE;i++)
  1006. {
  1007. if(FileFAT.Mfd[CurrentID].ufd[i].FileName==SelectedFileName)
  1008. {
  1009. flag=true;
  1010. FilePos=i;
  1011. //CString str;
  1012. //str.Format("%d",FilePos);
  1013. //MessageBox(str);
  1014. break;
  1015. }
  1016. }
  1017.     if(!flag) return false;
  1018. for(i=0;i<FileFAT.Mfd[CurrentID].ufd[FilePos].BlockNum;i++)
  1019. {
  1020. if(!FreeBlock(FileFAT.Mfd[CurrentID].ufd[FilePos].FileLink[i])) return false;
  1021. }
  1022.     ZeroMemory(&FileFAT.Mfd[CurrentID].ufd[FilePos].BlockNum,200);
  1023. BlockNum=(int)FileContent.GetLength()/(BLOCKSIZE+1)+1;
  1024. int count;
  1025.     for(i=0;i<BlockNum;i++)
  1026. {
  1027. BlockID=AllocBlock();
  1028.         if(BlockID)
  1029. {
  1030. FileFAT.Mfd[CurrentID].ufd[FilePos].FileLink[i]=BlockID;
  1031.             count=FileContent.GetLength()-i*32;
  1032. ZeroMemory(&Content,sizeof(Content));
  1033. if(count>32)
  1034.                wsprintf(Content,FileContent.Mid(i*32,32));
  1035.     else
  1036.    wsprintf(Content,FileContent.Mid(i*32,count));
  1037. if(!WriteBlock(BlockID,(BLOCK*)Content)) return false;
  1038. }
  1039. else
  1040. {
  1041. return false;
  1042. }
  1043. }
  1044. wsprintf(FileFAT.Mfd[CurrentID].ufd[FilePos].FileName,FileName.Left(15));
  1045.     FileFAT.Mfd[CurrentID].ufd[FilePos].IsExist=true;
  1046. FileFAT.Mfd[CurrentID].ufd[FilePos].BlockNum=BlockNum;
  1047. FileFAT.Mfd[CurrentID].ufd[FilePos].AttrExecute=AttrExecute;
  1048.     FileFAT.Mfd[CurrentID].ufd[FilePos].AttrRead=AttrRead;
  1049. FileFAT.Mfd[CurrentID].ufd[FilePos].AttrWrite=AttrWrite;
  1050. FileFAT.Mfd[CurrentID].ufd[FilePos].IsShared=AttrShare;
  1051.     FileFAT.Mfd[CurrentID].ufd[FilePos].FileLen=FileContent.GetLength();
  1052. wsprintf(FileFAT.Mfd[CurrentID].ufd[FilePos].Time,GetCurrentTime());
  1053. WriteFAT();
  1054. ShowUserFiles();
  1055. return true;
  1056. }
  1057. void CTab4::ShowBlock(int fileid)
  1058. {
  1059.     CString str,temp;
  1060. for (int i=0;i<FileFAT.Mfd[CurrentID].ufd[fileid].BlockNum;i++)
  1061. {
  1062.        temp.Format(",%d",FileFAT.Mfd[CurrentID].ufd[fileid].FileLink[i]);
  1063.    str+=temp;
  1064. }
  1065. MessageBox(str);
  1066. }
  1067. void CDlgDisk::InitBlockShow()
  1068. {
  1069.     CRect rect;
  1070. GetDlgItem(IDC_STATIC_CHECKER)->GetWindowRect(rect);
  1071. ScreenToClient(rect);
  1072. m_ctrlChecker.Create(WS_VISIBLE | WS_CHILD | WS_VSCROLL | WS_TABSTOP, rect, this, IDC_STATIC_CHECKER);
  1073. m_ctrlChecker.SetTotalBlocks(1000);
  1074. /*for(register i = 10; i < 35; i++)
  1075. m_ctrlChecker.SetBlock(i, RGB(0, 155, 0));
  1076. for(i = 50; i < 120; i++)
  1077. m_ctrlChecker.SetBlock(i, RGB(255, 0, 0));
  1078. for(i = 150; i < 255; i++)
  1079. m_ctrlChecker.SetBlock(i, RGB(0, 0, i));
  1080. for(i = 256; i < 300; i++)
  1081. m_ctrlChecker.SetBlock(i, RGB(0, 0, 0));
  1082. m_ctrlChecker.Refresh();*/
  1083. }
  1084. HBRUSH CTab4::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
  1085. {
  1086. HBRUSH hbr; 
  1087. switch (nCtlColor) 
  1088. case CTLCOLOR_EDIT:   
  1089. case CTLCOLOR_MSGBOX:  
  1090. switch (pWnd->GetDlgCtrlID())  
  1091. {     
  1092. case IDC_FILE_CONTENT: // first CEdit control ID
  1093. // put your own CONTROL ID here    
  1094. pDC->SetBkColor(m_bluecolor); // change the background color
  1095. pDC->SetTextColor(m_textcolor); // change the text color
  1096. hbr = (HBRUSH) m_bluebrush; //  apply the brush
  1097. break;   
  1098. // otherwise do default handling of OnCtlColor
  1099. default:    
  1100. hbr=CDialog::OnCtlColor(pDC,pWnd,nCtlColor); 
  1101. }  
  1102. break; 
  1103. // otherwise do default handling of OnCtlColor
  1104. default:  
  1105. hbr=CDialog::OnCtlColor(pDC,pWnd,nCtlColor); 
  1106. }
  1107. return hbr; // return brush
  1108. }
  1109. void CDlgDisk::CalcBlock()
  1110. {
  1111.  int i,j,k,sum;
  1112.  for (i=0;i<MAXUSER;i++)
  1113.  {
  1114.  if(FileFAT.Mfd[i].IsExist)
  1115.  {
  1116.              for(j=0;j<MAXFILE;j++)
  1117.  {
  1118. if(FileFAT.Mfd[i].ufd[j].IsExist)
  1119. {
  1120. for(k=0;k<FileFAT.Mfd[i].ufd[j].BlockNum;k++)
  1121. {
  1122.         m_ctrlChecker.SetBlock(FileFAT.Mfd[i].ufd[j].FileLink[k]-1, RGB(0, 0, 255));
  1123.         sum++;
  1124. }
  1125. }
  1126.  }
  1127.  }
  1128.  }
  1129.  
  1130.  AddPiece(RGB(200,0,0),sum*360/1000,"Used"); 
  1131.      //CString str;
  1132.  //str.Format("%d",sum*360/1000);
  1133.  
  1134.  //MessageBox(str);
  1135.  m_Used.Format("已用空间:%d 字节",sum*32);
  1136.  m_UserNum.Format("用户数:%d",FileFAT.UserNum);
  1137.  UpdateData(false);
  1138. }
  1139. void CDlgUser::OnClickUserList(NMHDR* pNMHDR, LRESULT* pResult) 
  1140. {
  1141.     NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
  1142. m_UserName=m_UserListView.GetItemText(pNMListView->iItem,0);
  1143. UpdateData(false);
  1144. *pResult = 0;
  1145. }
  1146. void CDlgLogin::OnDblclkUserlist(NMHDR* pNMHDR, LRESULT* pResult) 
  1147. {
  1148. *pResult = 0;
  1149. OnOK();
  1150. }
  1151. void CTab4::ShowBallTip(CPoint pt, CString msg)
  1152. {
  1153.      LOGFONT lf;
  1154.         ::ZeroMemory (&lf, sizeof (lf));
  1155.         lf.lfHeight = 15;
  1156.         lf.lfWeight = FW_BOLD;
  1157.         lf.lfUnderline = FALSE;
  1158.         ::strcpy (lf.lfFaceName, _T("楷体_GB2312"));
  1159.         m_pBalloonTip = CBalloonTip::Show(pt, CSize(250, 100), msg, lf, 5, TRUE);
  1160. }