#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
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,
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;
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;
bi.hwndOwner = hWnd;
bi.pidlRoot = NULL; // pidlPrograms;
bi.pszDisplayName = lpBuffer;
- bi.lpszTitle = (LPCTSTR) (const char *) m_message;
+ 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);