// PropertyPageFile.cpp : implementation file // #include "stdafx.h" #include "ScreenGrabber.h" #include "PropertyPageFile.h" #include "oxdirdlg.h" #include "path.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CPropertyPageFile property page //IMPLEMENT_DYNCREATE(CPropertyPageFile, COXContextHelpPropertyPage) // array of control IDs and corresponding help IDs const DWORD CPropertyPageFile::m_nHelpIDs[] = { IDC_STATIC_FILE_NAME, IDH_STATIC_FILE_NAME, IDC_COMBO_FILE_NAME, IDH_COMBO_FILE_NAME, IDC_STATIC_FILE_TYPE, IDH_STATIC_FILE_TYPE, IDC_COMBO_FILE_TYPE, IDH_COMBO_FILE_TYPE, IDC_CHECK_AUTOMATIC_NAMING, IDH_CHECK_AUTOMATIC_NAMING, IDC_BUTTON_CAPTURE_DIR, IDH_BUTTON_CAPTURE_DIR, IDC_STATIC_CAPTURE_DIR, IDH_STATIC_CAPTURE_DIR, 0, 0 }; CPropertyPageFile::CPropertyPageFile() : COXContextHelpPropertyPage(CPropertyPageFile::IDD), m_ctlComboFileName(COXHistoryCombo::TBPHorizontalRightCenter,FALSE) { //{{AFX_DATA_INIT(CPropertyPageFile) m_bAutomaticNaming = FALSE; m_sFileName = _T(""); m_sFileType = _T(""); m_sCaptureDir = _T(""); //}}AFX_DATA_INIT m_bInitialized=FALSE; } CPropertyPageFile::~CPropertyPageFile() { } void CPropertyPageFile::DoDataExchange(CDataExchange* pDX) { COXContextHelpPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPropertyPageFile) DDX_Control(pDX, IDC_COMBO_FILE_NAME, m_ctlComboFileName); DDX_Control(pDX, IDC_COMBO_FILE_TYPE, m_ctlComboFileType); DDX_Control(pDX, IDC_STATIC_FILE_TYPE, m_ctlStaticFileType); DDX_Control(pDX, IDC_STATIC_FILE_NAME, m_ctlStaticFileName); DDX_Control(pDX, IDC_STATIC_CAPTURE_DIR, m_ctlStaticCaptureDir); DDX_Control(pDX, IDC_CHECK_AUTOMATIC_NAMING, m_ctlCheckAutomaticNaming); DDX_Control(pDX, IDC_BUTTON_CAPTURE_DIR, m_ctlButtonDir); DDX_CBString(pDX, IDC_COMBO_FILE_NAME, m_sFileName); DDX_CBString(pDX, IDC_COMBO_FILE_TYPE, m_sFileType); DDX_Text(pDX, IDC_STATIC_CAPTURE_DIR, m_sCaptureDir); DDX_Check(pDX, IDC_CHECK_AUTOMATIC_NAMING, m_bAutomaticNaming); //}}AFX_DATA_MAP // check if all variables are correct CheckVars(); } BEGIN_MESSAGE_MAP(CPropertyPageFile, COXContextHelpPropertyPage) //{{AFX_MSG_MAP(CPropertyPageFile) ON_BN_CLICKED(IDC_BUTTON_CAPTURE_DIR, OnButtonCaptureDir) ON_BN_CLICKED(IDC_CHECK_AUTOMATIC_NAMING, OnCheckAutomaticNaming) ON_WM_SIZE() //}}AFX_MSG_MAP ON_MESSAGE(WM_KICKIDLE, OnKickIdle) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPropertyPageFile message handlers BOOL CPropertyPageFile::AdjustToolTips() { //Set up the Tooltip BOOL result; result=m_Tooltip.AddTool(&m_ctlStaticFileType, _T("Define the type of file to save captured image")); ASSERT(result != 0) ; result=m_Tooltip.AddTool(&m_ctlStaticFileName, _T("Define the name of file to save captured image")); ASSERT(result != 0) ; result=m_Tooltip.AddTool(&m_ctlStaticCaptureDir, _T("The name of directory where the file will be saved")); ASSERT(result != 0) ; result=m_Tooltip.AddTool(&m_ctlComboFileType, _T("Change the type of file to save captured image")); ASSERT(result != 0) ; result=m_Tooltip.AddTool(&m_ctlComboFileName, _T("Change the name of file to save captured image")); ASSERT(result != 0) ; result=m_Tooltip.AddTool(&m_ctlCheckAutomaticNaming, _T("Automatically set a name of file to save captured image")); ASSERT(result != 0) ; result=m_Tooltip.AddTool(&m_ctlButtonDir, _T("Change the name of directory where the file will be saved")); ASSERT(result != 0) ; return result; } BOOL CPropertyPageFile::OnInitDialog() { COXContextHelpPropertyPage::OnInitDialog(); // TODO: Add extra initialization here m_LayoutManager.Attach(this); CRect rectDialog; GetWindowRect(&rectDialog); CRect rectItem; GetDlgItem(IDC_STATIC_DIR)->GetWindowRect(&rectItem); m_LayoutManager.SetConstraint(IDC_STATIC_DIR, OX_LMS_RIGHT, OX_LMT_SAME, rectItem.right-rectDialog.right); m_LayoutManager.SetConstraint(IDC_STATIC_DIR, OX_LMS_LEFT, OX_LMT_SAME, rectItem.left-rectDialog.left); GetDlgItem(IDC_COMBO_FILE_NAME)->GetWindowRect(&rectItem); m_LayoutManager.SetConstraint(IDC_COMBO_FILE_NAME, OX_LMS_RIGHT, OX_LMT_SAME, rectItem.right-rectDialog.right); m_LayoutManager.SetConstraint(IDC_COMBO_FILE_NAME, OX_LMS_LEFT, OX_LMT_SAME, rectItem.left-rectDialog.left); GetDlgItem(IDC_COMBO_FILE_TYPE)->GetWindowRect(&rectItem); m_LayoutManager.SetConstraint(IDC_COMBO_FILE_TYPE, OX_LMS_RIGHT, OX_LMT_SAME, rectItem.right-rectDialog.right); m_LayoutManager.SetConstraint(IDC_COMBO_FILE_TYPE, OX_LMS_LEFT, OX_LMT_SAME, rectItem.left-rectDialog.left); GetDlgItem(IDC_STATIC_CAPTURE_DIR)->GetWindowRect(&rectItem); m_LayoutManager.SetConstraint(IDC_STATIC_CAPTURE_DIR, OX_LMS_RIGHT, OX_LMT_SAME, rectItem.right-rectDialog.right); m_LayoutManager.SetConstraint(IDC_STATIC_CAPTURE_DIR, OX_LMS_LEFT, OX_LMT_SAME, rectItem.left-rectDialog.left); GetDlgItem(IDC_BUTTON_CAPTURE_DIR)->GetWindowRect(&rectItem); m_LayoutManager.SetConstraint(IDC_BUTTON_CAPTURE_DIR, OX_LMS_RIGHT, OX_LMT_SAME, rectItem.right-rectDialog.right); // Define array of possible types of file m_ctlComboFileType.AddString(_T("Windows Bitmap (*.bmp)")); m_ctlComboFileType.AddString(_T("JPEG Bitmap (*.jpg)")); // check if all variables are correct CheckVars(); // Use auto persistence m_ctlComboFileName.SetAutoPersistent(_T("History - FileName")); m_ctlComboFileName.SetMaxHistoryCount(-1); m_ctlComboFileName.ShowButton(2,FALSE); m_ctlComboFileName.RefreshToolbar(); COXHistoryCombo::EToolbarPosition eToolbarPosition= m_ctlComboFileName.GetToolbarPosition(); m_ctlComboFileName.PositionToolbar(eToolbarPosition, TRUE); UpdateData(FALSE); ShowControls(); m_bInitialized=TRUE; return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CPropertyPageFile::OnButtonCaptureDir() { // TODO: Add your control notification handler code here TRY { // try to get new capture directory UpdateData(TRUE); DWORD flags = OFN_SHOWHELP | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT; // Ask the user to select a directory COXDirectoryDialog dirDlg(m_sCaptureDir,_T("Pick Capture Directory"),TRUE,flags); if (dirDlg.DoModal()==IDOK) { m_sCaptureDir=dirDlg.GetDirectory(); UpdateData(FALSE); } } CATCH_ALL(px) { // Catch all exception and NEVER pass them on to the calling // function (may not be MFC) ! TRACE(_T("CPropertyPageFile::OnButtonCaptureDir() : Catching exception, aborting function\n")); } END_CATCH_ALL } void CPropertyPageFile::OnCheckAutomaticNaming() { // TODO: Add your control notification handler code here ShowControls(); } void CPropertyPageFile::ShowControls() { UpdateData(TRUE); if(m_bAutomaticNaming) { m_ctlComboFileName.EnableWindow(FALSE); } else { m_ctlComboFileName.EnableWindow(TRUE); } UpdateData(FALSE); } void CPropertyPageFile::CheckVars() { if(m_ctlComboFileType.FindStringExact(-1,m_sFileType)==CB_ERR) { if(m_ctlComboFileType.GetCount()>0) { m_ctlComboFileType.GetLBText(0,m_sFileType); } } // check if Capture Directory exists COXPathSpec pathSpec; if(!pathSpec.SetDirectory(m_sCaptureDir)) { // if Capture Directory doesn't exist then // set it to Current Directory pathSpec.DoGetCurrentDir(); } if(m_bAutomaticNaming) { // check if we are capable of automatically naming Capture File if(!pathSpec.MakeUnique()) { m_bAutomaticNaming=FALSE; } } if(!m_bAutomaticNaming) { if(m_sFileName.IsEmpty()) { m_sFileName=_T("ScreenShot"); } } } LRESULT CPropertyPageFile::OnKickIdle(WPARAM wParam, LPARAM /*lParam*/) { UNREFERENCED_PARAMETER(wParam); //use this function to let History Combo's toolbars to get messages ASSERT_VALID(this); ASSERT(wParam == MSGF_DIALOGBOX); BOOL bContinueIdle = TRUE; // Pass on to the history combo m_ctlComboFileName.OnIdle(); return bContinueIdle; } void CPropertyPageFile::OnSize(UINT nType, int cx, int cy) { COXContextHelpPropertyPage::OnSize(nType, cx, cy); // TODO: Add your message handler code here if(m_bInitialized && UpdateData()) { m_ctlComboFileName.RefreshToolbar(); UpdateData(FALSE); } }