2014년 10월 27일 월요일

파일선택 다이얼로그 처럼 폴더만 선택하는 다이얼로그...(MFC)

//Must be static funtion.
static int CALLBACK BrowseForFolder_CallbackProc(HWND m_hWnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
 if(uMsg == BFFM_INITIALIZED)
  SendMessage(m_hWnd, BFFM_SETSELECTION, (WPARAM)TRUE, (LPARAM)lpData);

 return 0;
}

위 함수는 꼭 static 함수여야 한다. 그리고 아래에서 함수포인터를 넣어준다.
아래 코드는 폴더 선택 다이얼로그를 띄워야 하는 곳에 넣어주면 되겠지.

 BROWSEINFO bi;
 ZeroMemory(&bi, sizeof(BROWSEINFO));
 bi.hwndOwner =  this->GetSafeHwnd();
 bi.pidlRoot = NULL;
 bi.pszDisplayName = NULL;
 bi.lpszTitle = NULL;
 bi.ulFlags = BIF_RETURNONLYFSDIRS;
 bi.lpfn = BrowseForFolder_CallbackProc;
 bi.lParam = (LPARAM)(LPCTSTR)m_strContentsDownloadFolder; //초기값 설정.

 LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
 TCHAR szPath[MAX_PATH] = {0,};

 if( pidl )
 {
  SHGetPathFromIDList( pidl, szPath );
  m_strContentsDownloadFolder = szPath;
  GetDlgItem( IDC_DOWNLOAD_ADDRESS )->SetWindowText( m_strContentsDownloadFolder );
 }

위와 같이 하면 폴더를 선택할 수 있는 다이얼로그가 뜬다.

댓글 없음: