[PATCH 4/7] comdlg32: Implement some functions for modifying custom controls.
David Hedberg
david.hedberg at gmail.com
Thu May 26 14:09:22 CDT 2011
---
dlls/comdlg32/itemdlg.c | 99 +++++++++++++--
dlls/comdlg32/tests/itemdlg.c | 265 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 350 insertions(+), 14 deletions(-)
diff --git a/dlls/comdlg32/itemdlg.c b/dlls/comdlg32/itemdlg.c
index b1302ec..ed85bd9 100644
--- a/dlls/comdlg32/itemdlg.c
+++ b/dlls/comdlg32/itemdlg.c
@@ -2991,8 +2991,24 @@ static HRESULT WINAPI IFileDialogCustomize_fnSetControlLabel(IFileDialogCustomiz
LPCWSTR pszLabel)
{
FileDialogImpl *This = impl_from_IFileDialogCustomize(iface);
- FIXME("stub - %p (%d, %s)\n", This, dwIDCtl, debugstr_w(pszLabel));
- return E_NOTIMPL;
+ customctrl *ctrl = get_cctrl(This, dwIDCtl);
+ TRACE("%p (%d, %p)\n", This, dwIDCtl, pszLabel);
+
+ if(!ctrl) return E_INVALIDARG;
+
+ switch(ctrl->type)
+ {
+ case IDLG_CCTRL_MENU:
+ case IDLG_CCTRL_PUSHBUTTON:
+ case IDLG_CCTRL_CHECKBUTTON:
+ case IDLG_CCTRL_TEXT:
+ SendMessageW(ctrl->hwnd, WM_SETTEXT, 0, (LPARAM)pszLabel);
+ break;
+ default:
+ break;
+ }
+
+ return S_OK;
}
static HRESULT WINAPI IFileDialogCustomize_fnGetControlState(IFileDialogCustomize *iface,
@@ -3000,8 +3016,13 @@ static HRESULT WINAPI IFileDialogCustomize_fnGetControlState(IFileDialogCustomiz
CDCONTROLSTATEF *pdwState)
{
FileDialogImpl *This = impl_from_IFileDialogCustomize(iface);
- FIXME("stub - %p (%d, %p)\n", This, dwIDCtl, pdwState);
- return E_NOTIMPL;
+ customctrl *ctrl = get_cctrl(This, dwIDCtl);
+ TRACE("%p (%d, %p)\n", This, dwIDCtl, pdwState);
+
+ if(!ctrl) return E_NOTIMPL;
+
+ *pdwState = ctrl->cdcstate;
+ return S_OK;
}
static HRESULT WINAPI IFileDialogCustomize_fnSetControlState(IFileDialogCustomize *iface,
@@ -3009,8 +3030,31 @@ static HRESULT WINAPI IFileDialogCustomize_fnSetControlState(IFileDialogCustomiz
CDCONTROLSTATEF dwState)
{
FileDialogImpl *This = impl_from_IFileDialogCustomize(iface);
- FIXME("stub - %p (%d, %x)\n", This, dwIDCtl, dwState);
- return E_NOTIMPL;
+ customctrl *ctrl = get_cctrl(This,dwIDCtl);
+ TRACE("%p (%d, %x)\n", This, dwIDCtl, dwState);
+
+ if(ctrl)
+ {
+ LONG wndstyle = GetWindowLongW(ctrl->hwnd, GWL_STYLE);
+
+ if(dwState & CDCS_ENABLED)
+ wndstyle &= ~(WS_DISABLED);
+ else
+ wndstyle |= WS_DISABLED;
+
+ if(dwState & CDCS_VISIBLE)
+ wndstyle |= WS_VISIBLE;
+ else
+ wndstyle &= ~(WS_VISIBLE);
+
+ SetWindowLongW(ctrl->hwnd, GWL_STYLE, wndstyle);
+
+ /* We save the state separately since at least one application
+ * relies on being able to hide a control. */
+ ctrl->cdcstate = dwState;
+ }
+
+ return S_OK;
}
static HRESULT WINAPI IFileDialogCustomize_fnGetEditBoxText(IFileDialogCustomize *iface,
@@ -3018,8 +3062,19 @@ static HRESULT WINAPI IFileDialogCustomize_fnGetEditBoxText(IFileDialogCustomize
WCHAR **ppszText)
{
FileDialogImpl *This = impl_from_IFileDialogCustomize(iface);
- FIXME("stub - %p (%d, %p)\n", This, dwIDCtl, ppszText);
- return E_NOTIMPL;
+ customctrl *ctrl = get_cctrl(This, dwIDCtl);
+ WCHAR len, *text;
+ TRACE("%p (%d, %p)\n", This, dwIDCtl, ppszText);
+
+ if(!ctrl || !(len = SendMessageW(ctrl->hwnd, WM_GETTEXTLENGTH, 0, 0)))
+ return E_FAIL;
+
+ text = CoTaskMemAlloc(sizeof(WCHAR)*(len+1));
+ if(!text) return E_FAIL;
+
+ SendMessageW(ctrl->hwnd, WM_GETTEXT, len+1, (LPARAM)text);
+ *ppszText = text;
+ return S_OK;
}
static HRESULT WINAPI IFileDialogCustomize_fnSetEditBoxText(IFileDialogCustomize *iface,
@@ -3027,8 +3082,14 @@ static HRESULT WINAPI IFileDialogCustomize_fnSetEditBoxText(IFileDialogCustomize
LPCWSTR pszText)
{
FileDialogImpl *This = impl_from_IFileDialogCustomize(iface);
- FIXME("stub - %p (%d, %s)\n", This, dwIDCtl, debugstr_w(pszText));
- return E_NOTIMPL;
+ customctrl *ctrl = get_cctrl(This, dwIDCtl);
+ TRACE("%p (%d, %s)\n", This, dwIDCtl, debugstr_w(pszText));
+
+ if(!ctrl || ctrl->type != IDLG_CCTRL_EDITBOX)
+ return E_FAIL;
+
+ SendMessageW(ctrl->hwnd, WM_SETTEXT, 0, (LPARAM)pszText);
+ return S_OK;
}
static HRESULT WINAPI IFileDialogCustomize_fnGetCheckButtonState(IFileDialogCustomize *iface,
@@ -3036,8 +3097,13 @@ static HRESULT WINAPI IFileDialogCustomize_fnGetCheckButtonState(IFileDialogCust
BOOL *pbChecked)
{
FileDialogImpl *This = impl_from_IFileDialogCustomize(iface);
- FIXME("stub - %p (%d, %p)\n", This, dwIDCtl, pbChecked);
- return E_NOTIMPL;
+ customctrl *ctrl = get_cctrl(This, dwIDCtl);
+ TRACE("%p (%d, %p)\n", This, dwIDCtl, pbChecked);
+
+ if(ctrl)
+ *pbChecked = (SendMessageW(ctrl->hwnd, BM_GETCHECK, 0, 0) == BST_CHECKED);
+
+ return S_OK;
}
static HRESULT WINAPI IFileDialogCustomize_fnSetCheckButtonState(IFileDialogCustomize *iface,
@@ -3045,8 +3111,13 @@ static HRESULT WINAPI IFileDialogCustomize_fnSetCheckButtonState(IFileDialogCust
BOOL bChecked)
{
FileDialogImpl *This = impl_from_IFileDialogCustomize(iface);
- FIXME("stub - %p (%d, %d)\n", This, dwIDCtl, bChecked);
- return E_NOTIMPL;
+ customctrl *ctrl = get_cctrl(This, dwIDCtl);
+ TRACE("%p (%d, %d)\n", This, dwIDCtl, bChecked);
+
+ if(ctrl)
+ SendMessageW(ctrl->hwnd, BM_SETCHECK, bChecked ? BST_CHECKED:BST_UNCHECKED, 0);
+
+ return S_OK;
}
static HRESULT WINAPI IFileDialogCustomize_fnAddControlItem(IFileDialogCustomize *iface,
diff --git a/dlls/comdlg32/tests/itemdlg.c b/dlls/comdlg32/tests/itemdlg.c
index a815dbf..953f71b 100644
--- a/dlls/comdlg32/tests/itemdlg.c
+++ b/dlls/comdlg32/tests/itemdlg.c
@@ -55,6 +55,7 @@ typedef struct {
LONG OnOverwrite;
LPCWSTR set_filename;
BOOL set_filename_tried;
+ BOOL cfd_test1;
} IFileDialogEventsImpl;
static inline IFileDialogEventsImpl *impl_from_IFileDialogEvents(IFileDialogEvents *iface)
@@ -102,6 +103,7 @@ static HRESULT WINAPI IFileDialogEvents_fnOnFolderChanging(IFileDialogEvents *if
return S_OK;
}
+static void test_customize_onfolderchange(IFileDialog *pfd);
static HRESULT WINAPI IFileDialogEvents_fnOnFolderChange(IFileDialogEvents *iface, IFileDialog *pfd)
{
IFileDialogEventsImpl *This = impl_from_IFileDialogEvents(iface);
@@ -134,6 +136,9 @@ static HRESULT WINAPI IFileDialogEvents_fnOnFolderChange(IFileDialogEvents *ifac
}
}
+ if(This->cfd_test1)
+ test_customize_onfolderchange(pfd);
+
return S_OK;
}
@@ -1201,19 +1206,130 @@ static void test_filename(void)
}
static const WCHAR label[] = {'l','a','b','e','l',0};
+static const WCHAR label2[] = {'t','e','s','t',0};
static const WCHAR menuW[] = {'m','e','n','u','_','i','t','e','m',0};
static const WCHAR pushbutton1W[] = {'p','u','s','h','b','u','t','t','o','n','_','i','t','e','m',0};
static const WCHAR pushbutton2W[] = {'p','u','s','h','b','u','t','t','o','n','2','_','i','t','e','m',0};
+static const WCHAR comboboxitem1W[] = {'c','o','m','b','o','b','o','x','1','_','i','t','e','m',0};
+static const WCHAR comboboxitem2W[] = {'c','o','m','b','o','b','o','x','2','_','i','t','e','m',0};
+static const WCHAR radiobutton1W[] = {'r','a','d','i','o','b','u','t','t','o','n','1','_','i','t','e','m',0};
+static const WCHAR radiobutton2W[] = {'r','a','d','i','o','b','u','t','t','o','n','2','_','i','t','e','m',0};
static const WCHAR checkbutton1W[] = {'c','h','e','c','k','b','u','t','t','o','n','1','_','i','t','e','m',0};
+static const WCHAR checkbutton2W[] = {'c','h','e','c','k','b','u','t','t','o','n','2','_','i','t','e','m',0};
static const WCHAR editbox1W[] = {'e','d','i','t','b','o','x','W','1','_','i','t','e','m',0};
+static const WCHAR editbox2W[] = {'e','d','i','t','b','o','x','W','2','_','i','t','e','m',0};
static const WCHAR textW[] = {'t','e','x','t','_','i','t','e','m',0};
+static const WCHAR text2W[] = {'t','e','x','t','2','_','i','t','e','m',0};
+static const WCHAR separatorW[] = {'s','e','p','a','r','a','t','o','r','_','i','t','e','m',0};
static const WCHAR visualgroup1W[] = {'v','i','s','u','a','l','g','r','o','u','p','1',0};
+static const WCHAR visualgroup2W[] = {'v','i','s','u','a','l','g','r','o','u','p','2',0};
+
+static const WCHAR floatnotifysinkW[] = {'F','l','o','a','t','N','o','t','i','f','y','S','i','n','k',0};
+static const WCHAR RadioButtonListW[] = {'R','a','d','i','o','B','u','t','t','o','n','L','i','s','t',0};
+
+struct fw_arg {
+ LPCWSTR class, text;
+ HWND hwnd_res;
+};
+static BOOL CALLBACK find_window_callback(HWND hwnd, LPARAM lparam)
+{
+ struct fw_arg *arg = (struct fw_arg*)lparam;
+ WCHAR buf[1024];
+
+ if(arg->class)
+ {
+ GetClassNameW(hwnd, buf, 1024);
+ if(lstrcmpW(buf, arg->class))
+ return TRUE;
+ }
+
+ if(arg->text)
+ {
+ GetWindowTextW(hwnd, buf, 1024);
+ if(lstrcmpW(buf, arg->text))
+ return TRUE;
+ }
+
+ arg->hwnd_res = hwnd;
+ return FALSE;
+}
+
+static HWND find_window(HWND parent, LPCWSTR class, LPCWSTR text)
+{
+ struct fw_arg arg = {class, text, NULL};
+ BOOL br;
+
+ br = EnumChildWindows(parent, find_window_callback, (LPARAM)&arg);
+ return arg.hwnd_res;
+}
+
+static void test_customize_onfolderchange(IFileDialog *pfd)
+{
+ IOleWindow *pow;
+ HWND dlg_hwnd, item, item_parent;
+ HRESULT hr;
+ BOOL br;
+ WCHAR buf[1024];
+
+ buf[0] = '\0';
+
+ hr = IFileDialog_QueryInterface(pfd, &IID_IOleWindow, (void**)&pow);
+ ok(hr == S_OK, "Got 0x%08x\n", hr);
+ hr = IOleWindow_GetWindow(pow, &dlg_hwnd);
+ ok(hr == S_OK, "Got 0x%08x\n", hr);
+ ok(dlg_hwnd != NULL, "Got NULL.\n");
+ IOleWindow_Release(pow);
+
+ item = find_window(dlg_hwnd, NULL, checkbutton2W);
+ ok(item != NULL, "Failed to find item.\n");
+ item_parent = GetParent(item);
+ GetClassNameW(item_parent, buf, 1024);
+ ok(!lstrcmpW(buf, floatnotifysinkW), "Got %s\n", wine_dbgstr_w(buf));
+ item = find_window(dlg_hwnd, NULL, text2W);
+ ok(item != NULL, "Failed to find item.\n");
+ item_parent = GetParent(item);
+ GetClassNameW(item_parent, buf, 1024);
+ ok(!lstrcmpW(buf, floatnotifysinkW), "Got %s\n", wine_dbgstr_w(buf));
+
+ item = find_window(dlg_hwnd, NULL, pushbutton1W);
+ ok(item == NULL, "Found item: %p\n", item);
+ item = find_window(dlg_hwnd, NULL, pushbutton2W);
+ ok(item == NULL, "Found item: %p\n", item);
+ item = find_window(dlg_hwnd, NULL, comboboxitem1W);
+ ok(item == NULL, "Found item: %p\n", item);
+ item = find_window(dlg_hwnd, NULL, comboboxitem2W);
+ ok(item == NULL, "Found item: %p\n", item);
+ item = find_window(dlg_hwnd, NULL, radiobutton2W);
+ ok(item == NULL, "Found item: %p\n", item);
+ item = find_window(dlg_hwnd, NULL, checkbutton1W);
+ ok(item == NULL, "Found item: %p\n", item);
+ item = find_window(dlg_hwnd, NULL, editbox1W);
+ ok(item == NULL, "Found item: %p\n", item);
+ item = find_window(dlg_hwnd, NULL, editbox2W);
+ ok(item == NULL, "Found item: %p\n", item);
+ item = find_window(dlg_hwnd, NULL, textW);
+ ok(item == NULL, "Found item: %p\n", item);
+ item = find_window(dlg_hwnd, NULL, separatorW);
+ ok(item == NULL, "Found item: %p\n", item);
+ item = find_window(dlg_hwnd, NULL, visualgroup1W);
+ ok(item == NULL, "Found item: %p\n", item);
+ item = find_window(dlg_hwnd, NULL, visualgroup2W);
+ ok(item == NULL, "Found item: %p\n", item);
+
+ br = PostMessageW(dlg_hwnd, WM_COMMAND, IDCANCEL, 0);
+ ok(br, "Failed\n");
+}
static void test_customize(void)
{
IFileDialog *pfod;
IFileDialogCustomize *pfdc;
+ IFileDialogEventsImpl *pfdeimpl;
+ IFileDialogEvents *pfde;
IOleWindow *pow;
+ CDCONTROLSTATEF cdstate;
+ DWORD cookie;
+ LPWSTR tmpstr;
UINT i;
LONG ref;
HWND dlg_hwnd;
@@ -1243,61 +1359,210 @@ static void test_customize(void)
ok(dlg_hwnd == NULL, "NULL\n");
IOleWindow_Release(pow);
+ cdstate = 0xdeadbeef;
+ hr = IFileDialogCustomize_GetControlState(pfdc, i, &cdstate);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ ok(cdstate == CDCS_ENABLEDVISIBLE, "got 0x%08x.\n", cdstate);
+
+ hr = IFileDialogCustomize_SetControlLabel(pfdc, i, label2);
+ ok(hr == S_OK, "got 0x%08x (control: %d).\n", hr, i);
+
hr = IFileDialogCustomize_EnableOpenDropDown(pfdc, i);
todo_wine ok(hr == E_UNEXPECTED, "got 0x%08x.\n", hr);
hr = IFileDialogCustomize_EnableOpenDropDown(pfdc, ++i);
todo_wine ok(hr == S_OK, "got 0x%08x.\n", hr);
+ cdstate = 0xdeadbeef;
+ hr = IFileDialogCustomize_GetControlState(pfdc, i, &cdstate);
+ ok(hr == E_NOTIMPL, "got 0x%08x.\n", hr);
+ ok(cdstate == 0xdeadbeef, "got 0x%08x.\n", cdstate);
+
+ hr = IFileDialogCustomize_SetControlLabel(pfdc, i, label2);
+ todo_wine ok(hr == E_NOTIMPL, "got 0x%08x (control: %d).\n", hr, i);
+
hr = IFileDialogCustomize_AddMenu(pfdc, i, menuW);
todo_wine ok(hr == E_UNEXPECTED, "got 0x%08x.\n", hr);
hr = IFileDialogCustomize_AddMenu(pfdc, ++i, label);
ok(hr == S_OK, "got 0x%08x.\n", hr);
+ cdstate = 0xdeadbeef;
+ hr = IFileDialogCustomize_GetControlState(pfdc, i, &cdstate);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ ok(cdstate == CDCS_ENABLEDVISIBLE, "got 0x%08x.\n", cdstate);
+
+ hr = IFileDialogCustomize_SetControlLabel(pfdc, i, label2);
+ ok(hr == S_OK, "got 0x%08x (control: %d).\n", hr, i);
+
hr = IFileDialogCustomize_AddPushButton(pfdc, i, pushbutton2W);
ok(hr == E_UNEXPECTED, "got 0x%08x.\n", hr);
hr = IFileDialogCustomize_AddPushButton(pfdc, ++i, pushbutton2W);
ok(hr == S_OK, "got 0x%08x.\n", hr);
+ cdstate = 0xdeadbeef;
+ hr = IFileDialogCustomize_GetControlState(pfdc, i, &cdstate);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ ok(cdstate == CDCS_ENABLEDVISIBLE, "got 0x%08x.\n", cdstate);
+ hr = IFileDialogCustomize_SetControlLabel(pfdc, i, label2);
+ ok(hr == S_OK, "got 0x%08x (control: %d).\n", hr, i);
+
hr = IFileDialogCustomize_AddComboBox(pfdc, i);
ok(hr == E_UNEXPECTED, "got 0x%08x.\n", hr);
hr = IFileDialogCustomize_AddComboBox(pfdc, ++i);
ok(hr == S_OK, "got 0x%08x.\n", hr);
+ cdstate = 0xdeadbeef;
+ hr = IFileDialogCustomize_GetControlState(pfdc, i, &cdstate);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ ok(cdstate == CDCS_ENABLEDVISIBLE, "got 0x%08x.\n", cdstate);
+
+ hr = IFileDialogCustomize_SetControlLabel(pfdc, i, label2);
+ ok(hr == S_OK, "got 0x%08x (control: %d).\n", hr, i);
+
hr = IFileDialogCustomize_AddRadioButtonList(pfdc, i);
todo_wine ok(hr == E_UNEXPECTED, "got 0x%08x.\n", hr);
hr = IFileDialogCustomize_AddRadioButtonList(pfdc, ++i);
todo_wine ok(hr == S_OK, "got 0x%08x.\n", hr);
+ cdstate = 0xdeadbeef;
+ hr = IFileDialogCustomize_GetControlState(pfdc, i, &cdstate);
+ todo_wine ok(hr == S_OK, "got 0x%08x.\n", hr);
+ todo_wine ok(cdstate == CDCS_ENABLEDVISIBLE, "got 0x%08x.\n", cdstate);
+
+ hr = IFileDialogCustomize_SetControlLabel(pfdc, i, radiobutton2W);
+ todo_wine ok(hr == S_OK, "got 0x%08x (control: %d).\n", hr, i);
+
hr = IFileDialogCustomize_AddCheckButton(pfdc, i, label, TRUE);
todo_wine ok(hr == E_UNEXPECTED, "got 0x%08x.\n", hr);
hr = IFileDialogCustomize_AddCheckButton(pfdc, ++i, checkbutton1W, TRUE);
ok(hr == S_OK, "got 0x%08x.\n", hr);
+ cdstate = 0xdeadbeef;
+ hr = IFileDialogCustomize_GetControlState(pfdc, i, &cdstate);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ ok(cdstate == CDCS_ENABLEDVISIBLE, "got 0x%08x.\n", cdstate);
+
+ hr = IFileDialogCustomize_SetControlLabel(pfdc, i, checkbutton2W);
+ ok(hr == S_OK, "got 0x%08x (control: %d).\n", hr, i);
+
+ if(SUCCEEDED(hr))
+ {
+ BOOL checked;
+ hr = IFileDialogCustomize_GetCheckButtonState(pfdc, i, &checked);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ ok(checked, "checkbox not checked.\n");
+
+ hr = IFileDialogCustomize_SetCheckButtonState(pfdc, i, FALSE);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+
+ hr = IFileDialogCustomize_GetCheckButtonState(pfdc, i, &checked);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ ok(!checked, "checkbox checked.\n");
+
+ hr = IFileDialogCustomize_SetCheckButtonState(pfdc, i, TRUE);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+
+ hr = IFileDialogCustomize_GetCheckButtonState(pfdc, i, &checked);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ ok(checked, "checkbox not checked.\n");
+ }
+
hr = IFileDialogCustomize_AddEditBox(pfdc, i, label);
ok(hr == E_UNEXPECTED, "got 0x%08x.\n", hr);
hr = IFileDialogCustomize_AddEditBox(pfdc, ++i, editbox1W);
ok(hr == S_OK, "got 0x%08x.\n", hr);
+ cdstate = 0xdeadbeef;
+ hr = IFileDialogCustomize_GetControlState(pfdc, i, &cdstate);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ ok(cdstate == CDCS_ENABLEDVISIBLE, "got 0x%08x.\n", cdstate);
+
+ /* Does not affect the text in the editbox */
+ hr = IFileDialogCustomize_SetControlLabel(pfdc, i, editbox2W);
+ ok(hr == S_OK, "got 0x%08x (control: %d).\n", hr, i);
+
+ hr = IFileDialogCustomize_GetEditBoxText(pfdc, i, &tmpstr);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ if(SUCCEEDED(hr))
+ {
+ ok(!lstrcmpW(tmpstr, editbox1W), "got %s.\n", wine_dbgstr_w(tmpstr));
+ CoTaskMemFree(tmpstr);
+ }
+
+ hr = IFileDialogCustomize_SetEditBoxText(pfdc, i, label2);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+
+ hr = IFileDialogCustomize_GetEditBoxText(pfdc, i, &tmpstr);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ if(SUCCEEDED(hr))
+ {
+ ok(!lstrcmpW(tmpstr, label2), "got %s.\n", wine_dbgstr_w(tmpstr));
+ CoTaskMemFree(tmpstr);
+ }
+
hr = IFileDialogCustomize_AddSeparator(pfdc, i);
ok(hr == E_UNEXPECTED, "got 0x%08x.\n", hr);
hr = IFileDialogCustomize_AddSeparator(pfdc, ++i);
ok(hr == S_OK, "got 0x%08x.\n", hr);
+ cdstate = 0xdeadbeef;
+ hr = IFileDialogCustomize_GetControlState(pfdc, i, &cdstate);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ ok(cdstate == CDCS_ENABLEDVISIBLE, "got 0x%08x.\n", cdstate);
+
+ hr = IFileDialogCustomize_SetControlLabel(pfdc, i, separatorW);
+ ok(hr == S_OK, "got 0x%08x (control: %d).\n", hr, i);
+
hr = IFileDialogCustomize_AddText(pfdc, i, label);
ok(hr == E_UNEXPECTED, "got 0x%08x.\n", hr);
hr = IFileDialogCustomize_AddText(pfdc, ++i, textW);
ok(hr == S_OK, "got 0x%08x.\n", hr);
+ cdstate = 0xdeadbeef;
+ hr = IFileDialogCustomize_GetControlState(pfdc, i, &cdstate);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ ok(cdstate == CDCS_ENABLEDVISIBLE, "got 0x%08x.\n", cdstate);
+
+ hr = IFileDialogCustomize_SetControlLabel(pfdc, i, text2W);
+ ok(hr == S_OK, "got 0x%08x (control: %d).\n", hr, i);
+
hr = IFileDialogCustomize_StartVisualGroup(pfdc, i, label);
todo_wine ok(hr == E_UNEXPECTED, "got 0x%08x.\n", hr);
hr = IFileDialogCustomize_StartVisualGroup(pfdc, ++i, visualgroup1W);
todo_wine ok(hr == S_OK, "got 0x%08x.\n", hr);
+ hr = IFileDialogCustomize_SetControlLabel(pfdc, i, visualgroup2W);
+ todo_wine ok(hr == S_OK, "got 0x%08x (control: %d).\n", hr, i);
+
+ cdstate = 0xdeadbeef;
+ hr = IFileDialogCustomize_GetControlState(pfdc, i, &cdstate);
+ todo_wine ok(hr == S_OK, "got 0x%08x.\n", hr);
+ todo_wine ok(cdstate == CDCS_ENABLEDVISIBLE, "got 0x%08x.\n", cdstate);
hr = IFileDialogCustomize_StartVisualGroup(pfdc, ++i, label);
todo_wine ok(hr == E_UNEXPECTED, "got 0x%08x.\n", hr);
hr = IFileDialogCustomize_EndVisualGroup(pfdc);
todo_wine ok(hr == S_OK, "got 0x%08x.\n", hr);
+ i++; /* Nonexisting control */
+ hr = IFileDialogCustomize_SetControlLabel(pfdc, i, label2);
+ ok(hr == E_INVALIDARG, "got 0x%08x (control: %d).\n", hr, i);
+ cdstate = 0xdeadbeef;
+ hr = IFileDialogCustomize_GetControlState(pfdc, i, &cdstate);
+ todo_wine ok(hr == E_INVALIDARG, "got 0x%08x.\n", hr);
+ ok(cdstate == 0xdeadbeef, "got 0x%08x.\n", cdstate);
+
+ pfde = IFileDialogEvents_Constructor();
+ pfdeimpl = impl_from_IFileDialogEvents(pfde);
+ pfdeimpl->cfd_test1 = TRUE;
+ hr = IFileDialog_Advise(pfod, pfde, &cookie);
+ ok(hr == S_OK, "Got 0x%08x\n", hr);
+
+ hr = IFileDialog_Show(pfod, NULL);
+ ok(hr == HRESULT_FROM_WIN32(ERROR_CANCELLED), "Got 0x%08x\n", hr);
+
+ hr = IFileDialog_Unadvise(pfod, cookie);
+ ok(hr == S_OK, "Got 0x%08x\n", hr);
+
+ IFileDialogEvents_Release(pfde);
IFileDialogCustomize_Release(pfdc);
ref = IFileOpenDialog_Release(pfod);
ok(!ref, "Refcount not zero (%d).\n", ref);
--
1.7.5.rc3
More information about the wine-patches
mailing list