Dlg_Settings.cpp 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. // Dlg_Settings.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "StoneU_HC_OCX.h"
  5. #include "Dlg_Settings.h"
  6. #include "Global.h"
  7. // CDlg_Settings 对话框
  8. #define REMOVE_HEIGHT 28
  9. int CALLBACK _SHBrowseForFolderCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData);
  10. BOOL SelectFolder(CString& lpstrFolderPos, CString strInitFolder)
  11. {
  12. BOOL bRes = FALSE;
  13. char lpszPath[MAX_PATH];
  14. LPMALLOC lpMalloc;
  15. BROWSEINFO sInfo;
  16. LPITEMIDLIST lpidlBrowse;
  17. if (::SHGetMalloc(&lpMalloc) != NOERROR)
  18. return FALSE;
  19. if (strInitFolder != _T(""))
  20. {
  21. if(strInitFolder.Right(1) == _T("\\")) // 删除尾部的"\\"
  22. strInitFolder = strInitFolder.Left(strInitFolder.GetLength() - 1);
  23. }
  24. ::ZeroMemory(&sInfo, sizeof(BROWSEINFO));
  25. sInfo.pidlRoot = 0;
  26. sInfo.pszDisplayName = lpszPath;
  27. sInfo.lpszTitle = _T("请选择您需要的目的文件夹:");
  28. sInfo.ulFlags = BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE | BIF_USENEWUI;
  29. sInfo.lpfn = _SHBrowseForFolderCallbackProc;
  30. sInfo.lParam = (LPARAM)strInitFolder.GetBuffer(0);
  31. // 显示文件夹选择对话框
  32. lpidlBrowse = ::SHBrowseForFolder(&sInfo);
  33. if (lpidlBrowse != NULL)
  34. {
  35. // 取得文件夹名
  36. if (::SHGetPathFromIDList(lpidlBrowse,lpszPath))
  37. {
  38. lpstrFolderPos = _T("");
  39. lpstrFolderPos = lpszPath;
  40. if(lpstrFolderPos != "")
  41. {
  42. if(lpstrFolderPos.Right(1) != _T("\\"))
  43. lpstrFolderPos += _T("\\"); //在末尾时附加"\\"
  44. }
  45. }
  46. bRes = TRUE;
  47. }
  48. if(lpidlBrowse != NULL)
  49. {
  50. ::CoTaskMemFree(lpidlBrowse);
  51. }
  52. lpMalloc->Release();
  53. return bRes;
  54. }
  55. int CALLBACK _SHBrowseForFolderCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
  56. {
  57. static HWND hWndEdit = NULL;
  58. CString strDir;
  59. switch (uMsg)
  60. {
  61. case BFFM_INITIALIZED:
  62. {
  63. ::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData);
  64. CRect rect;
  65. HWND hChild = GetWindow(hwnd, GW_CHILD);
  66. while (hChild)
  67. {
  68. TCHAR szClass[256];
  69. GetClassName(hChild, szClass, 255);
  70. // 如果是中间的树目录控件,使可以随窗口移动大小
  71. if (strcmp(szClass, "SHBrowseForFolder ShellNameSpace Control") == 0)
  72. {
  73. GetWindowRect(hChild, rect);
  74. rect.top -= REMOVE_HEIGHT;
  75. CPoint pt = rect.TopLeft();
  76. ScreenToClient(hwnd, &pt);
  77. MoveWindow(hChild, pt.x, pt.y, rect.Width(), rect.Height(), TRUE);
  78. }
  79. if (strcmp(szClass, "Edit") == 0)
  80. {
  81. hWndEdit = hChild;
  82. }
  83. hChild = GetNextWindow(hChild, GW_HWNDNEXT);
  84. }
  85. SetWindowText(hwnd, "文件浏览...");
  86. }
  87. break;
  88. case BFFM_SELCHANGED:
  89. if(hWndEdit)
  90. {
  91. if(::SHGetPathFromIDList((LPITEMIDLIST)lParam, strDir.GetBufferSetLength(MAX_PATH)))
  92. {
  93. SetWindowText(hWndEdit, strDir);
  94. }
  95. else
  96. {
  97. SetWindowText(hWndEdit, NULL);
  98. SendMessage(hwnd, BFFM_VALIDATEFAILED, 0, 0);
  99. }
  100. strDir.ReleaseBuffer();
  101. }
  102. break;
  103. default:
  104. break;
  105. }
  106. return 0;
  107. }
  108. IMPLEMENT_DYNAMIC(CDlg_Settings, CDialog)
  109. CDlg_Settings::CDlg_Settings(CWnd* pParent /*=NULL*/)
  110. : CDialog(CDlg_Settings::IDD, pParent)
  111. , m_sEdit_VideoPath(_T(""))
  112. , m_nComb_Velume(0)
  113. , m_nComb_OperateType(0)
  114. , m_nComb_VideoMaxTime(0)
  115. , m_nComb_NoMotionTime(0)
  116. {
  117. }
  118. CDlg_Settings::~CDlg_Settings()
  119. {
  120. }
  121. void CDlg_Settings::DoDataExchange(CDataExchange* pDX)
  122. {
  123. CDialog::DoDataExchange(pDX);
  124. DDX_Text(pDX, IDC_EDIT_VIDEOPATH, m_sEdit_VideoPath);
  125. DDX_Control(pDX, IDC_COMBO_VELUME, m_Comb_Velume);
  126. DDX_CBIndex(pDX, IDC_COMBO_VELUME, m_nComb_Velume);
  127. DDX_Control(pDX, IDC_COMBO_OPERATETYPE, m_Comb_OperateType);
  128. DDX_CBIndex(pDX, IDC_COMBO_OPERATETYPE, m_nComb_OperateType);
  129. DDX_Control(pDX, IDC_BTN_BROWSE, m_btn_Browse);
  130. DDX_Control(pDX, IDC_BTN_SAVE, m_btn_Save);
  131. DDX_Control(pDX, IDC_COMBO_VIDEOMAXTIME, m_Comb_VideoMaxTime);
  132. DDX_CBIndex(pDX, IDC_COMBO_VIDEOMAXTIME, m_nComb_VideoMaxTime);
  133. DDX_Control(pDX, IDC_COMBO_NOMOTIONTIME, m_Comb_NoMotionTime);
  134. DDX_CBIndex(pDX, IDC_COMBO_NOMOTIONTIME, m_nComb_NoMotionTime);
  135. }
  136. BEGIN_MESSAGE_MAP(CDlg_Settings, CDialog)
  137. ON_BN_CLICKED(IDC_BTN_BROWSE, OnBnClickedBtnBrowse)
  138. ON_BN_CLICKED(IDC_BTN_SAVE, OnBnClickedBtnSave)
  139. END_MESSAGE_MAP()
  140. // CDlg_Settings 消息处理程序
  141. BOOL CDlg_Settings::OnInitDialog()
  142. {
  143. CDialog::OnInitDialog();
  144. SetCtrlPos();
  145. // TODO: 在此添加额外的初始化
  146. m_Comb_Velume.InsertString( 0,"500m" );
  147. m_Comb_Velume.InsertString(1,"1G");
  148. m_Comb_Velume.InsertString(2,"3G");
  149. m_Comb_Velume.InsertString(3,"5G");
  150. m_Comb_Velume.SetCurSel(0);
  151. m_Comb_OperateType.InsertString(0,"覆盖最早的视频" );
  152. m_Comb_OperateType.InsertString(1,"不保存视频");
  153. m_Comb_OperateType.SetCurSel(0);
  154. m_Comb_VideoMaxTime.InsertString(0,"3分钟" );
  155. m_Comb_VideoMaxTime.InsertString(1,"5分钟");
  156. m_Comb_VideoMaxTime.InsertString(2,"10分钟");
  157. m_Comb_VideoMaxTime.InsertString(3,"20分钟");
  158. m_Comb_VideoMaxTime.InsertString(4,"30分钟");
  159. m_Comb_VideoMaxTime.InsertString(5,"1小时");
  160. m_Comb_VideoMaxTime.SetCurSel(0);
  161. m_Comb_NoMotionTime.InsertString(0,"5秒" );
  162. m_Comb_NoMotionTime.InsertString(1,"10秒");
  163. m_Comb_NoMotionTime.InsertString(2,"30秒");
  164. m_Comb_NoMotionTime.InsertString(3,"1分钟");
  165. m_Comb_NoMotionTime.InsertString(4,"3分钟");
  166. m_Comb_NoMotionTime.SetCurSel(0);
  167. m_sEdit_VideoPath = g_strVideoPath;
  168. m_nComb_Velume = g_nDiskVolume;
  169. m_nComb_OperateType = g_nOperateType;
  170. m_nComb_VideoMaxTime = g_nVideoMaxTime;
  171. m_nComb_NoMotionTime = g_nNoMotionTime;
  172. UpdateData( false );
  173. //m_btn_Browse.SetBitmaps(IDB_BITMAP_SAVE, RGB(255, 0, 255));
  174. //m_btn_Browse.SetFlat(FALSE);
  175. //m_btn_Browse.SetAlign(CButtonST::ST_ALIGN_HORIZ);
  176. //m_btn_Browse.SetIcon(IDI_BROWSE);
  177. //m_btn_Browse.SetFlat(FALSE);
  178. //m_btn_Browse.SetAlign(CButtonST::ST_ALIGN_HORIZ);
  179. //m_btn_Save.SetBitmaps(IDB_BITMAP_SAVE, RGB(255, 0, 255));
  180. //m_btn_Save.SetFlat(FALSE);
  181. //m_btn_Save.SetAlign(CButtonST::ST_ALIGN_HORIZ);
  182. return TRUE; // return TRUE unless you set the focus to a control
  183. // 异常: OCX 属性页应返回 FALSE
  184. }
  185. void CDlg_Settings::SetCtrlPos()
  186. {
  187. if( g_nChangePos==0 )
  188. return;
  189. this->MoveWindow( g_Rect );
  190. }
  191. void CDlg_Settings::OnBnClickedBtnBrowse()
  192. {
  193. SelectFolder( m_sEdit_VideoPath,"D:\\" );
  194. UpdateData( false );
  195. }
  196. void CDlg_Settings::OnBnClickedBtnSave()
  197. {
  198. UpdateData();
  199. g_strVideoPath = m_sEdit_VideoPath;
  200. g_nDiskVolume = m_nComb_Velume;
  201. g_nOperateType = m_nComb_OperateType;
  202. g_nVideoMaxTime = m_nComb_VideoMaxTime;
  203. g_nNoMotionTime = m_nComb_NoMotionTime;
  204. g_IniFile.SetVarStr(_T("video"),_T("VideoPath"),g_strVideoPath);
  205. g_IniFile.SetVarInt(_T("video"),_T("DiskVelume"),g_nDiskVolume);
  206. g_IniFile.SetVarInt(_T("video"),_T("OperateType"),g_nOperateType);
  207. g_IniFile.SetVarInt(_T("video"),_T("VideoMaxTime"),g_nVideoMaxTime);
  208. g_IniFile.SetVarInt(_T("video"),_T("NoMotionTime"),g_nNoMotionTime);
  209. if (!SetCurrentDirectory(g_strVideoPath))
  210. CreateDirectory(g_strVideoPath, NULL);
  211. }