//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1999 - 1999 // // File: svfildlg.cpp // //-------------------------------------------------------------------------- // svfildlg.cpp : implSELECTEDementation file // #include "stdafx.h" #ifdef IMPLEMENT_LIST_SAVE // See nodemgr.idl (t-dmarm) #include "svfildlg.h" #include #include "AMC.h" #include "AMCDoc.h" #include "Shlwapi.h" #include #include "macros.h" // The following constant is defined in Windows.hlp // So we need to use windows.hlp for help on this topic. #define IDH_SAVE_SELECTED_ROWS 29520 ///////////////////////////////////////////////////////////////////////////// // CSaveFileDialog dialog const TCHAR CSaveFileDialog::strSection[] = _T("Settings"); const TCHAR CSaveFileDialog::strStringItem[] = _T("List Save Location"); CSaveFileDialog::CSaveFileDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt, LPCTSTR lpszFileName, DWORD dwFlags, LPCTSTR lpszFilter, bool bSomeRowSelected, CWnd* pParentWnd) : CFileDialogEx(bOpenFileDialog, lpszDefExt, lpszFileName, dwFlags, lpszFilter, pParentWnd), m_bSomeRowSelected(bSomeRowSelected) { //{{AFX_DATA_INIT(CSaveFileDialog) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT m_ofn.lpstrInitialDir = NULL; // Set the initial path // 1st choice // Try to access the default directory in the registry CWinApp* pApp = AfxGetApp(); m_strRegPath = pApp->GetProfileString (strSection, strStringItem); // Check if the directory is valid, if so then it is now the starting directory DWORD validdir = GetFileAttributes(m_strRegPath); if ((validdir != 0xFFFFFFFF) && (validdir | FILE_ATTRIBUTE_DIRECTORY)) m_ofn.lpstrInitialDir = m_strRegPath; // 2nd choice: // Set the initial save directory to the personal directory // Get the user's personal directory // We'll get it now since we'll ust it in the destructor as well LPITEMIDLIST pidl; HRESULT hres = SHGetSpecialFolderLocation(NULL, CSIDL_PERSONAL, &pidl) ; if (SUCCEEDED(hres)) { SHGetPathFromIDList(pidl, szPath); // Free the pidl IMallocPtr spMalloc; SHGetMalloc(&spMalloc); spMalloc->Free(pidl); if ((m_ofn.lpstrInitialDir == NULL) && (SUCCEEDED(hres))) m_ofn.lpstrInitialDir = szPath; } // 3rd choice: The current directory (m_ofn.lpstrInitialDir = NULL; was set above) // Set additional items about the dialog box ZeroMemory(szFileName, sizeof(szFileName)); m_ofn.lpstrFile = szFileName; m_ofn.nMaxFile = countof(szFileName); m_ofn.Flags |= (OFN_ENABLETEMPLATE|OFN_EXPLORER|OFN_PATHMUSTEXIST); m_ofn.lpTemplateName = MAKEINTRESOURCE(HasModernFileDialog() ? IDD_LIST_SAVE_NEW : IDD_LIST_SAVE); m_flags = 0; // Set the title of the dialog. if (LoadString(m_strTitle, IDS_EXPORT_LIST)) m_ofn.lpstrTitle = (LPCTSTR)m_strTitle; } CSaveFileDialog::~CSaveFileDialog() { // Get the path of the file that was just saved if (*m_ofn.lpstrFile == '\0' || m_ofn.nFileOffset < 1) return; CString strRecentPath(m_ofn.lpstrFile, m_ofn.nFileOffset - 1); // If the personal path exists and it is different from the old path, then change or add // the registry entry if ((szPath != NULL) && (strRecentPath != m_strRegPath)) AfxGetApp()->WriteProfileString (strSection, strStringItem, strRecentPath); } void CSaveFileDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CConsolePropPage) //{{AFX_DATA_MAP(CSaveFileDialog) // NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CSaveFileDialog, CDialog) //{{AFX_MSG_MAP(CSaveFileDialog) ON_BN_CLICKED(IDC_SEL, OnSel) //}}AFX_MSG_MAP ON_MESSAGE(WM_INITDIALOG, OnInitDialog) ON_MMC_CONTEXT_HELP() END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CSaveFileDialog message handlers void CSaveFileDialog::OnSel() { m_flags ^= SELECTED; // Toggle the Selected flag } LRESULT CSaveFileDialog::OnInitDialog(WPARAM, LPARAM) { DECLARE_SC (sc, _T("CSaveFileDialog::OnInitDialog")); CDialog::OnInitDialog(); HWND hwndSelRowsOnly = ::GetDlgItem(*this, IDC_SEL); if (hwndSelRowsOnly) ::EnableWindow(hwndSelRowsOnly, m_bSomeRowSelected ); return TRUE; } #endif // IMPLEMENT_LIST_SAVE See nodemgr.idl (t-dmarm)