0

I am using the following function ..instead of CFolderDialog.. to get the folder path...check my code below....am getting a run time error when i try toprint the folder path name in a edit box..

void CSelfExtractorUIDlg::OnBnClickedButton1() {

CDialog dlg;

HWND hwnd = NULL; LPCTSTR szCurrent = (LPCTSTR)malloc(25*sizeof(TCHAR)); szCurrent = NULL; LPTSTR szPath = (LPTSTR)malloc(25*sizeof(TCHAR)); BOOL check = BrowseForFolder(hwnd,szCurrent,szPath); if( check == TRUE) { dlg.SetDlgItemTextW(IDC_EDIT1,szPath); }

}

BOOL BrowseForFolder(HWND hwnd, LPCTSTR szCurrent, LPTSTR szPath) { BROWSEINFO bi = { 0 }; LPITEMIDLIST pidl; TCHAR szDisplay[256]; BOOL retval;

//CoInitialize();

bi.hwndOwner = hwnd; bi.pszDisplayName = szDisplay; bi.lpszTitle = TEXT("Please choose a folder."); bi.ulFlags
= BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE; bi.lpfn
= BrowseCallbackProc; bi.lParam = (LPARAM) szCurrent;

pidl = SHBrowseForFolder(&bi);

if (NULL != pidl) { retval = SHGetPathFromIDList(pidl, szPath); CoTaskMemFree(pidl); } else { retval = FALSE; }

if (!retval) { szPath[0] = TEXT('\0'); }

CoUninitialize(); return retval;

} static int CALLBACK BrowseCallbackProc(HWND hwnd,UINT uMsg, LPARAM lParam, LPARAM lpData) { // If the BFFM_INITIALIZED message is received // set the path to the start path.
switch (uMsg) { case BFFM_INITIALIZED: { if (NULL != lpData) { SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData); } } }

return 0; // The function

kiddo
  • 1,596
  • 7
  • 31
  • 60

1 Answers1

0

25 characters seems a little short for a full path length, I'd use MAX_PATH.

Mark Ransom
  • 299,747
  • 42
  • 398
  • 622
  • tanx for ur reply..but I fixed the problem...I used dialog modal for the Edit control..i tried SetdlgItemText(....) instead of dlg.SetdlgItemText..its working gr8 – kiddo Nov 28 '09 at 04:37
  • I'm glad you got it working, but it doesn't seem like that problem would cause a run time error. – Mark Ransom Nov 28 '09 at 23:11