X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/837e57436a89516a5fa9f478f401e06bd872c17c..b4fe51258d17c1e63c55b2b83c8db83e44b15927:/src/msw/dirdlg.cpp diff --git a/src/msw/dirdlg.cpp b/src/msw/dirdlg.cpp index 80b5e4dbb4..5434b5d0d7 100644 --- a/src/msw/dirdlg.cpp +++ b/src/msw/dirdlg.cpp @@ -28,7 +28,7 @@ #include "wx/dirdlg.h" #endif -#if defined(__WIN95__) && !defined(__GNUWIN32__) +#if (defined(__WIN95__) && !defined(__GNUWIN32__))||defined(wxUSE_NORLANDER_HEADERS) #include "shlobj.h" // Win95 shell #endif @@ -46,6 +46,34 @@ IMPLEMENT_CLASS(wxDirDialog, wxDialog) #endif +static int CALLBACK +BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lp, LPARAM pData) + { + TCHAR szDir[MAX_PATH]; + + switch(uMsg) + { + case BFFM_INITIALIZED: + // We have put m_path into pData. + // TRUE -> passing char *, not dir id. + SendMessage(hwnd,BFFM_SETSELECTION,TRUE,pData); + break; + + case BFFM_SELCHANGED: + // Set the status window to the currently selected path. + if (SHGetPathFromIDList((LPITEMIDLIST) lp ,szDir)) + { + SendMessage(hwnd,BFFM_SETSTATUSTEXT,0,(LPARAM)szDir); + } + break; + + default: + break; + } + return 0; + } + + wxDirDialog::wxDirDialog(wxWindow *parent, const wxString& message, // const wxString& caption, const wxString& defaultPath, @@ -61,12 +89,12 @@ wxDirDialog::wxDirDialog(wxWindow *parent, const wxString& message, int wxDirDialog::ShowModal(void) { // Unfortunately Gnu-Win32 doesn't yet have COM support -#if defined(__WIN95__) && !defined(__GNUWIN32__) +#if (defined(__WIN95__) && !defined(__GNUWIN32__))||defined(wxUSE_NORLANDER_HEADERS) HWND hWnd = 0; if (m_parent) hWnd = (HWND) m_parent->GetHWND(); BROWSEINFO bi; - LPSTR lpBuffer; + LPTSTR lpBuffer; // LPITEMIDLIST pidlPrograms; // PIDL for Programs folder LPITEMIDLIST pidlBrowse; // PIDL selected by user LPMALLOC pMalloc = NULL; @@ -77,7 +105,7 @@ int wxDirDialog::ShowModal(void) return wxID_CANCEL; // Allocate a buffer to receive browse information. - if ((lpBuffer = (LPSTR) pMalloc->Alloc(MAX_PATH)) == NULL) + if ((lpBuffer = (LPTSTR) pMalloc->Alloc(MAX_PATH)) == NULL) { pMalloc->Release(); return wxID_CANCEL; @@ -94,14 +122,13 @@ int wxDirDialog::ShowModal(void) */ // Fill in the BROWSEINFO structure. - wxWX2MBbuf message = m_message.mb_str(); bi.hwndOwner = hWnd; bi.pidlRoot = NULL; // pidlPrograms; bi.pszDisplayName = lpBuffer; - bi.lpszTitle = (const char*)message; // BC++ 4.52 says LPSTR, not LPTSTR? + bi.lpszTitle = m_message; // BC++ 4.52 says LPSTR, not LPTSTR? bi.ulFlags = 0; - bi.lpfn = NULL; - bi.lParam = 0; + bi.lpfn = BrowseCallbackProc; + bi.lParam = (LPARAM)m_path.c_str(); // Browse for a folder and return its PIDL. pidlBrowse = SHBrowseForFolder(&bi);