views:

63

answers:

1

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

A: 

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

Mark Ransom
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
I'm glad you got it working, but it doesn't seem like that problem would cause a run time error.
Mark Ransom