1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
   |  
#include "stdafx.h"
#include <memory>
#include <shlobj.h>
 
// Prototype pour le .h :
static int __stdcall BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData);
 
 
// Dans le fichier .cpp :
CBrowseForFolder::CBrowseForFolder(const HWND hParent,
                                   const LPITEMIDLIST pidl,
                                   const CString& strTitle) {
    BROWSEINFO browse;
    LPITEMIDLIST pItemReturn;
    BROWSEINFO browse;
 
    // Remplissage de la structure browse
    ZeroMemory(&browse, sizeof(TBrowseInfo));
    browse.hwndOwner = GetActiveWindow();  ;
    ...
    browse.lpfn = browseCallbackProc;//-----> voir fonction callback ci-dessous
    browse.lParam = (long)this;
    browse.iImage = 0;
 
    pItemReturn = SHBrowseForFolder(&browse);
    if (pItemReturn == NULL) {
      return;
    }
    char szChemin[MAX_PATH + 1];
    if (SHGetPathFromIDList(pItemReturn, szChemin)) {
    ...
    }
}// CBrowseForFolder
 
 
 
int __stdcall CBrowseForFolder::BrowseCallbackProc(HWND hwnd,
                                                   UINT uMsg,
                                                   LPARAM lParam,
                                                   LPARAM lpData) {
  TRect rect;
 
  GetWindowRect(hwnd, &rect);
  int nLargeur = rect.Right - rect.Left + 1;
  int nHauteur = rect.Bottom - rect.Top + 1;
 
  TPoint dialogPT;
  TRect wa = Screen->WorkAreaRect;
  dialogPT.x = (wa.Width() / 2) - (nLargeur / 2);
  dialogPT.y = (wa.Height() / 2) - (nHauteur / 2);
  MoveWindow(hwnd, dialogPT.x, dialogPT.y, nLargeur,
                                           nHauteur, True);
  return 1;     
}// BrowseCallbackProc | 
Partager