PageShellDialogFile.cpp
上传用户:sesekoo
上传日期:2020-07-18
资源大小:21543k
文件大小:16k
源码类别:

界面编程

开发平台:

Visual C++

  1. // PageShellDialogFile.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "profuis_controls.h"
  5. #include "PageShellDialogFile.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. #if ( ! defined __EXT_MFC_NO_SHELL_DIALOG_FILE )
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CPageShellDialogFile dialog
  14. CPageShellDialogFile::CPageShellDialogFile(CWnd* pParent /*=NULL*/)
  15. : CPageBase(CPageShellDialogFile::IDD, pParent)
  16. , m_bInitComplete( false )
  17. {
  18. //{{AFX_DATA_INIT(CPageShellDialogFile)
  19. //}}AFX_DATA_INIT
  20. SetAutoSubclassChildControls();
  21. }
  22. void CPageShellDialogFile::DoDataExchange(CDataExchange* pDX)
  23. {
  24. CPageBase::DoDataExchange(pDX);
  25. //{{AFX_DATA_MAP(CPageShellDialogFile)
  26. DDX_Control(pDX, IDC_CHECK_JUMP_TO_CURRENT_DIRECTORY_INITIALLY, m_checkJumpToCurrentDirectoryInitially);
  27. DDX_Control(pDX, IDC_CHECK_ALLOW_CURRENT_DIRECTORY_CHANGING, m_checkAllowCurrentDirectoryChanging);
  28. DDX_Control(pDX, IDC_CHECK_COMPARE_WITH_WINDOWS, m_checkCompareWithWindowsDialogs);
  29. DDX_Control(pDX, IDC_CHECK_SHOW_TREE, m_checkShowTree);
  30. DDX_Control(pDX, IDC_CHECK_USE_SPLITTER, m_checkUseSplitter);
  31. DDX_Control(pDX, IDC_CHECK_COLLAPSING_ANIMATION, m_checkCollapsingAnimation);
  32. DDX_Control(pDX, IDC_CHECK_SHOW_ROOT_FOLDER, m_checkShowRootFolder);
  33. DDX_Control(pDX, IDC_CHECK_SHOW_PARENT_FOLDER, m_checkShowParentFolder);
  34. DDX_Control(pDX, IDC_CHECK_ENABLE_SHELL_CONTEXT_MENUS_FD, m_checkEnableShellContextMenusFD);
  35. DDX_Control(pDX, IDC_CHECK_INITIALLY_COLLAPSED, m_checkInitiallyCollapsed);
  36. DDX_Control(pDX, IDC_CHECK_ENABLE_COLLAPSING, m_checkEnableCollapsing);
  37. DDX_Control(pDX, IDC_CHECK_SHOW_HIDDEN_ITEMS_FD, m_checkShowHiddenItemsFD);
  38. DDX_Control(pDX, IDC_CHECK_RESOLVE_LINKS, m_checkResolveLinks);
  39. DDX_Control(pDX, IDC_CHECK_WRITE_ACCESS, m_checkWriteAccess);
  40. DDX_Control(pDX, IDC_CHECK_SHOW_FT_COMBO, m_checkShowFTCombo);
  41. DDX_Control(pDX, IDC_CHECK_READ_ACCESS, m_checkReadAccess);
  42. DDX_Control(pDX, IDC_CHECK_PROMPT_OVERWRITE, m_checkPromptOverwrite);
  43. DDX_Control(pDX, IDC_CHECK_FNE_SHOW, m_checkFNEShow);
  44. DDX_Control(pDX, IDC_CHECK_FNE_READ_ONLY, m_checkFNEReadOnly);
  45. DDX_Control(pDX, IDC_CHECK_FILES_MUST_EXIST, m_checkFilesMustExist);
  46. DDX_Control(pDX, IDC_CHECK_PATH_MUST_EXIST, m_checkPathMustExist);
  47. DDX_Control(pDX, IDC_EDIT_CUSTOM_CAPTION_FOR_FILE_TYPE_LABEL, m_editCustomCaptionForFileTypeLabel);
  48. DDX_Control(pDX, IDC_EDIT_CUSTOM_CAPTION_FOR_FILE_NAME_LABEL, m_editCustomCaptionForFileNameLabel);
  49. DDX_Control(pDX, IDC_EDIT_CUSTOM_CAPTION_FOR_CANCEL_BUTTON2, m_editCustomCaptionForCancelButton2);
  50. DDX_Control(pDX, IDC_EDIT_CUSTOM_CAPTION_FOR_OPEN_SAVE_BUTTON, m_editCustomCaptionForOpenSaveButton);
  51. DDX_Control(pDX, IDC_EDIT_CUSTOM_CAPTION_FOR_FILE_DIALOG, m_editCustomCaptionForFileDialog);
  52. DDX_Control(pDX, IDC_COMBO_FILE_DIALOG_TYPE, m_comboFileDialogType);
  53. DDX_Control(pDX, IDC_EDIT_FD_INITIAL_FOLDER, m_editInitialFolderForFileDialog);
  54. DDX_Control(pDX, IDC_EDIT_FD_FT_INIT_IDX, m_editInitialFileTypeIndex);
  55. DDX_Control(pDX, IDC_SPIN_FD_FT_INIT_IDX, m_spinInitialFileTypeIndex);
  56. DDX_Control(pDX, IDC_EDIT_FD_INITIAL_FILE_NAMES, m_editInitialFileNames );
  57. DDX_Control(pDX, IDC_CHECK_SR_SL, m_checkSaveRestoreShellLocation);
  58. DDX_Control(pDX, IDC_CHECK_SR_WP, m_checkSaveRestoreWindowPosition);
  59. //}}AFX_DATA_MAP
  60. DDX_Control(pDX, IDC_EDIT_FD_FILE_FILTER, m_editFileDialogFilter);
  61. DDX_Control(pDX, IDC_EDIT_FD_RESULT, m_editResultOfFileDialog);
  62. }
  63. BEGIN_MESSAGE_MAP(CPageShellDialogFile, CPageBase)
  64. //{{AFX_MSG_MAP(CPageShellDialogFile)
  65. ON_BN_CLICKED(IDC_BUTTON_SHOW_WINDOWS_DIALOG, OnButtonShowWindowsDialog)
  66. ON_BN_CLICKED(IDC_BUTTON_SHOW_PROF_UIS_DIALOG, OnButtonShowProfUisDialog)
  67. ON_BN_CLICKED(IDC_CHECK_COMPARE_WITH_WINDOWS, OnCheckCompareWithWindowsDialogs)
  68. ON_BN_CLICKED(IDC_CHECK_SR_SL, OnCheckSrSl)
  69. ON_BN_CLICKED(IDC_CHECK_JUMP_TO_CURRENT_DIRECTORY_INITIALLY, OnCheckJumpToCurrentDirectoryInitially)
  70. //}}AFX_MSG_MAP
  71. END_MESSAGE_MAP()
  72. /////////////////////////////////////////////////////////////////////////////
  73. // CPageShellDialogFile message handlers
  74. BOOL CPageShellDialogFile::OnInitDialog() 
  75. {
  76. CPageBase::OnInitDialog();
  77. m_comboFileDialogType.SetCurSel( 0 );
  78. static LPCTSTR g_strEmptyCommentCueBanner = _T("Empty text here means use default caption.");
  79. m_editCustomCaptionForFileDialog.SetCueBanner( g_strEmptyCommentCueBanner );
  80. m_editCustomCaptionForOpenSaveButton.SetCueBanner( g_strEmptyCommentCueBanner );
  81. m_editCustomCaptionForCancelButton2.SetCueBanner( g_strEmptyCommentCueBanner );
  82. m_editCustomCaptionForFileTypeLabel.SetCueBanner( g_strEmptyCommentCueBanner );
  83. m_editCustomCaptionForFileNameLabel.SetCueBanner( g_strEmptyCommentCueBanner );
  84. m_editFileDialogFilter.SetWindowText( 
  85. _T("Portable Network Graphics (*.png;*.mng)|*.png; *.mng|")
  86. _T("JPG Files (*.jpg;*.jp2)|*.jpg; *.jp2|")
  87. _T("GIF Files (*.gif)|*.gif|")
  88. _T("PCX Files (*.pcx)|*.pcx|")
  89. _T("Windows bitmaps (*.bmp)|*.bmp|")
  90. _T("Windows icons (*.ico)|*.ico|")
  91. _T("All Files (*.*)|*.*|")
  92. _T("|")
  93. );
  94. m_checkFNEShow.SetCheck( 1 );
  95. m_checkFNEReadOnly.SetCheck( 0 );
  96. m_checkShowFTCombo.SetCheck( 1 );
  97. m_checkFilesMustExist.SetCheck( 0 );
  98. m_checkPathMustExist.SetCheck( 0 );
  99. m_checkReadAccess.SetCheck( 0 );
  100. m_checkWriteAccess.SetCheck( 0 );
  101. m_checkPromptOverwrite.SetCheck( 1 ); // used in save dialogs only
  102. m_checkShowHiddenItemsFD.SetCheck( 0 );
  103. m_checkResolveLinks.SetCheck( 1 );
  104. m_checkEnableShellContextMenusFD.SetCheck( 1 );
  105. m_checkEnableCollapsing.SetCheck( 1 );
  106. m_checkUseSplitter.SetCheck( 1 );
  107. m_checkShowTree.SetCheck( 1 );
  108. m_checkSaveRestoreShellLocation.SetCheck( 1 );
  109. m_checkSaveRestoreWindowPosition.SetCheck( 1 );
  110. m_checkJumpToCurrentDirectoryInitially.SetCheck( 0 );
  111. m_checkAllowCurrentDirectoryChanging.SetCheck( 1 );
  112. OnCheckSrSl();
  113. m_bInitComplete = true;
  114. return TRUE;
  115. }
  116. void CPageShellDialogFile::OnButtonShowWindowsDialog() 
  117. {
  118. CExtShellDialogFile::e_file_dialog_type_t _eFDT =
  119. (CExtShellDialogFile::e_file_dialog_type_t)
  120. m_comboFileDialogType.GetCurSel();
  121. ASSERT( CExtShellDialogFile::__EFDT_MIN_VALUE <= _eFDT && _eFDT <= CExtShellDialogFile::__EFDT_MAX_VALUE );
  122. CString strCustomDialogCaption;
  123. m_editCustomCaptionForFileDialog.GetWindowText( strCustomDialogCaption );
  124. CString strFilter;
  125. m_editFileDialogFilter.GetWindowText( strFilter );
  126. CFileDialog dlgFile(
  127. ( _eFDT <= CExtShellDialogFile::__EFDT_OPEN_SINGLE
  128. || _eFDT <= CExtShellDialogFile::__EFDT_OPEN_MULTIPLE
  129. )
  130. ? TRUE : FALSE
  131. ,
  132. _T("jpg"),
  133. strCustomDialogCaption.IsEmpty() ? NULL : LPCTSTR(strCustomDialogCaption),
  134. 0
  135. | ( ( m_checkShowHiddenItemsFD.GetCheck() != 0 ) ? 0 : OFN_HIDEREADONLY )
  136. | ( ( m_checkPromptOverwrite.GetCheck() != 0 ) ? OFN_OVERWRITEPROMPT : 0 )
  137. ,
  138. strFilter.IsEmpty()
  139. ? _T("All Files (*.*)|*.*|")
  140. _T("|") 
  141. : strFilter
  142. ,
  143. this
  144. );
  145. dlgFile.m_ofn.nFilterIndex = 1;
  146. dlgFile.m_ofn.Flags |= OFN_EXPLORER;
  147. if( m_checkFilesMustExist.GetCheck() != 0 )
  148. dlgFile.m_ofn.Flags |= OFN_FILEMUSTEXIST;
  149. if( m_checkPathMustExist.GetCheck() != 0 )
  150. dlgFile.m_ofn.Flags |= OFN_PATHMUSTEXIST;
  151. if( m_checkPromptOverwrite.GetCheck() != 0 ) // used in save dialogs only
  152. dlgFile.m_ofn.Flags |= OFN_OVERWRITEPROMPT;
  153. CString strInitialFolder;
  154. m_editInitialFolderForFileDialog.GetWindowText( strInitialFolder );
  155. strInitialFolder.TrimLeft( _T(" rnt") );
  156. strInitialFolder.TrimRight( _T(" rnt") );
  157. if( ! strInitialFolder.IsEmpty() )
  158. dlgFile.m_ofn.lpstrInitialDir = LPTSTR(LPCTSTR(strInitialFolder));
  159. //CString _strInitialFileNames;
  160. //  m_editInitialFileNames.GetWindowText( _strInitialFileNames );
  161. //  _strInitialFileNames.TrimLeft( _T(" rnt") );
  162. //  _strInitialFileNames.TrimRight( _T(" rnt") );
  163. //  dlgFile.m_ofn.lpstrFile = LPTSTR(LPCTSTR(_strInitialFileNames));
  164. INT nRetVal = (INT)dlgFile.DoModal();
  165. if( nRetVal == IDOK )
  166. m_editResultOfFileDialog.SetWindowText( dlgFile.m_ofn.lpstrFile );
  167. else
  168. m_editResultOfFileDialog.SetWindowText( __CANCEL_BUTTON_PRESSED_EVENT_RESULT_DESCRIPTION );
  169. }
  170. void CPageShellDialogFile::OnButtonShowProfUisDialog() 
  171. {
  172. CExtShellDialogFile::e_file_dialog_type_t _eFDT =
  173. (CExtShellDialogFile::e_file_dialog_type_t)
  174. m_comboFileDialogType.GetCurSel();
  175. ASSERT( CExtShellDialogFile::__EFDT_MIN_VALUE <= _eFDT && _eFDT <= CExtShellDialogFile::__EFDT_MAX_VALUE );
  176. CString strCustomDialogCaption;
  177. m_editCustomCaptionForFileDialog.GetWindowText( strCustomDialogCaption );
  178. CString strCustomOpenSaveButtonCaption;
  179. m_editCustomCaptionForOpenSaveButton.GetWindowText( strCustomOpenSaveButtonCaption );
  180. CString strCustomCancelButtonCaption;
  181. m_editCustomCaptionForCancelButton2.GetWindowText( strCustomCancelButtonCaption );
  182. CString strCustomFileNameLabelCaption;
  183. m_editCustomCaptionForFileNameLabel.GetWindowText( strCustomFileNameLabelCaption );
  184. CString strCustomFileTypeLabelCaption;
  185. m_editCustomCaptionForFileTypeLabel.GetWindowText( strCustomFileTypeLabelCaption );
  186. CExtShellDialogFile dlgShellFile( this, _eFDT );
  187. if( ! strCustomDialogCaption.IsEmpty() )
  188. dlgShellFile.m_strCustomDialogCaption = LPCTSTR(strCustomDialogCaption);
  189. if( ! strCustomOpenSaveButtonCaption.IsEmpty() )
  190. dlgShellFile.m_strCustomOpenSaveButtonCaption = LPCTSTR(strCustomOpenSaveButtonCaption);
  191. if( ! strCustomCancelButtonCaption.IsEmpty() )
  192. dlgShellFile.m_strCustomCancelButtonCaption = LPCTSTR(strCustomCancelButtonCaption);
  193. if( ! strCustomFileNameLabelCaption.IsEmpty() )
  194. dlgShellFile.m_strCustomFileNameLabelCaption = LPCTSTR(strCustomFileNameLabelCaption);
  195. if( ! strCustomFileTypeLabelCaption.IsEmpty() )
  196. dlgShellFile.m_strCustomFileTypeLabelCaption = LPCTSTR(strCustomFileTypeLabelCaption);
  197. CString strFilter;
  198. m_editFileDialogFilter.GetWindowText( strFilter );
  199. if( strFilter.IsEmpty() )
  200. dlgShellFile.m_comboFileTypes.SetFilter(
  201. _T("All Files (*.*)|*.*|")
  202. _T("|")
  203. );
  204. else
  205. dlgShellFile.m_comboFileTypes.SetFilter( LPCTSTR(strFilter) );
  206. dlgShellFile.m_bShowFileNamesEdit = ( m_checkFNEShow.GetCheck() != 0 ) ? true : false;
  207. dlgShellFile.m_bReadOnlyFileNamesEdit = ( m_checkFNEReadOnly.GetCheck() != 0 ) ? true : false;
  208. dlgShellFile.m_bShowFileTypesComboBox = ( m_checkShowFTCombo.GetCheck() != 0 ) ? true : false;
  209. dlgShellFile.m_bFilesMustExist = ( m_checkFilesMustExist.GetCheck() != 0 ) ? true : false;
  210. dlgShellFile.m_bPathMustExist = ( m_checkPathMustExist.GetCheck() != 0 ) ? true : false;
  211. dlgShellFile.m_bCheckReadAccess = ( m_checkReadAccess.GetCheck() != 0 ) ? true : false;
  212. dlgShellFile.m_bCheckWriteAccess = ( m_checkWriteAccess.GetCheck() != 0 ) ? true : false;
  213. dlgShellFile.m_bPromptOverwrite = ( m_checkPromptOverwrite.GetCheck() != 0 ) ? true : false; // used in save dialogs only
  214. dlgShellFile.m_bResolveLinks = ( m_checkResolveLinks.GetCheck() != 0 ) ? true : false;
  215. if( m_checkShowHiddenItemsFD.GetCheck() != 0 )
  216. {
  217. dlgShellFile.m_wndShellTree.m_dwAttributeFilterAny |= SFGAO_HIDDEN;
  218. dlgShellFile.m_wndShellList.m_dwAttributeFilterAny |= SFGAO_HIDDEN;
  219. }
  220. else
  221. {
  222. dlgShellFile.m_wndShellTree.m_dwAttributeFilterAllAbsent |= SFGAO_HIDDEN;
  223. dlgShellFile.m_wndShellList.m_dwAttributeFilterAllAbsent |= SFGAO_HIDDEN;
  224. }
  225. dlgShellFile.m_bUseSplitter = ( m_checkUseSplitter.GetCheck() != 0 ) ? true : false;
  226. dlgShellFile.m_bShowTree = ( m_checkShowTree.GetCheck() != 0 ) ? true : false;
  227. dlgShellFile.m_bEnableCollapsing = ( m_checkEnableCollapsing.GetCheck() != 0 ) ? true : false;
  228. dlgShellFile.m_bCollapseInitially = ( m_checkInitiallyCollapsed.GetCheck() != 0 ) ? true : false;
  229. dlgShellFile.m_bEnableCollapsingAnimation = ( m_checkCollapsingAnimation.GetCheck() != 0 ) ? true : false;
  230. if( m_checkEnableShellContextMenusFD.GetCheck() != 0 )
  231. {
  232. dlgShellFile.m_wndShellList.ShowShellContextMenusSet( true );
  233. dlgShellFile.m_wndShellTree.ShowShellContextMenusSet( true );
  234. }
  235. else
  236. {
  237. dlgShellFile.m_wndShellList.ShowShellContextMenusSet( false );
  238. dlgShellFile.m_wndShellTree.ShowShellContextMenusSet( false );
  239. }
  240. dlgShellFile.m_wndShellList.ShowRootFolderItemSet( ( m_checkShowRootFolder.GetCheck() != 0 ) ? true : false );
  241. dlgShellFile.m_wndShellList.ShowParentFolderItemSet( ( m_checkShowParentFolder.GetCheck() != 0 ) ? true : false );
  242. CString strInitialFolder;
  243. m_editInitialFolderForFileDialog.GetWindowText( strInitialFolder );
  244. strInitialFolder.TrimLeft( _T(" rnt") );
  245. strInitialFolder.TrimRight( _T(" rnt") );
  246. if( ! strInitialFolder.IsEmpty() )
  247. {
  248. // dlgShellFile.m_strRetValFolder = LPCTSTR(strInitialFolder);
  249. dlgShellFile.m_pidlRetValFolder.FromFolder( LPCTSTR(strInitialFolder), NULL );
  250. }
  251. CString strInitialFileTypeIndex;
  252. m_editInitialFileTypeIndex.GetWindowText( strInitialFileTypeIndex );
  253. dlgShellFile.m_nInitialFileTypeIndex = _ttoi( LPCTSTR(strInitialFileTypeIndex) );
  254. // dlgShellFile.m_nInitialFileTypeIndex = dlgShellFile.m_comboFileTypes.FindFilterIndexByExtension( _T("*.pcx") );
  255. CString _strInitialFileNames;
  256. m_editInitialFileNames.GetWindowText( _strInitialFileNames );
  257. _strInitialFileNames.TrimLeft( _T(" rnt") );
  258. _strInitialFileNames.TrimRight( _T(" rnt") );
  259. dlgShellFile.m_strEditorTextInitial = LPCTSTR(_strInitialFileNames);
  260. dlgShellFile.m_bCurrentDirectorySetInitially = ( m_checkJumpToCurrentDirectoryInitially.GetCheck() != 0 ) ? true : false;
  261. dlgShellFile.m_bCurrentDirectorySetOnWalk = ( m_checkAllowCurrentDirectoryChanging.GetCheck() != 0 ) ? true : false;
  262. dlgShellFile.m_bSaveRestoreShellLocation = ( m_checkSaveRestoreShellLocation.GetCheck() != 0 ) ? true : false;
  263. dlgShellFile.m_bSaveRestoreWindowPosition = ( m_checkSaveRestoreWindowPosition.GetCheck() != 0 ) ? true : false;
  264. // VERIFY( dlgShellFile.m_pidlRoot.GetSpecialFolderLocation( m_hWnd, CSIDL_DRIVES ) ); // custom shell root test
  265. INT nRetVal = (INT)dlgShellFile.DoModal();
  266. if( nRetVal == IDOK )
  267. {
  268. // m_editResultOfFileDialog.SetWindowText( dlgShellFile.m_strRetValNames );
  269. //  CExtSafeString str;
  270. //  INT nIndex, nCount = INT( dlgShellFile.m_arrRetVal.GetSize() );
  271. //  for( nIndex = 0; nIndex < nCount; nIndex ++ )
  272. //  {
  273. //  CExtSafeString strTmp = dlgShellFile.m_arrRetVal.GetObjAt( nIndex ) -> GetPath();
  274. //  if( nIndex > 0 )
  275. //  str += _T(" ");
  276. //  str += _T(""");
  277. //  str += LPCTSTR(strTmp);
  278. //  str += _T(""");
  279. //  }
  280. //  m_editResultOfFileDialog.SetWindowText( LPCTSTR(str) );
  281. CExtSafeString str;
  282. INT nIndex, nCount = INT( dlgShellFile.m_arrRetValNames.GetSize() );
  283. for( nIndex = 0; nIndex < nCount; nIndex ++ )
  284. {
  285. CExtSafeString & strTmp = dlgShellFile.m_arrRetValNames.ElementAt( nIndex );
  286. if( nIndex > 0 )
  287. str += _T(" ");
  288. str += _T(""");
  289. str += LPCTSTR(strTmp);
  290. str += _T(""");
  291. }
  292. m_editResultOfFileDialog.SetWindowText( LPCTSTR(str) );
  293. }
  294. else
  295. m_editResultOfFileDialog.SetWindowText( __CANCEL_BUTTON_PRESSED_EVENT_RESULT_DESCRIPTION );
  296. }
  297. void CPageShellDialogFile::OnCheckCompareWithWindowsDialogs() 
  298. {
  299. UINT nShowCmd = ( m_checkCompareWithWindowsDialogs.GetCheck() != 0 ) ? SW_SHOW : SW_HIDE;
  300. GetDlgItem( IDC_BUTTON_SHOW_WINDOWS_DIALOG ) -> ShowWindow( nShowCmd );
  301. }
  302. void CPageShellDialogFile::OnCheckSrSl() 
  303. {
  304. BOOL bEnable = ( m_checkSaveRestoreShellLocation.GetCheck() != 0 ) ? FALSE : TRUE;
  305. m_checkJumpToCurrentDirectoryInitially.EnableWindow( bEnable );
  306. m_editInitialFolderForFileDialog.EnableWindow( bEnable );
  307. }
  308. void CPageShellDialogFile::OnCheckJumpToCurrentDirectoryInitially() 
  309. {
  310. BOOL bEnable = ( m_checkJumpToCurrentDirectoryInitially.GetCheck() != 0 ) ? FALSE : TRUE;
  311. m_checkSaveRestoreShellLocation.EnableWindow( bEnable );
  312. m_editInitialFolderForFileDialog.EnableWindow( bEnable );
  313. }
  314. #endif // ( ! defined __EXT_MFC_NO_SHELL_DIALOG_FILE )