user32: Add the tests for dialog window styles, make them pass under Wine.
This commit is contained in:
parent
8f565eb6ae
commit
18576b36e4
|
@ -557,11 +557,10 @@ static HWND DIALOG_CreateIndirect( HINSTANCE hInst, LPCVOID dlgTemplate,
|
||||||
rect.left = rect.top = 0;
|
rect.left = rect.top = 0;
|
||||||
rect.right = MulDiv(template.cx, xBaseUnit, 4);
|
rect.right = MulDiv(template.cx, xBaseUnit, 4);
|
||||||
rect.bottom = MulDiv(template.cy, yBaseUnit, 8);
|
rect.bottom = MulDiv(template.cy, yBaseUnit, 8);
|
||||||
if (template.style & WS_CHILD)
|
template.style |= DS_3DLOOK;
|
||||||
template.style &= ~(WS_CAPTION|WS_SYSMENU);
|
|
||||||
if (template.style & DS_MODALFRAME)
|
if (template.style & DS_MODALFRAME)
|
||||||
template.exStyle |= WS_EX_DLGMODALFRAME;
|
template.exStyle |= WS_EX_DLGMODALFRAME;
|
||||||
if (template.style & DS_CONTROL)
|
if ((template.style & DS_CONTROL) || !(template.style & WS_CHILD))
|
||||||
template.exStyle |= WS_EX_CONTROLPARENT;
|
template.exStyle |= WS_EX_CONTROLPARENT;
|
||||||
AdjustWindowRectEx( &rect, template.style, (hMenu != 0), template.exStyle );
|
AdjustWindowRectEx( &rect, template.style, (hMenu != 0), template.exStyle );
|
||||||
pos.x = rect.left;
|
pos.x = rect.left;
|
||||||
|
|
|
@ -3813,6 +3813,137 @@ static void test_window_styles(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static INT_PTR WINAPI empty_dlg_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void check_dialog_style(DWORD style_in, DWORD ex_style_in, DWORD style_out, DWORD ex_style_out)
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
DLGTEMPLATE dt;
|
||||||
|
WORD menu_name;
|
||||||
|
WORD class_id;
|
||||||
|
WORD class_atom;
|
||||||
|
WCHAR caption[1];
|
||||||
|
} dlg_data;
|
||||||
|
DWORD style, ex_style;
|
||||||
|
HWND hwnd, parent = 0;
|
||||||
|
|
||||||
|
if (style_in & WS_CHILD)
|
||||||
|
parent = CreateWindowEx(0, "static", NULL, WS_OVERLAPPEDWINDOW,
|
||||||
|
0, 0, 0, 0, NULL, NULL, NULL, NULL);
|
||||||
|
|
||||||
|
dlg_data.dt.style = style_in;
|
||||||
|
dlg_data.dt.dwExtendedStyle = ex_style_in;
|
||||||
|
dlg_data.dt.cdit = 0;
|
||||||
|
dlg_data.dt.x = 0;
|
||||||
|
dlg_data.dt.y = 0;
|
||||||
|
dlg_data.dt.cx = 100;
|
||||||
|
dlg_data.dt.cy = 100;
|
||||||
|
dlg_data.menu_name = 0;
|
||||||
|
dlg_data.class_id = 0;
|
||||||
|
dlg_data.class_atom = 0;
|
||||||
|
dlg_data.caption[0] = 0;
|
||||||
|
|
||||||
|
hwnd = CreateDialogIndirectParam(GetModuleHandle(0), &dlg_data.dt, parent, empty_dlg_proc, 0);
|
||||||
|
ok(hwnd != 0, "dialog creation failed, style %#x, exstyle %#x\n", style_in, ex_style_in);
|
||||||
|
|
||||||
|
flush_events( TRUE );
|
||||||
|
|
||||||
|
style = GetWindowLong(hwnd, GWL_STYLE);
|
||||||
|
ex_style = GetWindowLong(hwnd, GWL_EXSTYLE);
|
||||||
|
ok(style == (style_out | DS_3DLOOK), "expected style %#x, got %#x\n", style_out | DS_3DLOOK, style);
|
||||||
|
ok(ex_style == ex_style_out, "expected ex_style %#x, got %#x\n", ex_style_out, ex_style);
|
||||||
|
|
||||||
|
/* try setting the styles explicitly */
|
||||||
|
SetWindowLong(hwnd, GWL_EXSTYLE, ex_style_in);
|
||||||
|
style = GetWindowLong(hwnd, GWL_STYLE);
|
||||||
|
ex_style = GetWindowLong(hwnd, GWL_EXSTYLE);
|
||||||
|
ok(style == (style_out | DS_3DLOOK), "expected style %#x, got %#x\n", style_out|DS_3DLOOK, style);
|
||||||
|
/* WS_EX_WINDOWEDGE can't always be changed */
|
||||||
|
if (ex_style_in & WS_EX_DLGMODALFRAME)
|
||||||
|
ex_style_out = ex_style_in | WS_EX_WINDOWEDGE;
|
||||||
|
else if ((style & (WS_DLGFRAME | WS_THICKFRAME)) && !(ex_style_in & WS_EX_STATICEDGE))
|
||||||
|
ex_style_out = ex_style_in | WS_EX_WINDOWEDGE;
|
||||||
|
else
|
||||||
|
ex_style_out = ex_style_in & ~WS_EX_WINDOWEDGE;
|
||||||
|
ok(ex_style == ex_style_out, "expected ex_style %#x, got %#x\n", ex_style_out, ex_style);
|
||||||
|
|
||||||
|
SetWindowLong(hwnd, GWL_STYLE, style_in);
|
||||||
|
style = GetWindowLong(hwnd, GWL_STYLE);
|
||||||
|
ex_style = GetWindowLong(hwnd, GWL_EXSTYLE);
|
||||||
|
/* WS_CLIPSIBLINGS can't be reset on top-level windows */
|
||||||
|
if ((style_in & (WS_CHILD | WS_POPUP)) == WS_CHILD) style_out = style_in;
|
||||||
|
else style_out = style_in | WS_CLIPSIBLINGS;
|
||||||
|
ok(style == style_out, "expected style %#x, got %#x\n", style_out, style);
|
||||||
|
/* WS_EX_WINDOWEDGE can't always be changed */
|
||||||
|
if (ex_style_in & WS_EX_DLGMODALFRAME)
|
||||||
|
ex_style_out = ex_style_in | WS_EX_WINDOWEDGE;
|
||||||
|
else if ((style & (WS_DLGFRAME | WS_THICKFRAME)) && !(ex_style_in & WS_EX_STATICEDGE))
|
||||||
|
ex_style_out = ex_style_in | WS_EX_WINDOWEDGE;
|
||||||
|
else
|
||||||
|
ex_style_out = ex_style_in & ~WS_EX_WINDOWEDGE;
|
||||||
|
/* FIXME: Remove the condition below once Wine is fixed */
|
||||||
|
if (ex_style != ex_style_out)
|
||||||
|
todo_wine ok(ex_style == ex_style_out, "expected ex_style %#x, got %#x\n", ex_style_out, ex_style);
|
||||||
|
else
|
||||||
|
ok(ex_style == ex_style_out, "expected ex_style %#x, got %#x\n", ex_style_out, ex_style);
|
||||||
|
|
||||||
|
DestroyWindow(hwnd);
|
||||||
|
DestroyWindow(parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_dialog_styles(void)
|
||||||
|
{
|
||||||
|
check_dialog_style(0, 0, WS_CLIPSIBLINGS|WS_CAPTION, WS_EX_WINDOWEDGE|WS_EX_CONTROLPARENT);
|
||||||
|
check_dialog_style(WS_DLGFRAME, 0, WS_CLIPSIBLINGS|WS_CAPTION, WS_EX_WINDOWEDGE|WS_EX_CONTROLPARENT);
|
||||||
|
check_dialog_style(WS_THICKFRAME, 0, WS_THICKFRAME|WS_CLIPSIBLINGS|WS_CAPTION, WS_EX_WINDOWEDGE|WS_EX_CONTROLPARENT);
|
||||||
|
check_dialog_style(WS_DLGFRAME, WS_EX_STATICEDGE, WS_CLIPSIBLINGS|WS_CAPTION, WS_EX_WINDOWEDGE|WS_EX_STATICEDGE|WS_EX_CONTROLPARENT);
|
||||||
|
check_dialog_style(WS_THICKFRAME, WS_EX_STATICEDGE, WS_THICKFRAME|WS_CLIPSIBLINGS|WS_CAPTION, WS_EX_WINDOWEDGE|WS_EX_STATICEDGE|WS_EX_CONTROLPARENT);
|
||||||
|
check_dialog_style(DS_CONTROL, 0, WS_CLIPSIBLINGS|WS_CAPTION|DS_CONTROL, WS_EX_WINDOWEDGE|WS_EX_CONTROLPARENT);
|
||||||
|
check_dialog_style(WS_OVERLAPPEDWINDOW, 0, WS_CLIPSIBLINGS|WS_OVERLAPPEDWINDOW, WS_EX_WINDOWEDGE|WS_EX_CONTROLPARENT);
|
||||||
|
check_dialog_style(WS_CHILD, 0, WS_CHILD, 0);
|
||||||
|
check_dialog_style(WS_CHILD|WS_DLGFRAME, 0, WS_CHILD|WS_DLGFRAME, WS_EX_WINDOWEDGE);
|
||||||
|
check_dialog_style(WS_CHILD|WS_THICKFRAME, 0, WS_CHILD|WS_THICKFRAME, WS_EX_WINDOWEDGE);
|
||||||
|
check_dialog_style(WS_CHILD|WS_DLGFRAME, WS_EX_STATICEDGE, WS_CHILD|WS_DLGFRAME, WS_EX_STATICEDGE);
|
||||||
|
check_dialog_style(WS_CHILD|WS_THICKFRAME, WS_EX_STATICEDGE, WS_CHILD|WS_THICKFRAME, WS_EX_STATICEDGE);
|
||||||
|
check_dialog_style(WS_CHILD|DS_CONTROL, 0, WS_CHILD|DS_CONTROL, WS_EX_CONTROLPARENT);
|
||||||
|
check_dialog_style(WS_CHILD|WS_CAPTION, 0, WS_CHILD|WS_CAPTION, WS_EX_WINDOWEDGE);
|
||||||
|
check_dialog_style(WS_CHILD|WS_CAPTION|WS_SYSMENU, 0, WS_CHILD|WS_CAPTION|WS_SYSMENU, WS_EX_WINDOWEDGE);
|
||||||
|
check_dialog_style(WS_CHILD, WS_EX_WINDOWEDGE, WS_CHILD, 0);
|
||||||
|
check_dialog_style(WS_CHILD, WS_EX_DLGMODALFRAME, WS_CHILD, WS_EX_WINDOWEDGE|WS_EX_DLGMODALFRAME);
|
||||||
|
check_dialog_style(WS_CHILD, WS_EX_DLGMODALFRAME|WS_EX_STATICEDGE, WS_CHILD, WS_EX_STATICEDGE|WS_EX_WINDOWEDGE|WS_EX_DLGMODALFRAME);
|
||||||
|
check_dialog_style(WS_CHILD|WS_POPUP, 0, WS_CHILD|WS_POPUP|WS_CLIPSIBLINGS, 0);
|
||||||
|
check_dialog_style(WS_CHILD|WS_POPUP|WS_DLGFRAME, 0, WS_CHILD|WS_POPUP|WS_DLGFRAME|WS_CLIPSIBLINGS, WS_EX_WINDOWEDGE);
|
||||||
|
check_dialog_style(WS_CHILD|WS_POPUP|WS_THICKFRAME, 0, WS_CHILD|WS_POPUP|WS_THICKFRAME|WS_CLIPSIBLINGS, WS_EX_WINDOWEDGE);
|
||||||
|
check_dialog_style(WS_CHILD|WS_POPUP|WS_DLGFRAME, WS_EX_STATICEDGE, WS_CHILD|WS_POPUP|WS_DLGFRAME|WS_CLIPSIBLINGS, WS_EX_STATICEDGE);
|
||||||
|
check_dialog_style(WS_CHILD|WS_POPUP|WS_THICKFRAME, WS_EX_STATICEDGE, WS_CHILD|WS_POPUP|WS_THICKFRAME|WS_CLIPSIBLINGS, WS_EX_STATICEDGE);
|
||||||
|
check_dialog_style(WS_CHILD|WS_POPUP|DS_CONTROL, 0, WS_CHILD|WS_POPUP|WS_CLIPSIBLINGS|DS_CONTROL, WS_EX_CONTROLPARENT);
|
||||||
|
check_dialog_style(WS_CHILD|WS_POPUP, WS_EX_APPWINDOW, WS_CHILD|WS_POPUP|WS_CLIPSIBLINGS, WS_EX_APPWINDOW);
|
||||||
|
check_dialog_style(WS_CHILD|WS_POPUP, WS_EX_WINDOWEDGE, WS_CHILD|WS_POPUP|WS_CLIPSIBLINGS, 0);
|
||||||
|
check_dialog_style(WS_CHILD, WS_EX_WINDOWEDGE, WS_CHILD, 0);
|
||||||
|
check_dialog_style(0, WS_EX_TOOLWINDOW, WS_CLIPSIBLINGS|WS_CAPTION, WS_EX_WINDOWEDGE|WS_EX_TOOLWINDOW|WS_EX_CONTROLPARENT);
|
||||||
|
check_dialog_style(WS_POPUP, 0, WS_POPUP|WS_CLIPSIBLINGS, WS_EX_CONTROLPARENT);
|
||||||
|
check_dialog_style(WS_POPUP, WS_EX_WINDOWEDGE, WS_POPUP|WS_CLIPSIBLINGS, WS_EX_CONTROLPARENT);
|
||||||
|
check_dialog_style(WS_POPUP|WS_DLGFRAME, 0, WS_POPUP|WS_DLGFRAME|WS_CLIPSIBLINGS, WS_EX_WINDOWEDGE|WS_EX_CONTROLPARENT);
|
||||||
|
check_dialog_style(WS_POPUP|WS_THICKFRAME, 0, WS_POPUP|WS_THICKFRAME|WS_CLIPSIBLINGS, WS_EX_WINDOWEDGE|WS_EX_CONTROLPARENT);
|
||||||
|
check_dialog_style(WS_POPUP|WS_DLGFRAME, WS_EX_STATICEDGE, WS_POPUP|WS_DLGFRAME|WS_CLIPSIBLINGS, WS_EX_STATICEDGE|WS_EX_CONTROLPARENT);
|
||||||
|
check_dialog_style(WS_POPUP|WS_THICKFRAME, WS_EX_STATICEDGE, WS_POPUP|WS_THICKFRAME|WS_CLIPSIBLINGS, WS_EX_STATICEDGE|WS_EX_CONTROLPARENT);
|
||||||
|
check_dialog_style(WS_POPUP|DS_CONTROL, 0, WS_POPUP|WS_CLIPSIBLINGS|DS_CONTROL, WS_EX_CONTROLPARENT);
|
||||||
|
check_dialog_style(WS_CAPTION, WS_EX_STATICEDGE, WS_CLIPSIBLINGS|WS_CAPTION, WS_EX_STATICEDGE|WS_EX_WINDOWEDGE|WS_EX_CONTROLPARENT);
|
||||||
|
check_dialog_style(0, WS_EX_APPWINDOW, WS_CLIPSIBLINGS|WS_CAPTION, WS_EX_APPWINDOW|WS_EX_WINDOWEDGE|WS_EX_CONTROLPARENT);
|
||||||
|
|
||||||
|
if (pGetLayeredWindowAttributes)
|
||||||
|
{
|
||||||
|
check_dialog_style(0, WS_EX_LAYERED, WS_CLIPSIBLINGS|WS_CAPTION, WS_EX_LAYERED|WS_EX_WINDOWEDGE|WS_EX_CONTROLPARENT);
|
||||||
|
check_dialog_style(0, WS_EX_LAYERED|WS_EX_TRANSPARENT, WS_CLIPSIBLINGS|WS_CAPTION, WS_EX_LAYERED|WS_EX_TRANSPARENT|WS_EX_WINDOWEDGE|WS_EX_CONTROLPARENT);
|
||||||
|
check_dialog_style(0, WS_EX_LAYERED|WS_EX_TRANSPARENT|WS_EX_TOOLWINDOW, WS_CLIPSIBLINGS|WS_CAPTION,
|
||||||
|
WS_EX_LAYERED|WS_EX_TRANSPARENT|WS_EX_TOOLWINDOW|WS_EX_WINDOWEDGE|WS_EX_CONTROLPARENT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void test_scrollwindow( HWND hwnd)
|
static void test_scrollwindow( HWND hwnd)
|
||||||
{
|
{
|
||||||
HDC hdc;
|
HDC hdc;
|
||||||
|
@ -6745,6 +6876,7 @@ START_TEST(win)
|
||||||
|
|
||||||
test_AdjustWindowRect();
|
test_AdjustWindowRect();
|
||||||
test_window_styles();
|
test_window_styles();
|
||||||
|
test_dialog_styles();
|
||||||
test_redrawnow();
|
test_redrawnow();
|
||||||
test_csparentdc();
|
test_csparentdc();
|
||||||
test_SetWindowLong();
|
test_SetWindowLong();
|
||||||
|
|
Loading…
Reference in New Issue