DisCdromAndFdDlg.cpp
上传用户:lqt88888
上传日期:2009-12-14
资源大小:905k
文件大小:6k
源码类别:

书籍源码

开发平台:

Visual C++

  1. // DisCdromAndFdDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "DisCdromAndFd.h"
  5. #include "DisCdromAndFdDlg.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CAboutDlg dialog used for App About
  13. class CAboutDlg : public CDialog
  14. {
  15. public:
  16. CAboutDlg();
  17. // Dialog Data
  18. //{{AFX_DATA(CAboutDlg)
  19. enum { IDD = IDD_ABOUTBOX };
  20. //}}AFX_DATA
  21. // ClassWizard generated virtual function overrides
  22. //{{AFX_VIRTUAL(CAboutDlg)
  23. protected:
  24. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  25. //}}AFX_VIRTUAL
  26. // Implementation
  27. protected:
  28. //{{AFX_MSG(CAboutDlg)
  29. //}}AFX_MSG
  30. DECLARE_MESSAGE_MAP()
  31. };
  32. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  33. {
  34. //{{AFX_DATA_INIT(CAboutDlg)
  35. //}}AFX_DATA_INIT
  36. }
  37. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  38. {
  39. CDialog::DoDataExchange(pDX);
  40. //{{AFX_DATA_MAP(CAboutDlg)
  41. //}}AFX_DATA_MAP
  42. }
  43. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  44. //{{AFX_MSG_MAP(CAboutDlg)
  45. // No message handlers
  46. //}}AFX_MSG_MAP
  47. END_MESSAGE_MAP()
  48. /////////////////////////////////////////////////////////////////////////////
  49. // CDisCdromAndFdDlg dialog
  50. CDisCdromAndFdDlg::CDisCdromAndFdDlg(CWnd* pParent /*=NULL*/)
  51. : CDialog(CDisCdromAndFdDlg::IDD, pParent)
  52. {
  53. //{{AFX_DATA_INIT(CDisCdromAndFdDlg)
  54. //}}AFX_DATA_INIT
  55. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  56. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  57. }
  58. void CDisCdromAndFdDlg::DoDataExchange(CDataExchange* pDX)
  59. {
  60. CDialog::DoDataExchange(pDX);
  61. //{{AFX_DATA_MAP(CDisCdromAndFdDlg)
  62. //}}AFX_DATA_MAP
  63. }
  64. BEGIN_MESSAGE_MAP(CDisCdromAndFdDlg, CDialog)
  65. //{{AFX_MSG_MAP(CDisCdromAndFdDlg)
  66. ON_WM_SYSCOMMAND()
  67. ON_WM_PAINT()
  68. ON_WM_QUERYDRAGICON()
  69. ON_CBN_SELCHANGE(IDC_DRIVER, OnSelchangeDriver)
  70. //}}AFX_MSG_MAP
  71. END_MESSAGE_MAP()
  72. /////////////////////////////////////////////////////////////////////////////
  73. // CDisCdromAndFdDlg message handlers
  74. BOOL CDisCdromAndFdDlg::OnInitDialog()
  75. {
  76. CDialog::OnInitDialog();
  77. // Add "About..." menu item to system menu.
  78. // IDM_ABOUTBOX must be in the system command range.
  79. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  80. ASSERT(IDM_ABOUTBOX < 0xF000);
  81. CMenu* pSysMenu = GetSystemMenu(FALSE);
  82. if (pSysMenu != NULL)
  83. {
  84. CString strAboutMenu;
  85. strAboutMenu.LoadString(IDS_ABOUTBOX);
  86. if (!strAboutMenu.IsEmpty())
  87. {
  88. pSysMenu->AppendMenu(MF_SEPARATOR);
  89. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  90. }
  91. }
  92. // Set the icon for this dialog.  The framework does this automatically
  93. //  when the application's main window is not a dialog
  94. SetIcon(m_hIcon, TRUE); // Set big icon
  95. SetIcon(m_hIcon, FALSE); // Set small icon
  96. // TODO: Add extra initialization here
  97. //获得所有驱动器
  98. FindAllDrivers();
  99. return TRUE;  // return TRUE  unless you set the focus to a control
  100. }
  101. void CDisCdromAndFdDlg::OnSysCommand(UINT nID, LPARAM lParam)
  102. {
  103. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  104. {
  105. CAboutDlg dlgAbout;
  106. dlgAbout.DoModal();
  107. }
  108. else
  109. {
  110. CDialog::OnSysCommand(nID, lParam);
  111. }
  112. }
  113. // If you add a minimize button to your dialog, you will need the code below
  114. //  to draw the icon.  For MFC applications using the document/view model,
  115. //  this is automatically done for you by the framework.
  116. void CDisCdromAndFdDlg::OnPaint() 
  117. {
  118. if (IsIconic())
  119. {
  120. CPaintDC dc(this); // device context for painting
  121. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  122. // Center icon in client rectangle
  123. int cxIcon = GetSystemMetrics(SM_CXICON);
  124. int cyIcon = GetSystemMetrics(SM_CYICON);
  125. CRect rect;
  126. GetClientRect(&rect);
  127. int x = (rect.Width() - cxIcon + 1) / 2;
  128. int y = (rect.Height() - cyIcon + 1) / 2;
  129. // Draw the icon
  130. dc.DrawIcon(x, y, m_hIcon);
  131. }
  132. else
  133. {
  134. CDialog::OnPaint();
  135. }
  136. }
  137. // The system calls this to obtain the cursor to display while the user drags
  138. //  the minimized window.
  139. HCURSOR CDisCdromAndFdDlg::OnQueryDragIcon()
  140. {
  141. return (HCURSOR) m_hIcon;
  142. }
  143. //找到所有的驱动器,并在列表框中显示
  144. void CDisCdromAndFdDlg::FindAllDrivers()
  145. {
  146. arrDrvItems.RemoveAll();
  147. CComboBox* Driver=(CComboBox*)GetDlgItem(IDC_DRIVER);
  148. DWORD dwNumBytesForDriveStrings;//实际存储驱动器号的字符串长度
  149. HANDLE hHeap;
  150. LPSTR lp;
  151. CString strLogdrive;
  152. //获得实际存储驱动器号的字符串长度
  153. dwNumBytesForDriveStrings=GetLogicalDriveStrings(0,NULL)*sizeof(TCHAR);
  154. //如果字符串不为空,则表示有正常的驱动器存在
  155. if (dwNumBytesForDriveStrings!=0) {
  156. //分配字符串空间
  157. hHeap=GetProcessHeap();
  158. lp=(LPSTR)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,
  159. dwNumBytesForDriveStrings);
  160. //获得标明所有驱动器的字符串
  161. GetLogicalDriveStrings(HeapSize(hHeap,0,lp),lp);
  162. //将驱动器一个个放到下拉框中
  163. int nIndex = 0;
  164. while (*lp!=0)
  165. {
  166. Driver->AddString(lp);
  167. //将驱动器信息保存在数组中
  168. DRVITEM drv;
  169. drv.nItem = nIndex;
  170. drv.strDrv = lp;
  171. arrDrvItems.Add(drv);
  172. lp=_tcschr(lp,0)+1;
  173. nIndex++;
  174. }
  175. //设第一个驱动器被选择
  176. Driver->SetCurSel(0);
  177. OnSelchangeDriver();
  178. }
  179. else 
  180. AfxMessageBox("Can't Use The Function GetLogicalDriveStrings!");
  181. }
  182. //辨别驱动器
  183. void CDisCdromAndFdDlg::DisDriver(CString strDriver)
  184. {
  185. //获得驱动器类型
  186. UINT DrvType = GetDriveType(strDriver);
  187. CStatic* pTypeWnd = (CStatic*)GetDlgItem(IDC_STATIC_TYPE);
  188. CString strType = "";
  189. switch(DrvType)
  190. {
  191. case DRIVE_CDROM:
  192. strType = "磁盘类型:光驱";
  193. break;
  194. case DRIVE_FIXED:
  195. strType = "磁盘类型:硬盘";
  196. break;
  197. case DRIVE_REMOVABLE:
  198. strType = "磁盘类型:软驱";
  199. break;
  200. default:
  201. return;
  202. break;
  203. }
  204. pTypeWnd->SetWindowText(strType);
  205. //获得驱动器根目录的文件和文件夹
  206. CListBox* pList = (CListBox*)GetDlgItem(IDC_LIST_FILES);
  207. while(pList->GetCount()>0)
  208. pList->DeleteString(0);
  209. CFileFind ff;
  210. CString szDir = strDriver;
  211. if(szDir.Right(1) != "\")
  212. szDir += "\";
  213. szDir += "*.*";
  214. BOOL res = ff.FindFile(szDir);
  215. while(res)
  216. {
  217. res = ff.FindNextFile();
  218. if(!ff.IsDots())
  219. {
  220. pList->AddString(ff.GetFileName());
  221. }
  222. }
  223. ff.Close();//关闭
  224. }
  225. //当前驱动器改变了
  226. void CDisCdromAndFdDlg::OnSelchangeDriver() 
  227. {
  228. CComboBox* Driver=(CComboBox*)GetDlgItem(IDC_DRIVER);
  229. //获得序号
  230. int nSel  = Driver->GetCurSel();
  231. if(nSel>-1)
  232. {
  233. //获得驱动器名称
  234. CString strDriver = arrDrvItems.GetAt(nSel).strDrv;
  235. //辨别该驱动器
  236. DisDriver(strDriver);
  237. }
  238. }