Radim PlatformSDK projekat u MSVS 2005 okruženju
Pri obradi poruke BN_CLICKED poziva se moja funkcija GetDirectory ( i nšta drugo se ne radi u okviru nje ) u kojoj treba da pozove SHBrowseForFolder i onda da parsuje pidl ( LPITEMIDLIST ) sa SHGetPathFromIDList. Evo kod :
BOOL GetDirectory(LPCTSTR prethodni)
{
BROWSEINFO bi;
LPITEMIDLIST pidl;
char szBase[MAX_PATH];
char * izabrano = NULL;
if (!prethodni || !(*prethodni))
GetCurrentDirectory(MAX_PATH, szBase);
else
lstrcpy(szBase, prethodni);
bi.hwndOwner = hGlavniProzor;
bi.pidlRoot = NULL; // Desktop
bi.pszDisplayName = izabrano;
bi.lpszTitle = "Izabrati direktorijum :";
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;
bi.lpfn = &BFFProc;
bi.lParam = (LPARAM)szBase;
bi.iImage = 0;
pidl = SHBrowseForFolder(&bi);
if (pidl)
{
if (SHGetPathFromIDList(pidl, izabrano)) // ovde prijavi Access violation
{
lpMalloc->Free(pidl);
SendMessage(hPutanjaEdit, WM_SETTEXT, 0, (LPARAM)izabrano);
return TRUE;
}
}
return FALSE;
}
Naravno u WinMain sam inicirao lpMalloc globalnu sa SHGetMalloc ( hPutanjaEdit je handle EDIT kontrole ). BFFProc je Hook koji samo menja izabrani dir u dialogu :
int CALLBACK BFFProc(HWND hWnd, UINT Msg, LPARAM lParam, LPARAM lpData)
{
if (Msg == BFFM_INITIALIZED)
SendMessage(hWnd, BFFM_SETSELECTION, TRUE, lpData);
return 0;
UNREFERENCED_PARAMETER(lParam);
}
Sve kontrole nalaze se na istom prozoru ( hGlavniProzor ).
Da li neko može da mi kaže o čemu se radi?
Nadam se da sam bio dovoljno precizan u vezi pitanja i
Hvala unapred!
With no lovin' in our souls and no money in our coats you can't say we're satisfied