본문 바로가기

Programming/MFC

파일 경로 찾기 디렉토리에서...

파일 경로 찾기 디렉토리에서 내가 설정한 디렉토리로 설정창이 뜨도록 할 수 있다.

 

먼저 CallBack 함수 등록...

 

//헤더..

// File Browser
 static int CALLBACK BrowseProc( HWND hWnd, UINT uMsg, LPARAM lParam, LPARAM pData ) ;

 

//CPP

int CALLBACK CDHG2000View::BrowseProc( HWND hWnd, UINT uMsg, LPARAM lParam, LPARAM pData )
{
 UNUSED_ALWAYS( pData ) ;

 TCHAR   szPath[MAX_PATH] ;

 switch( uMsg )
 {
 case BFFM_INITIALIZED :
  ::SendMessage(hWnd, BFFM_SETSELECTION, TRUE, (LPARAM)(LPCTSTR)g_pMainFrame->m_strRTPFilePath);
  break;

 case BFFM_SELCHANGED :
  if( ::SHGetPathFromIDList((LPITEMIDLIST)lParam, szPath) )
   ::SendMessage(hWnd, BFFM_SETSTATUSTEXT, 0, (LPARAM)szPath);
  break;

 default :
  break;
 }

 return 0 ;
}

 

이제는 버튼으로 파일 다이얼로그를 오픈하는 소스를 추가한다.

// RTP File Open
void CDHG2000View::OnBnClickedButtonRTPFileOpen()
{  
  LPITEMIDLIST pidl = NULL ; 
  BROWSEINFO bi ;
 ZeroMemory(&bi, sizeof(BROWSEINFO)) ; 
 bi.hwndOwner =  this->GetSafeHwnd() ;
 bi.pidlRoot = NULL ;

 bi.lpfn = BrowseProc ;
 bi.lParam = NULL ;
 //bi.lpszTitle = _T("Select RTP File Folder") ;
 //bi.ulFlags = BIF_BROWSEINCLUDEFILES /*| BIF_EDITBOX */| BIF_VALIDATE | BIF_STATUSTEXT;

 pidl = SHBrowseForFolder(&bi) ;

 if ( pidl == NULL )
  return ;

 TCHAR szPath[MAX_PATH] = {0} ; 
 SHGetPathFromIDList(pidl, szPath) ;   

 

//// 이 부분은 선택된 경로를 얻어와서 다른 작업을 처리한다.

 // File Path Save = 선택된 경로
 g_pMainFrame->m_strRTPFilePath = szPath ;


 CDHG2000Doc* pDoc = GetDocument() ;
 pDoc->OpenFileRTP() ;
}