Ne tako davno sam i ja imao ovaj problem.
Evo resenja koje meni obavlja posao (samo WInWPI32), a mogu da biram defalut folder koji ce se otvoriti:
Code:
// Zbog "MyBrowseForFolder" dodati linker opciju: -lole32
// Windows 2000, Dev-C++ 4.9.8.9
#include <windows.h>
#include<shlobj.h>
char szSelectedPath[MAX_PATH];
int CALLBACK MyBrowseCallbackProc(HWND hWnd, UINT uMsg, LPARAM lParam, LPARAM lpData){
if (uMsg == BFFM_INITIALIZED) {SendMessage(hWnd, BFFM_SETSELECTION, TRUE, lpData);}
return 0;
}
bool MyBrowseForFolder(HWND hWnd, const char* szInitialPath, const char* szTitle, char* szSelectedPath)
{
BROWSEINFO bi;
char szDisplayName[MAX_PATH];
bool bRetVal = false;
IMalloc* pMalloc;
*szSelectedPath = 0;
CoInitialize(NULL);
SHGetMalloc(&pMalloc);
bi.hwndOwner = hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = szDisplayName;
bi.lpszTitle = szTitle;
bi.ulFlags = BIF_RETURNONLYFSDIRS|BIF_USENEWUI;
bi.lpfn = MyBrowseCallbackProc;
bi.lParam = (LPARAM) szInitialPath; // ovde je inicijalni folder
bi.iImage = 0;
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
if (pidl != NULL) {
if (SHGetPathFromIDList(pidl, szSelectedPath)) {
bRetVal = true;
}
pMalloc->Free(pidl);
}
pMalloc->Release();
CoUninitialize();
return bRetVal;
}
void IzaberiFolder(){
if (MyBrowseForFolder(NULL, "c:\\Dev-Cpp", "Izaberite Folder sa Podacima", szSelectedPath))
MessageBox(NULL,szSelectedPath,"Izabrali ste folder:",MB_OK);
}
int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)
{
IzaberiFolder();
MessageBox(NULL,szSelectedPath,"PONAVLJAM: Izabrali ste folder:",MB_OK);
return 0;
}