Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 2692 razy

Wstęp

Kolejnym, nieco zaszytym standardowym oknem dialogowym jest okno Przeszukiwanie w poszukiwaniu folderu, którego jedynym celem jest umożliwienie wskazania dowolnego dostępnego na dysku twardym folderu wraz z możliwością utworzenia nowego folderu lub podfolderu. Wywołaniem tego okna dialogowego zajmuje się funkcja SHBrowseForFolder, której jedynym argumentem jest wskaźnik do struktury typu BROWSEINFO. Funkcja ta jest dostępna po załączeniu pliku nagłówkowego:

#include <shlobj.h>

Konieczne jest jeszcze dołączenie do projektu pliku shell32.lib, co robi się poprzez wciśnięcie ALT+F7 lub wybranie z menu Browser folder .... Po tych czynnościach powinno pojawić się okno dialogowe Browser folder Property Pages, w którym z lewej strony na liście należy rozwinąć pozycję Configuration Properties->Linker->Input i w polu Additional Dependencies wpisać shell32.lib, a następnie kliknąć przycisk OK.

Przykładowe wywołanie okna Przeszukiwanie w poszukiwaniu folderu

Stwórzmy nowy projekt o nazwie np. BrowseFolder (szukaj folderu), w którym będzie jedynie wyświetlane okno dialogowe Przeszukiwanie w poszukiwaniu folderu, nie gadając zbyt wiele kod programu będzie wyglądał następująco:

#include <windows.h> #include <shlobj.h> int WINAPI WinMain(HINSTANCE hInst, HINSTANCE,LPSTR, int){ wchar_t buffer[MAX_PATH]; BROWSEINFO bi; // struktura potrzebna do wywołania okna dialogowego przeglądania folderów bi.hwndOwner = NULL; // uchwyt okna bi.pidlRoot = 0; //pidlRoot; bi.pszDisplayName = buffer; // wskaźnik do bufora pamięci, gdzie będzie przechowywana nazwa wybranego folderu bi.lpszTitle = L"Wskaż folder"; // tekst informacji, która wyświetli się w oknie bi.ulFlags = 0; // tutaj można wstawiać dodatkowe flagi wpływające na sposób wyświetlania okna bi.lpfn = NULL; // wskaźnik funckji zdefiniowanej przez programistę, którą okno dialogowe wywoła przy określonym zdarzeniu (ja ustawiłem na NULL, czyli brak funkcji) bi.lParam = NULL; // dodatkowe parametry do przekazania dla funkcji bi.lpfn bi.iImage = 0; // zmienna zawierająca index do systemowej ikony folderu ITEMIDLIST *pidl = SHBrowseForFolder(&bi); // wywołanie okna Przeglądanie w poszukiwaniu folderu if(pidl){ // jeżeli pidl nie równe NULL to wchar_t p[MAX_PATH]; // bufor pamięci SHGetPathFromIDList(pidl, p); // pobieram ścieżkę do folderu z pidl MessageBox(NULL, p, L"Wybrałeś folder!",MB_OK); // i wyświetlam w message box-sie } return 0; }

Wynikiem działania programu będzie pojawienie się widoku okna dialogowego pokazanego na poniższym rysunku.

Okno dialogowe Przeglądanie w poszukiwaniu folderu
Rys. 1
Okno dialogowe Przeglądanie w poszukiwaniu folderu

Nowe funkcje i struktury

Lista funkcji:

Lista struktur: