// Dlg_Settings.cpp : 实现文件 // #include "stdafx.h" #include "StoneU_HC_OCX.h" #include "Dlg_Settings.h" #include "Global.h" // CDlg_Settings 对话框 #define REMOVE_HEIGHT 28 int CALLBACK _SHBrowseForFolderCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData); BOOL SelectFolder(CString& lpstrFolderPos, CString strInitFolder) { BOOL bRes = FALSE; char lpszPath[MAX_PATH]; LPMALLOC lpMalloc; BROWSEINFO sInfo; LPITEMIDLIST lpidlBrowse; if (::SHGetMalloc(&lpMalloc) != NOERROR) return FALSE; if (strInitFolder != _T("")) { if(strInitFolder.Right(1) == _T("\\")) // 删除尾部的"\\" strInitFolder = strInitFolder.Left(strInitFolder.GetLength() - 1); } ::ZeroMemory(&sInfo, sizeof(BROWSEINFO)); sInfo.pidlRoot = 0; sInfo.pszDisplayName = lpszPath; sInfo.lpszTitle = _T("请选择您需要的目的文件夹:"); sInfo.ulFlags = BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE | BIF_USENEWUI; sInfo.lpfn = _SHBrowseForFolderCallbackProc; sInfo.lParam = (LPARAM)strInitFolder.GetBuffer(0); // 显示文件夹选择对话框 lpidlBrowse = ::SHBrowseForFolder(&sInfo); if (lpidlBrowse != NULL) { // 取得文件夹名 if (::SHGetPathFromIDList(lpidlBrowse,lpszPath)) { lpstrFolderPos = _T(""); lpstrFolderPos = lpszPath; if(lpstrFolderPos != "") { if(lpstrFolderPos.Right(1) != _T("\\")) lpstrFolderPos += _T("\\"); //在末尾时附加"\\" } } bRes = TRUE; } if(lpidlBrowse != NULL) { ::CoTaskMemFree(lpidlBrowse); } lpMalloc->Release(); return bRes; } int CALLBACK _SHBrowseForFolderCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData) { static HWND hWndEdit = NULL; CString strDir; switch (uMsg) { case BFFM_INITIALIZED: { ::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData); CRect rect; HWND hChild = GetWindow(hwnd, GW_CHILD); while (hChild) { TCHAR szClass[256]; GetClassName(hChild, szClass, 255); // 如果是中间的树目录控件,使可以随窗口移动大小 if (strcmp(szClass, "SHBrowseForFolder ShellNameSpace Control") == 0) { GetWindowRect(hChild, rect); rect.top -= REMOVE_HEIGHT; CPoint pt = rect.TopLeft(); ScreenToClient(hwnd, &pt); MoveWindow(hChild, pt.x, pt.y, rect.Width(), rect.Height(), TRUE); } if (strcmp(szClass, "Edit") == 0) { hWndEdit = hChild; } hChild = GetNextWindow(hChild, GW_HWNDNEXT); } SetWindowText(hwnd, "文件浏览..."); } break; case BFFM_SELCHANGED: if(hWndEdit) { if(::SHGetPathFromIDList((LPITEMIDLIST)lParam, strDir.GetBufferSetLength(MAX_PATH))) { SetWindowText(hWndEdit, strDir); } else { SetWindowText(hWndEdit, NULL); SendMessage(hwnd, BFFM_VALIDATEFAILED, 0, 0); } strDir.ReleaseBuffer(); } break; default: break; } return 0; } IMPLEMENT_DYNAMIC(CDlg_Settings, CDialog) CDlg_Settings::CDlg_Settings(CWnd* pParent /*=NULL*/) : CDialog(CDlg_Settings::IDD, pParent) , m_sEdit_VideoPath(_T("")) , m_nComb_Velume(0) , m_nComb_OperateType(0) , m_nComb_VideoMaxTime(0) , m_nComb_NoMotionTime(0) { } CDlg_Settings::~CDlg_Settings() { } void CDlg_Settings::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT_VIDEOPATH, m_sEdit_VideoPath); DDX_Control(pDX, IDC_COMBO_VELUME, m_Comb_Velume); DDX_CBIndex(pDX, IDC_COMBO_VELUME, m_nComb_Velume); DDX_Control(pDX, IDC_COMBO_OPERATETYPE, m_Comb_OperateType); DDX_CBIndex(pDX, IDC_COMBO_OPERATETYPE, m_nComb_OperateType); DDX_Control(pDX, IDC_BTN_BROWSE, m_btn_Browse); DDX_Control(pDX, IDC_BTN_SAVE, m_btn_Save); DDX_Control(pDX, IDC_COMBO_VIDEOMAXTIME, m_Comb_VideoMaxTime); DDX_CBIndex(pDX, IDC_COMBO_VIDEOMAXTIME, m_nComb_VideoMaxTime); DDX_Control(pDX, IDC_COMBO_NOMOTIONTIME, m_Comb_NoMotionTime); DDX_CBIndex(pDX, IDC_COMBO_NOMOTIONTIME, m_nComb_NoMotionTime); } BEGIN_MESSAGE_MAP(CDlg_Settings, CDialog) ON_BN_CLICKED(IDC_BTN_BROWSE, OnBnClickedBtnBrowse) ON_BN_CLICKED(IDC_BTN_SAVE, OnBnClickedBtnSave) END_MESSAGE_MAP() // CDlg_Settings 消息处理程序 BOOL CDlg_Settings::OnInitDialog() { CDialog::OnInitDialog(); SetCtrlPos(); // TODO: 在此添加额外的初始化 m_Comb_Velume.InsertString( 0,"500m" ); m_Comb_Velume.InsertString(1,"1G"); m_Comb_Velume.InsertString(2,"3G"); m_Comb_Velume.InsertString(3,"5G"); m_Comb_Velume.SetCurSel(0); m_Comb_OperateType.InsertString(0,"覆盖最早的视频" ); m_Comb_OperateType.InsertString(1,"不保存视频"); m_Comb_OperateType.SetCurSel(0); m_Comb_VideoMaxTime.InsertString(0,"3分钟" ); m_Comb_VideoMaxTime.InsertString(1,"5分钟"); m_Comb_VideoMaxTime.InsertString(2,"10分钟"); m_Comb_VideoMaxTime.InsertString(3,"20分钟"); m_Comb_VideoMaxTime.InsertString(4,"30分钟"); m_Comb_VideoMaxTime.InsertString(5,"1小时"); m_Comb_VideoMaxTime.SetCurSel(0); m_Comb_NoMotionTime.InsertString(0,"5秒" ); m_Comb_NoMotionTime.InsertString(1,"10秒"); m_Comb_NoMotionTime.InsertString(2,"30秒"); m_Comb_NoMotionTime.InsertString(3,"1分钟"); m_Comb_NoMotionTime.InsertString(4,"3分钟"); m_Comb_NoMotionTime.SetCurSel(0); m_sEdit_VideoPath = g_strVideoPath; m_nComb_Velume = g_nDiskVolume; m_nComb_OperateType = g_nOperateType; m_nComb_VideoMaxTime = g_nVideoMaxTime; m_nComb_NoMotionTime = g_nNoMotionTime; UpdateData( false ); //m_btn_Browse.SetBitmaps(IDB_BITMAP_SAVE, RGB(255, 0, 255)); //m_btn_Browse.SetFlat(FALSE); //m_btn_Browse.SetAlign(CButtonST::ST_ALIGN_HORIZ); //m_btn_Browse.SetIcon(IDI_BROWSE); //m_btn_Browse.SetFlat(FALSE); //m_btn_Browse.SetAlign(CButtonST::ST_ALIGN_HORIZ); //m_btn_Save.SetBitmaps(IDB_BITMAP_SAVE, RGB(255, 0, 255)); //m_btn_Save.SetFlat(FALSE); //m_btn_Save.SetAlign(CButtonST::ST_ALIGN_HORIZ); return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE } void CDlg_Settings::SetCtrlPos() { if( g_nChangePos==0 ) return; this->MoveWindow( g_Rect ); } void CDlg_Settings::OnBnClickedBtnBrowse() { SelectFolder( m_sEdit_VideoPath,"D:\\" ); UpdateData( false ); } void CDlg_Settings::OnBnClickedBtnSave() { UpdateData(); g_strVideoPath = m_sEdit_VideoPath; g_nDiskVolume = m_nComb_Velume; g_nOperateType = m_nComb_OperateType; g_nVideoMaxTime = m_nComb_VideoMaxTime; g_nNoMotionTime = m_nComb_NoMotionTime; g_IniFile.SetVarStr(_T("video"),_T("VideoPath"),g_strVideoPath); g_IniFile.SetVarInt(_T("video"),_T("DiskVelume"),g_nDiskVolume); g_IniFile.SetVarInt(_T("video"),_T("OperateType"),g_nOperateType); g_IniFile.SetVarInt(_T("video"),_T("VideoMaxTime"),g_nVideoMaxTime); g_IniFile.SetVarInt(_T("video"),_T("NoMotionTime"),g_nNoMotionTime); if (!SetCurrentDirectory(g_strVideoPath)) CreateDirectory(g_strVideoPath, NULL); }