]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/dirdlg.cpp
Add detachmenu
[wxWidgets.git] / src / msw / dirdlg.cpp
index 80b5e4dbb4e11359bc1d6f0463c0473bef3cee12..32505241db2b4d9588021bcbb082b5df2dc5a628 100644 (file)
 IMPLEMENT_CLASS(wxDirDialog, wxDialog)
 #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,
 wxDirDialog::wxDirDialog(wxWindow *parent, const wxString& message,
 //             const wxString& caption,
         const wxString& defaultPath,
@@ -66,7 +94,7 @@ int wxDirDialog::ShowModal(void)
   if (m_parent) hWnd = (HWND) m_parent->GetHWND();
 
     BROWSEINFO bi;
   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;
 //    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. 
       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;
     {
         pMalloc->Release();
         return wxID_CANCEL;
@@ -94,14 +122,13 @@ int wxDirDialog::ShowModal(void)
 */
  
     // Fill in the BROWSEINFO structure. 
 */
  
     // Fill in the BROWSEINFO structure. 
-    wxWX2MBbuf message = m_message.mb_str();
     bi.hwndOwner = hWnd;
     bi.pidlRoot = NULL; // pidlPrograms; 
     bi.pszDisplayName = lpBuffer; 
     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.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); 
  
     // Browse for a folder and return its PIDL. 
     pidlBrowse = SHBrowseForFolder(&bi);