windows-nt/Source/XPSP1/NT/admin/activec/conui/svfildlg.cpp

154 lines
4.6 KiB
C++
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
//+-------------------------------------------------------------------------
//
// 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 <shlobj.h>
#include "AMC.h"
#include "AMCDoc.h"
#include "Shlwapi.h"
#include <windows.h>
#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)