Dlg_Settings.cpp 7.3 KB

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