DlgSystemPage.cpp
上传用户:lds876
上传日期:2013-05-25
资源大小:567k
文件大小:7k
源码类别:

P2P编程

开发平台:

Visual C++

  1. // DlgSystemPage.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "testbt.h"
  5. #include "DlgSystemPage.h"
  6. #include "FileBase.h"
  7. #include "FileAssociation.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CDlgSystemPage dialog
  15. CDlgSystemPage::CDlgSystemPage(CWnd* pParent /*=NULL*/)
  16. : CPropertyPage(CDlgSystemPage::IDD)
  17. {
  18. //{{AFX_DATA_INIT(CDlgSystemPage)
  19. m_bStartMin = FALSE;
  20. m_bStartOnStartup = FALSE;
  21. m_bSaveDBIntval = FALSE;
  22. m_bContinueUncloseDownload = FALSE;
  23. m_bDefApp = FALSE;
  24. //}}AFX_DATA_INIT
  25. // m_strTorrentDir = _T("");
  26. m_lSaveDBIntval = 0;
  27. }
  28. void CDlgSystemPage::DoDataExchange(CDataExchange* pDX)
  29. {
  30. CPropertyPage::DoDataExchange(pDX);
  31. //{{AFX_DATA_MAP(CDlgSystemPage)
  32. DDX_Control(pDX, IDC_GROUP1, m_gp1);
  33. DDX_Control(pDX, IDC_SPIN_SAVE_DB_INTVAL, m_spinSaveDBIntval);
  34. DDX_Check(pDX, IDC_CHECK_START_MIN, m_bStartMin);
  35. DDX_Check(pDX, IDC_CHECK_START_WINDOW, m_bStartOnStartup);
  36. DDX_Check(pDX, IDC_CHECK_SAVE_DATABASE, m_bSaveDBIntval);
  37. DDX_Check(pDX, IDC_CHECK_KEEP_DOWNLOADING_START, m_bContinueUncloseDownload);
  38. DDX_Check(pDX, IDC_CHECK_DEF_APP, m_bDefApp);
  39. //}}AFX_DATA_MAP
  40. // DDX_Text(pDX, IDC_EDIT_TORRENT_DIR, m_strTorrentDir);
  41. }
  42. BEGIN_MESSAGE_MAP(CDlgSystemPage, CPropertyPage)
  43. //{{AFX_MSG_MAP(CDlgSystemPage)
  44. ON_BN_CLICKED(IDC_CHECK_SAVE_DATABASE, OnCheckSaveDatabase)
  45. //}}AFX_MSG_MAP
  46. // ON_BN_CLICKED(IDC_BUTTON_TORRENT_DIR, OnButtonTorrentDir)
  47. END_MESSAGE_MAP()
  48. /////////////////////////////////////////////////////////////////////////////
  49. // CDlgSystemPage message handlers
  50. BOOL CDlgSystemPage::OnInitDialog() 
  51. {
  52. CPropertyPage::OnInitDialog();
  53. m_spinSaveDBIntval.SetBuddy(GetDlgItem(IDC_EDIT_SAVE_DB_INTVAL));
  54. m_spinSaveDBIntval.SetRange(1, 100);
  55. return TRUE;  // return TRUE unless you set the focus to a control
  56.               // EXCEPTION: OCX Property Pages should return FALSE
  57. }
  58. /*
  59. void CDlgSystemPage::OnButtonTorrentDir() 
  60. {
  61. CString strDef, strFolder;
  62. if (!SelectFolder(strDef, strFolder))
  63. return;
  64. // m_strTorrentDir = strFolder;
  65. UpdateData(false);
  66. }
  67. //*/
  68. bool CDlgSystemPage::Apply()
  69. {
  70. UpdateData();
  71. /*
  72. if (m_strTorrentDir.IsEmpty())
  73. {
  74. AfxMessageBox("direcotry can't be empty");
  75. return false;
  76. }
  77. DWORD dwAttr = GetFileAttributes(m_strTorrentDir);
  78. if (dwAttr == 0xffffffff )
  79. {
  80. if (!MakeDirecotry(m_strTorrentDir.GetBuffer(0)))
  81. {
  82. AfxMessageBox("can't create direcotry (" + m_strTorrentDir + ")" );
  83. return false;
  84. }
  85. }
  86. else if (!(dwAttr & FILE_ATTRIBUTE_DIRECTORY))
  87. {
  88. AfxMessageBox("can't create direcotry (" + m_strTorrentDir + ")" );
  89. return false;
  90. }
  91. if (m_strTorrentDirOld != m_strTorrentDir)
  92. {
  93. if (!MoveDiretory(m_strTorrentDirOld.GetBuffer(0), m_strTorrentDir.GetBuffer(0)))
  94. {
  95. AfxMessageBox("move from (" + m_strTorrentDirOld + ") to (" + m_strTorrentDir + ") error." );
  96. return false;
  97. }
  98. }
  99.   //*/
  100. m_lSaveDBIntval = LOWORD(m_spinSaveDBIntval.GetPos());
  101. int lower=0, upper=0;
  102. m_spinSaveDBIntval.GetRange(lower, upper);
  103. m_lSaveDBIntval = max(lower, m_lSaveDBIntval);
  104. m_lSaveDBIntval = min(upper, m_lSaveDBIntval);
  105. return true;
  106. }
  107. void CDlgSystemPage::SetData(CSetupRegister *pSetupRegister)
  108. {
  109. // m_strTorrentDirOld = pSetupRegister->m_strTorrentDir;
  110. // m_strTorrentDir = pSetupRegister->m_strTorrentDir;
  111. m_bDefApp = pSetupRegister->m_bDefApp;
  112. m_bStartMin = pSetupRegister->m_bStartMin;
  113. m_bStartOnStartup = pSetupRegister->m_bStartOnStartup;
  114. m_bSaveDBIntval = pSetupRegister->m_bSaveDBAuto;
  115. m_bContinueUncloseDownload = pSetupRegister->m_bContinueUnCloseDownload;
  116. m_spinSaveDBIntval.SetPos(pSetupRegister->m_lSaveDBIntval);
  117. UpdateData(false);
  118. OnCheckSaveDatabase();
  119. }
  120. void CDlgSystemPage::GetData(CSetupRegister *pSetupRegister)
  121. {
  122. // pSetupRegister->m_strTorrentDir = m_strTorrentDir;
  123. UpdateData();
  124. pSetupRegister->m_bDefApp = m_bDefApp != 0;
  125. pSetupRegister->m_bStartMin = m_bStartMin !=0 ;
  126. pSetupRegister->m_bStartOnStartup =m_bStartOnStartup !=0 ;
  127. pSetupRegister->m_bContinueUnCloseDownload = m_bContinueUncloseDownload !=0 ;
  128. pSetupRegister->m_bSaveDBAuto = m_bSaveDBIntval !=0 ;
  129. pSetupRegister->m_lSaveDBIntval = m_lSaveDBIntval;
  130. MakeAssoc(pSetupRegister->m_bDefApp);
  131. SetAutoRun(pSetupRegister->m_bStartOnStartup);
  132. }
  133. void CDlgSystemPage::OnOK() 
  134. {
  135. GetParent()->SendMessage(WM_COMMAND, IDOK, 0);
  136. CPropertyPage::OnOK();
  137. }
  138. void CDlgSystemPage::OnCancel() 
  139. {
  140. GetParent()->SendMessage(WM_COMMAND, IDCANCEL, 0);
  141. CPropertyPage::OnCancel();
  142. }
  143. void CDlgSystemPage::OnCheckSaveDatabase() 
  144. {
  145. UpdateData();
  146. m_spinSaveDBIntval.EnableWindow(m_bSaveDBIntval);
  147. GetDlgItem(IDC_EDIT_SAVE_DB_INTVAL)->EnableWindow(m_bSaveDBIntval);
  148. }
  149. void CDlgSystemPage::MakeAssoc(bool bRegister) 
  150. {
  151. CFileAssociation fileAssoc("共工BT", ".Torrent", "制作文件(*.Torrent) - 共工BT");
  152. if (!fileAssoc.MakeAssocaition(bRegister))
  153. assert(false);
  154. if (!fileAssoc.MakeGenerateTorrentMenu(bRegister))
  155. assert(false);
  156. }
  157. void ShowRetErrorMsg(long lResult);
  158. void CDlgSystemPage::SetAutoRun(bool bAutoRun) 
  159. {
  160. char szModuleFileName[1024] = {0};
  161. if (!GetModuleFileName(AfxGetApp()->m_hInstance, szModuleFileName, 1024))
  162. {
  163. assert(false);
  164. return ;
  165. }
  166. CString strAutoKey = "btauto";
  167. HKEY key = 0;
  168. LONG lResult = RegOpenKey(HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Run", &key); 
  169. if (lResult != ERROR_SUCCESS)
  170. return;
  171. if (bAutoRun)
  172. {
  173. lResult = ::RegSetValueEx(key, strAutoKey, 0, 
  174. REG_SZ, (const unsigned char*)szModuleFileName, strlen(szModuleFileName));
  175. assert(lResult == ERROR_SUCCESS);
  176. /*
  177. LPVOID lpMsgBuf;
  178. FormatMessage( 
  179. FORMAT_MESSAGE_ALLOCATE_BUFFER | 
  180. FORMAT_MESSAGE_FROM_SYSTEM | 
  181. FORMAT_MESSAGE_IGNORE_INSERTS,
  182. NULL,
  183. lResult,
  184. MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
  185. (LPTSTR) &lpMsgBuf,
  186. 0,
  187. NULL 
  188. );
  189. // Display the string.
  190. ::MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
  191. //*/
  192. }
  193. else
  194. {
  195. CString strTemp;
  196. ULONG lSize = _MAX_PATH * 2;
  197. ULONG lType = REG_SZ;
  198. LONG lResult = ::RegQueryValueEx(key, strAutoKey, 0, &lType, (BYTE*)strTemp.GetBuffer(lSize), &lSize);
  199. if (lResult == ERROR_SUCCESS)
  200. {
  201. lResult = RegDeleteValue(key, strAutoKey);
  202. if (lResult != ERROR_SUCCESS)
  203. {
  204. #ifdef _DEBUG
  205. LPVOID lpMsgBuf;
  206. FormatMessage( 
  207. FORMAT_MESSAGE_ALLOCATE_BUFFER | 
  208. FORMAT_MESSAGE_FROM_SYSTEM | 
  209. FORMAT_MESSAGE_IGNORE_INSERTS,
  210. NULL,
  211. lResult,
  212. MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
  213. (LPTSTR) &lpMsgBuf,
  214. 0,
  215. NULL 
  216. );
  217. // Display the string.
  218. ::MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
  219. assert(false);
  220. #endif
  221. }
  222. }
  223. }
  224. RegCloseKey(key);
  225. }