comdlg32: Implement CDM_GETFOLDERIDLIST.
This commit is contained in:
parent
30899341cd
commit
bbd8706e73
|
@ -177,6 +177,7 @@ extern LPITEMIDLIST (WINAPI *COMDLG32_PIDL_ILCombine)(LPCITEMIDLIST,LPCITEMIDLIS
|
||||||
extern LPITEMIDLIST (WINAPI *COMDLG32_PIDL_ILGetNext)(LPITEMIDLIST);
|
extern LPITEMIDLIST (WINAPI *COMDLG32_PIDL_ILGetNext)(LPITEMIDLIST);
|
||||||
extern BOOL (WINAPI *COMDLG32_PIDL_ILRemoveLastID)(LPCITEMIDLIST);
|
extern BOOL (WINAPI *COMDLG32_PIDL_ILRemoveLastID)(LPCITEMIDLIST);
|
||||||
extern BOOL (WINAPI *COMDLG32_PIDL_ILIsEqual)(LPCITEMIDLIST, LPCITEMIDLIST);
|
extern BOOL (WINAPI *COMDLG32_PIDL_ILIsEqual)(LPCITEMIDLIST, LPCITEMIDLIST);
|
||||||
|
extern UINT (WINAPI *COMDLG32_PIDL_ILGetSize)(LPCITEMIDLIST);
|
||||||
|
|
||||||
/* SHELL */
|
/* SHELL */
|
||||||
extern LPVOID (WINAPI *COMDLG32_SHAlloc)(DWORD);
|
extern LPVOID (WINAPI *COMDLG32_SHAlloc)(DWORD);
|
||||||
|
|
|
@ -47,6 +47,7 @@ LPITEMIDLIST (WINAPI *COMDLG32_PIDL_ILCombine)(LPCITEMIDLIST,LPCITEMIDLIST);
|
||||||
LPITEMIDLIST (WINAPI *COMDLG32_PIDL_ILGetNext)(LPITEMIDLIST);
|
LPITEMIDLIST (WINAPI *COMDLG32_PIDL_ILGetNext)(LPITEMIDLIST);
|
||||||
BOOL (WINAPI *COMDLG32_PIDL_ILRemoveLastID)(LPCITEMIDLIST);
|
BOOL (WINAPI *COMDLG32_PIDL_ILRemoveLastID)(LPCITEMIDLIST);
|
||||||
BOOL (WINAPI *COMDLG32_PIDL_ILIsEqual)(LPCITEMIDLIST, LPCITEMIDLIST);
|
BOOL (WINAPI *COMDLG32_PIDL_ILIsEqual)(LPCITEMIDLIST, LPCITEMIDLIST);
|
||||||
|
UINT (WINAPI *COMDLG32_PIDL_ILGetSize)(LPCITEMIDLIST);
|
||||||
|
|
||||||
/* SHELL */
|
/* SHELL */
|
||||||
LPVOID (WINAPI *COMDLG32_SHAlloc)(DWORD);
|
LPVOID (WINAPI *COMDLG32_SHAlloc)(DWORD);
|
||||||
|
@ -95,6 +96,7 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD Reason, LPVOID Reserved)
|
||||||
GPA(COMDLG32_PIDL_ILGetNext, SHELL32_hInstance, (LPCSTR)153L);
|
GPA(COMDLG32_PIDL_ILGetNext, SHELL32_hInstance, (LPCSTR)153L);
|
||||||
GPA(COMDLG32_PIDL_ILClone, SHELL32_hInstance, (LPCSTR)18L);
|
GPA(COMDLG32_PIDL_ILClone, SHELL32_hInstance, (LPCSTR)18L);
|
||||||
GPA(COMDLG32_PIDL_ILRemoveLastID, SHELL32_hInstance, (LPCSTR)17L);
|
GPA(COMDLG32_PIDL_ILRemoveLastID, SHELL32_hInstance, (LPCSTR)17L);
|
||||||
|
GPA(COMDLG32_PIDL_ILGetSize, SHELL32_hInstance, (LPCSTR)152L);
|
||||||
|
|
||||||
/* SHELL */
|
/* SHELL */
|
||||||
|
|
||||||
|
|
|
@ -928,6 +928,12 @@ static INT_PTR FILEDLG95_HandleCustomDialogMessages(HWND hwnd, UINT uMsg, WPARAM
|
||||||
retval = lstrlenW(lpstrPath);
|
retval = lstrlenW(lpstrPath);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case CDM_GETFOLDERIDLIST:
|
||||||
|
retval = COMDLG32_PIDL_ILGetSize(fodInfos->ShellInfos.pidlAbsCurrent);
|
||||||
|
if (retval <= wParam)
|
||||||
|
memcpy((void*)lParam, fodInfos->ShellInfos.pidlAbsCurrent, retval);
|
||||||
|
break;
|
||||||
|
|
||||||
case CDM_GETSPEC:
|
case CDM_GETSPEC:
|
||||||
TRACE("CDM_GETSPEC:\n");
|
TRACE("CDM_GETSPEC:\n");
|
||||||
retval = SendMessageW(fodInfos->DlgInfos.hwndFileName, WM_GETTEXTLENGTH, 0, 0) + 1;
|
retval = SendMessageW(fodInfos->DlgInfos.hwndFileName, WM_GETTEXTLENGTH, 0, 0) + 1;
|
||||||
|
|
|
@ -35,6 +35,16 @@ static UINT CALLBACK OFNHookProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lPa
|
||||||
if( nmh->code == CDN_INITDONE)
|
if( nmh->code == CDN_INITDONE)
|
||||||
{
|
{
|
||||||
PostMessage( GetParent(hDlg), WM_COMMAND, IDCANCEL, FALSE);
|
PostMessage( GetParent(hDlg), WM_COMMAND, IDCANCEL, FALSE);
|
||||||
|
} else if (nmh->code == CDN_FOLDERCHANGE )
|
||||||
|
{
|
||||||
|
char buf[1024];
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
memset(buf, 0x66, sizeof(buf));
|
||||||
|
ret = SendMessage( GetParent(hDlg), CDM_GETFOLDERIDLIST, 5, (LPARAM)buf);
|
||||||
|
ok(ret > 0, "CMD_GETFOLDERIDLIST not implemented\n");
|
||||||
|
if (ret > 5)
|
||||||
|
ok(buf[0] == 0x66 && buf[1] == 0x66, "CMD_GETFOLDERIDLIST: The buffer was touched on failure\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,6 +57,9 @@ static void test_DialogCancel(void)
|
||||||
OPENFILENAMEA ofn;
|
OPENFILENAMEA ofn;
|
||||||
BOOL result;
|
BOOL result;
|
||||||
char szFileName[MAX_PATH] = "";
|
char szFileName[MAX_PATH] = "";
|
||||||
|
char szInitialDir[MAX_PATH];
|
||||||
|
|
||||||
|
GetWindowsDirectory(szInitialDir, MAX_PATH);
|
||||||
|
|
||||||
ZeroMemory(&ofn, sizeof(ofn));
|
ZeroMemory(&ofn, sizeof(ofn));
|
||||||
|
|
||||||
|
@ -58,6 +71,7 @@ static void test_DialogCancel(void)
|
||||||
ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_ENABLEHOOK;
|
ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_ENABLEHOOK;
|
||||||
ofn.lpstrDefExt = "txt";
|
ofn.lpstrDefExt = "txt";
|
||||||
ofn.lpfnHook = (LPOFNHOOKPROC) OFNHookProc;
|
ofn.lpfnHook = (LPOFNHOOKPROC) OFNHookProc;
|
||||||
|
ofn.lpstrInitialDir = szInitialDir;
|
||||||
|
|
||||||
PrintDlgA(NULL);
|
PrintDlgA(NULL);
|
||||||
ok(CDERR_INITIALIZATION == CommDlgExtendedError(), "expected %d, got %d\n",
|
ok(CDERR_INITIALIZATION == CommDlgExtendedError(), "expected %d, got %d\n",
|
||||||
|
|
|
@ -435,7 +435,7 @@ static const WCHAR HELPMSGSTRINGW[] = { 'c','o','m','m','d','l','g','_',
|
||||||
#define CDM_GETSPEC (CDM_FIRST + 0x0000)
|
#define CDM_GETSPEC (CDM_FIRST + 0x0000)
|
||||||
#define CDM_GETFILEPATH (CDM_FIRST + 0x0001)
|
#define CDM_GETFILEPATH (CDM_FIRST + 0x0001)
|
||||||
#define CDM_GETFOLDERPATH (CDM_FIRST + 0x0002)
|
#define CDM_GETFOLDERPATH (CDM_FIRST + 0x0002)
|
||||||
#define CDM_GETFOLDERLIST (CDM_FIRST + 0x0003)
|
#define CDM_GETFOLDERIDLIST (CDM_FIRST + 0x0003)
|
||||||
#define CDM_SETCONTROLTEXT (CDM_FIRST + 0x0004)
|
#define CDM_SETCONTROLTEXT (CDM_FIRST + 0x0004)
|
||||||
#define CDM_HIDECONTROL (CDM_FIRST + 0x0005)
|
#define CDM_HIDECONTROL (CDM_FIRST + 0x0005)
|
||||||
#define CDM_SETDEFEXT (CDM_FIRST + 0x0006)
|
#define CDM_SETDEFEXT (CDM_FIRST + 0x0006)
|
||||||
|
|
Loading…
Reference in New Issue