BuildFilePathおよびファイルダイアログを開く

12284 ワード

多分これからは主にここでSOUIの紹介をします.
ファイル関連のhelperを貼って、コードを貼るのが便利かどうかをテストします.
 1 /**

 2 * Copyright (C) 2014-2050 

 3 * All rights reserved.

 4 * 

 5 * @file       FileHelper.h

 6 * @brief      

 7 * @version    v1.0      

 8 * @author     SOUI group   

 9 * @date       2014/08/03

10 * 

11 * Describe             helper

12 */

13 

14 #pragma once

15 

16 

17 /**

18 * BuildFilePath

19 * @brief           

20 * @param    LPCTSTR pszCurPath --           

21 * @param    LPCTSTR pszNewPath --     

22 * @param    BOOL bPath --  pszNewPath       

23 * @return   BOOL -- true    

24 * Describe  pszNewPath        ,         

25 */    

26 inline BOOL BuildFilePath(LPCTSTR pszCurPath,LPCTSTR pszNewPath,BOOL bPath=TRUE)

27 {

28     TCHAR szCurDir[MAX_PATH+1];

29     GetCurrentDirectory(MAX_PATH,szCurDir);

30     if(!SetCurrentDirectory(pszCurPath)) return FALSE;

31     TCHAR szNewPath[MAX_PATH+1];

32     _tcscpy_s(szNewPath,_countof(szNewPath),pszNewPath);

33     if(bPath)

34     {

35         int nLen=_tcslen(szNewPath);

36         if(szNewPath[nLen-1]!=_T('\\'))

37             _tcscat(szNewPath,_T("\\"));

38     }

39     LPTSTR pszPath=_tcschr(szNewPath,_T('\\'));

40     while(pszPath)

41     {

42         *pszPath=0;

43         if(!CreateDirectory(szNewPath,NULL)) return FALSE;

44         *pszPath=_T('\\');

45         pszPath=_tcschr(pszPath+1,_T('\\'));

46     }

47     SetCurrentDirectory(szCurDir);

48     return TRUE;

49 }

50 

51 class CFileDialogEx

52 {

53 public:

54 

55     OPENFILENAME m_ofn;

56     BOOL m_bOpenFileDialog;            // TRUE for file open, FALSE for file save

57     TCHAR m_szFileTitle[_MAX_FNAME];   // contains file title after return

58     TCHAR m_szFileName[_MAX_PATH];     // contains full path name after return

59 

60     CFileDialogEx(BOOL bOpenFileDialog, // TRUE for FileOpen, FALSE for FileSaveAs

61         LPCTSTR lpszDefExt = NULL,

62         LPCTSTR lpszFileName = NULL,

63         DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,

64         LPCTSTR lpszFilter = NULL,

65         HWND hWndParent = NULL)

66     {

67         memset(&m_ofn, 0, sizeof(m_ofn)); // initialize structure to 0/NULL

68         m_szFileName[0] = _T('\0');

69         m_szFileTitle[0] = _T('\0');

70 

71         m_bOpenFileDialog = bOpenFileDialog;

72         m_ofn.lStructSize = sizeof(m_ofn);

73         m_ofn.lpstrFile = m_szFileName;

74         m_ofn.nMaxFile = _MAX_PATH;

75         m_ofn.lpstrDefExt = lpszDefExt;

76         m_ofn.lpstrFileTitle = (LPTSTR)m_szFileTitle;

77         m_ofn.nMaxFileTitle = _MAX_FNAME;

78         m_ofn.Flags = dwFlags | OFN_EXPLORER | OFN_ENABLEHOOK | OFN_ENABLESIZING;

79         m_ofn.lpstrFilter = lpszFilter;

80         m_ofn.hwndOwner = hWndParent;

81 

82         // setup initial file name

83         if(lpszFileName != NULL)

84             _tcscpy_s(m_szFileName, _countof(m_szFileName), lpszFileName);

85     }

86 

87     INT_PTR DoModal(HWND hWndParent = ::GetActiveWindow())

88     {

89         if(m_ofn.hwndOwner == NULL)   // set only if not specified before

90             m_ofn.hwndOwner = hWndParent;

91 

92         if(m_bOpenFileDialog)

93             return ::GetOpenFileName(&m_ofn);

94         else

95             return ::GetSaveFileName(&m_ofn);

96     }

97 };

よさそうですね.