[User32_wineTest] - Sync to Wine 1.3.37.

svn path=/trunk/; revision=55209
This commit is contained in:
James Tabor 2012-01-26 15:55:16 +00:00
parent 75cfcb0115
commit 81ec63a850
16 changed files with 788 additions and 179 deletions

View file

@ -20,7 +20,6 @@
//#define _WIN32_WINNT 0x0501 //#define _WIN32_WINNT 0x0501
#include <assert.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdio.h> #include <stdio.h>

View file

@ -21,7 +21,6 @@
/* To get CS_DROPSHADOW with the MSVC headers */ /* To get CS_DROPSHADOW with the MSVC headers */
//#define _WIN32_WINNT 0x0501 //#define _WIN32_WINNT 0x0501
#include <assert.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdio.h> #include <stdio.h>

View file

@ -17,7 +17,6 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/ */
#include <assert.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdio.h> #include <stdio.h>

View file

@ -20,7 +20,6 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/ */
#include <assert.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdio.h> #include <stdio.h>
@ -185,7 +184,7 @@ typedef struct {
0, /* biYPelsPerMeter */ \ 0, /* biYPelsPerMeter */ \
0, /* biClrUsed */ \ 0, /* biClrUsed */ \
0 /* biClrImportant */ \ 0 /* biClrImportant */ \
}, \ } \
/* DIB data: left uninitialized */ \ /* DIB data: left uninitialized */ \
} \ } \
} }
@ -697,7 +696,7 @@ static void test_initial_cursor(void)
ok(error == 0xdeadbeef, "Last error: 0x%08x\n", error); ok(error == 0xdeadbeef, "Last error: 0x%08x\n", error);
} }
static void test_icon_info_dbg(HICON hIcon, UINT exp_cx, UINT exp_cy, UINT exp_bpp, int line) static void test_icon_info_dbg(HICON hIcon, UINT exp_cx, UINT exp_cy, UINT exp_mask_cy, UINT exp_bpp, int line)
{ {
ICONINFO info; ICONINFO info;
DWORD ret; DWORD ret;
@ -737,13 +736,13 @@ static void test_icon_info_dbg(HICON hIcon, UINT exp_cx, UINT exp_cy, UINT exp_b
ok_(__FILE__, line)(bmMask.bmBitsPixel == 1, "bmMask.bmBitsPixel = %d\n", bmMask.bmBitsPixel); ok_(__FILE__, line)(bmMask.bmBitsPixel == 1, "bmMask.bmBitsPixel = %d\n", bmMask.bmBitsPixel);
ok_(__FILE__, line)(bmMask.bmWidth == exp_cx, "bmMask.bmWidth = %d\n", bmMask.bmWidth); ok_(__FILE__, line)(bmMask.bmWidth == exp_cx, "bmMask.bmWidth = %d\n", bmMask.bmWidth);
ok_(__FILE__, line)(bmMask.bmHeight == exp_cy, "bmMask.bmHeight = %d\n", bmMask.bmHeight); ok_(__FILE__, line)(bmMask.bmHeight == exp_mask_cy, "bmMask.bmHeight = %d\n", bmMask.bmHeight);
} }
else else
{ {
ok_(__FILE__, line)(bmMask.bmBitsPixel == 1, "bmMask.bmBitsPixel = %d\n", bmMask.bmBitsPixel); ok_(__FILE__, line)(bmMask.bmBitsPixel == 1, "bmMask.bmBitsPixel = %d\n", bmMask.bmBitsPixel);
ok_(__FILE__, line)(bmMask.bmWidth == exp_cx, "bmMask.bmWidth = %d\n", bmMask.bmWidth); ok_(__FILE__, line)(bmMask.bmWidth == exp_cx, "bmMask.bmWidth = %d\n", bmMask.bmWidth);
ok_(__FILE__, line)(bmMask.bmHeight == exp_cy * 2, "bmMask.bmHeight = %d\n", bmMask.bmHeight); ok_(__FILE__, line)(bmMask.bmHeight == exp_mask_cy, "bmMask.bmHeight = %d\n", bmMask.bmHeight);
} }
if (pGetIconInfoExA) if (pGetIconInfoExA)
{ {
@ -778,7 +777,7 @@ static void test_icon_info_dbg(HICON hIcon, UINT exp_cx, UINT exp_cy, UINT exp_b
} }
} }
#define test_icon_info(a,b,c,d) test_icon_info_dbg((a),(b),(c),(d),__LINE__) #define test_icon_info(a,b,c,d,e) test_icon_info_dbg((a),(b),(c),(d),(e),__LINE__)
static void test_CreateIcon(void) static void test_CreateIcon(void)
{ {
@ -790,6 +789,7 @@ static void test_CreateIcon(void)
HDC hdc; HDC hdc;
void *bits; void *bits;
UINT display_bpp; UINT display_bpp;
int i;
hdc = GetDC(0); hdc = GetDC(0);
display_bpp = GetDeviceCaps(hdc, BITSPIXEL); display_bpp = GetDeviceCaps(hdc, BITSPIXEL);
@ -801,12 +801,12 @@ static void test_CreateIcon(void)
hIcon = CreateIcon(0, 16, 16, 1, 1, bmp_bits, bmp_bits); hIcon = CreateIcon(0, 16, 16, 1, 1, bmp_bits, bmp_bits);
ok(hIcon != 0, "CreateIcon failed\n"); ok(hIcon != 0, "CreateIcon failed\n");
test_icon_info(hIcon, 16, 16, 1); test_icon_info(hIcon, 16, 16, 32, 1);
DestroyIcon(hIcon); DestroyIcon(hIcon);
hIcon = CreateIcon(0, 16, 16, 1, display_bpp, bmp_bits, bmp_bits); hIcon = CreateIcon(0, 16, 16, 1, display_bpp, bmp_bits, bmp_bits);
ok(hIcon != 0, "CreateIcon failed\n"); ok(hIcon != 0, "CreateIcon failed\n");
test_icon_info(hIcon, 16, 16, display_bpp); test_icon_info(hIcon, 16, 16, 16, display_bpp);
DestroyIcon(hIcon); DestroyIcon(hIcon);
hbmMask = CreateBitmap(16, 16, 1, 1, bmp_bits); hbmMask = CreateBitmap(16, 16, 1, 1, bmp_bits);
@ -841,7 +841,7 @@ static void test_CreateIcon(void)
info.hbmColor = hbmColor; info.hbmColor = hbmColor;
hIcon = CreateIconIndirect(&info); hIcon = CreateIconIndirect(&info);
ok(hIcon != 0, "CreateIconIndirect failed\n"); ok(hIcon != 0, "CreateIconIndirect failed\n");
test_icon_info(hIcon, 16, 16, display_bpp); test_icon_info(hIcon, 16, 16, 16, display_bpp);
DestroyIcon(hIcon); DestroyIcon(hIcon);
DeleteObject(hbmMask); DeleteObject(hbmMask);
@ -858,11 +858,27 @@ static void test_CreateIcon(void)
SetLastError(0xdeadbeaf); SetLastError(0xdeadbeaf);
hIcon = CreateIconIndirect(&info); hIcon = CreateIconIndirect(&info);
ok(hIcon != 0, "CreateIconIndirect failed\n"); ok(hIcon != 0, "CreateIconIndirect failed\n");
test_icon_info(hIcon, 16, 16, 1); test_icon_info(hIcon, 16, 16, 32, 1);
DestroyIcon(hIcon); DestroyIcon(hIcon);
DeleteObject(hbmMask); DeleteObject(hbmMask);
DeleteObject(hbmColor);
for (i = 0; i <= 4; i++)
{
hbmMask = CreateBitmap(1, i, 1, 1, bmp_bits);
ok(hbmMask != 0, "CreateBitmap failed\n");
info.fIcon = TRUE;
info.xHotspot = 0;
info.yHotspot = 0;
info.hbmMask = hbmMask;
info.hbmColor = 0;
SetLastError(0xdeadbeaf);
hIcon = CreateIconIndirect(&info);
ok(hIcon != 0, "CreateIconIndirect failed\n");
test_icon_info(hIcon, 1, i / 2, max(i,1), 1);
DestroyIcon(hIcon);
DeleteObject(hbmMask);
}
/* test creating an icon from a DIB section */ /* test creating an icon from a DIB section */
@ -891,7 +907,7 @@ static void test_CreateIcon(void)
SetLastError(0xdeadbeaf); SetLastError(0xdeadbeaf);
hIcon = CreateIconIndirect(&info); hIcon = CreateIconIndirect(&info);
ok(hIcon != 0, "CreateIconIndirect failed\n"); ok(hIcon != 0, "CreateIconIndirect failed\n");
test_icon_info(hIcon, 32, 32, 8); test_icon_info(hIcon, 32, 32, 32, 8);
DestroyIcon(hIcon); DestroyIcon(hIcon);
DeleteObject(hbmColor); DeleteObject(hbmColor);
@ -909,7 +925,7 @@ static void test_CreateIcon(void)
SetLastError(0xdeadbeaf); SetLastError(0xdeadbeaf);
hIcon = CreateIconIndirect(&info); hIcon = CreateIconIndirect(&info);
ok(hIcon != 0, "CreateIconIndirect failed\n"); ok(hIcon != 0, "CreateIconIndirect failed\n");
test_icon_info(hIcon, 32, 32, 8); test_icon_info(hIcon, 32, 32, 32, 8);
DestroyIcon(hIcon); DestroyIcon(hIcon);
DeleteObject(hbmColor); DeleteObject(hbmColor);
@ -927,7 +943,7 @@ static void test_CreateIcon(void)
SetLastError(0xdeadbeaf); SetLastError(0xdeadbeaf);
hIcon = CreateIconIndirect(&info); hIcon = CreateIconIndirect(&info);
ok(hIcon != 0, "CreateIconIndirect failed\n"); ok(hIcon != 0, "CreateIconIndirect failed\n");
test_icon_info(hIcon, 32, 32, 8); test_icon_info(hIcon, 32, 32, 32, 8);
DestroyIcon(hIcon); DestroyIcon(hIcon);
DeleteObject(hbmMask); DeleteObject(hbmMask);

View file

@ -18,7 +18,6 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/ */
#include <assert.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdio.h> #include <stdio.h>

View file

@ -33,6 +33,9 @@
#include <stdio.h> #include <stdio.h>
#include <stdarg.h> #include <stdarg.h>
#undef WINVER
#define WINVER 0x0600 /* For NONCLIENTMETRICS with padding */
#include "wine/test.h" #include "wine/test.h"
#include "windef.h" #include "windef.h"
#include "winbase.h" #include "winbase.h"
@ -830,8 +833,7 @@ static void test_initial_focus(void)
{ {
/* Test 1: /* Test 1:
* This test intentionally returns FALSE in response to WM_INITDIALOG * This test intentionally returns FALSE in response to WM_INITDIALOG
* without setting focus to a control. This is not allowed according to * without setting focus to a control. This is what MFC's CFormView does.
* MSDN, but it is exactly what MFC's CFormView does.
* *
* Since the WM_INITDIALOG handler returns FALSE without setting the focus, * Since the WM_INITDIALOG handler returns FALSE without setting the focus,
* the focus should initially be NULL. Later, when we manually set focus to * the focus should initially be NULL. Later, when we manually set focus to
@ -913,6 +915,31 @@ static void test_initial_focus(void)
DestroyWindow(hDlg); DestroyWindow(hDlg);
} }
/* Test 4:
* If the dialog has no tab-accessible controls, set focus to first control */
{
HWND hDlg;
HRSRC hResource;
HANDLE hTemplate;
DLGTEMPLATE* pTemplate;
HWND hLabel;
hResource = FindResourceA(g_hinst,"FOCUS_TEST_DIALOG_2", RT_DIALOG);
hTemplate = LoadResource(g_hinst, hResource);
pTemplate = LockResource(hTemplate);
hDlg = CreateDialogIndirectParamA(g_hinst, pTemplate, NULL, focusDlgWinProc, 0);
g_hwndInitialFocusT1 = GetFocus();
hLabel = GetDlgItem(hDlg, 200);
ok (hDlg != 0, "Failed to create test dialog.\n");
ok ((g_hwndInitialFocusT1 == hLabel),
"Focus should have been set to the first control, expected (%p) got (%p).\n",
hLabel, g_hwndInitialFocusT1);
DestroyWindow(hDlg);
}
} }
static void test_GetDlgItemText(void) static void test_GetDlgItemText(void)
@ -1058,11 +1085,50 @@ static INT_PTR CALLBACK TestReturnKeyDlgProc (HWND hDlg, UINT uiMsg,
return FALSE; return FALSE;
} }
static INT_PTR CALLBACK TestControlStyleDlgProc(HWND hdlg, UINT msg,
WPARAM wparam, LPARAM lparam)
{
HWND control;
DWORD style, exstyle;
char buf[256];
switch (msg)
{
case WM_INITDIALOG:
control = GetDlgItem(hdlg, 7);
ok(control != 0, "dialog control with id 7 not found\n");
style = GetWindowLong(control, GWL_STYLE);
ok(style == (WS_CHILD|WS_VISIBLE), "expected WS_CHILD|WS_VISIBLE, got %#x\n", style);
exstyle = GetWindowLong(control, GWL_EXSTYLE);
ok(exstyle == (WS_EX_NOPARENTNOTIFY|WS_EX_TRANSPARENT|WS_EX_CLIENTEDGE), "expected WS_EX_NOPARENTNOTIFY|WS_EX_TRANSPARENT|WS_EX_CLIENTEDGE, got %#x\n", exstyle);
buf[0] = 0;
GetWindowText(control, buf, sizeof(buf));
ok(lstrcmp(buf, "bump7") == 0, "expected bump7, got %s\n", buf);
control = GetDlgItem(hdlg, 8);
ok(control != 0, "dialog control with id 8 not found\n");
style = GetWindowLong(control, GWL_STYLE);
ok(style == (WS_CHILD|WS_VISIBLE), "expected WS_CHILD|WS_VISIBLE, got %#x\n", style);
exstyle = GetWindowLong(control, GWL_EXSTYLE);
ok(exstyle == (WS_EX_NOPARENTNOTIFY|WS_EX_TRANSPARENT), "expected WS_EX_NOPARENTNOTIFY|WS_EX_TRANSPARENT, got %#x\n", exstyle);
buf[0] = 0;
GetWindowText(control, buf, sizeof(buf));
ok(lstrcmp(buf, "bump8") == 0, "expected bump8, got %s\n", buf);
EndDialog(hdlg, -7);
return TRUE;
}
return FALSE;
}
static void test_DialogBoxParamA(void) static void test_DialogBoxParamA(void)
{ {
INT_PTR ret; INT_PTR ret;
HWND hwnd_invalid = (HWND)0x4444; HWND hwnd_invalid = (HWND)0x4444;
ret = DialogBoxParamA(GetModuleHandle(0), "TEST_DLG_CHILD_POPUP", 0, TestControlStyleDlgProc, 0);
ok(ret == -7, "expected -7, got %ld\n", ret);
SetLastError(0xdeadbeef); SetLastError(0xdeadbeef);
ret = DialogBoxParamA(GetModuleHandle(NULL), "IDD_DIALOG" , hwnd_invalid, 0 , 0); ret = DialogBoxParamA(GetModuleHandle(NULL), "IDD_DIALOG" , hwnd_invalid, 0 , 0);
ok(0 == ret || broken(ret == -1), "DialogBoxParamA returned %ld, expected 0\n", ret); ok(0 == ret || broken(ret == -1), "DialogBoxParamA returned %ld, expected 0\n", ret);
@ -1109,7 +1175,7 @@ static void test_DialogBoxParamA(void)
static void test_DisabledDialogTest(void) static void test_DisabledDialogTest(void)
{ {
g_terminated = FALSE; g_terminated = FALSE;
DialogBoxParam(g_hinst, "IDD_DIALOG", NULL, (DLGPROC)disabled_test_proc, 0); DialogBoxParam(g_hinst, "IDD_DIALOG", NULL, disabled_test_proc, 0);
ok(FALSE == g_terminated, "dialog with disabled ok button has been terminated\n"); ok(FALSE == g_terminated, "dialog with disabled ok button has been terminated\n");
} }
@ -1198,7 +1264,7 @@ static void test_MessageBoxFontTest(void)
} }
GetObjectW(hFont, sizeof(LOGFONTW), &lfStaticFont); GetObjectW(hFont, sizeof(LOGFONTW), &lfStaticFont);
ncMetrics.cbSize = sizeof(NONCLIENTMETRICSW); ncMetrics.cbSize = FIELD_OFFSET(NONCLIENTMETRICSW, iPaddedBorderWidth);
SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, 0, &ncMetrics, 0); SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, 0, &ncMetrics, 0);
ok( !memcmp(&lfStaticFont, &ncMetrics.lfMessageFont, FIELD_OFFSET(LOGFONTW, lfFaceName)) && ok( !memcmp(&lfStaticFont, &ncMetrics.lfMessageFont, FIELD_OFFSET(LOGFONTW, lfFaceName)) &&
!lstrcmpW(lfStaticFont.lfFaceName, ncMetrics.lfMessageFont.lfFaceName), !lstrcmpW(lfStaticFont.lfFaceName, ncMetrics.lfMessageFont.lfFaceName),

View file

@ -1736,7 +1736,7 @@ static void test_espassword(void)
hwEdit = create_editcontrol(ES_PASSWORD, 0); hwEdit = create_editcontrol(ES_PASSWORD, 0);
r = get_edit_style(hwEdit); r = get_edit_style(hwEdit);
ok(r == ES_PASSWORD, "Wrong style expected 0x%x got: 0x%x\n", ES_PASSWORD, r); ok(r == ES_PASSWORD, "Wrong style expected ES_PASSWORD got: 0x%x\n", r);
/* set text */ /* set text */
r = SendMessage(hwEdit , WM_SETTEXT, 0, (LPARAM) password); r = SendMessage(hwEdit , WM_SETTEXT, 0, (LPARAM) password);
ok(r == TRUE, "Expected: %d, got: %d\n", TRUE, r); ok(r == TRUE, "Expected: %d, got: %d\n", TRUE, r);
@ -1840,7 +1840,7 @@ static void test_enter(void)
/* multiline */ /* multiline */
hwEdit = create_editcontrol(ES_MULTILINE, 0); hwEdit = create_editcontrol(ES_MULTILINE, 0);
r = get_edit_style(hwEdit); r = get_edit_style(hwEdit);
ok(ES_MULTILINE == r, "Wrong style expected 0x%x got: 0x%x\n", ES_MULTILINE, r); ok(ES_MULTILINE == r, "Wrong style expected ES_MULTILINE got: 0x%x\n", r);
/* set text */ /* set text */
r = SendMessage(hwEdit , WM_SETTEXT, 0, (LPARAM) ""); r = SendMessage(hwEdit , WM_SETTEXT, 0, (LPARAM) "");
@ -1880,7 +1880,7 @@ static void test_enter(void)
/* single line with ES_WANTRETURN */ /* single line with ES_WANTRETURN */
hwEdit = create_editcontrol(ES_WANTRETURN, 0); hwEdit = create_editcontrol(ES_WANTRETURN, 0);
r = get_edit_style(hwEdit); r = get_edit_style(hwEdit);
ok(ES_WANTRETURN == r, "Wrong style expected 0x%x got: 0x%x\n", ES_WANTRETURN, r); ok(ES_WANTRETURN == r, "Wrong style expected ES_WANTRETURN got: 0x%x\n", r);
/* set text */ /* set text */
r = SendMessage(hwEdit , WM_SETTEXT, 0, (LPARAM) ""); r = SendMessage(hwEdit , WM_SETTEXT, 0, (LPARAM) "");
@ -1907,7 +1907,7 @@ static void test_tab(void)
/* multiline */ /* multiline */
hwEdit = create_editcontrol(ES_MULTILINE, 0); hwEdit = create_editcontrol(ES_MULTILINE, 0);
r = get_edit_style(hwEdit); r = get_edit_style(hwEdit);
ok(ES_MULTILINE == r, "Wrong style expected 0x%x got: 0x%x\n", ES_MULTILINE, r); ok(ES_MULTILINE == r, "Wrong style expected ES_MULTILINE got: 0x%x\n", r);
/* set text */ /* set text */
r = SendMessage(hwEdit , WM_SETTEXT, 0, (LPARAM) ""); r = SendMessage(hwEdit , WM_SETTEXT, 0, (LPARAM) "");
@ -1950,57 +1950,57 @@ static void test_edit_dialog(void)
int r; int r;
/* from bug 11841 */ /* from bug 11841 */
r = DialogBoxParam(hinst, "EDIT_READONLY_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 0); r = DialogBoxParam(hinst, "EDIT_READONLY_DIALOG", NULL, edit_dialog_proc, 0);
ok(333 == r, "Expected %d, got %d\n", 333, r); ok(333 == r, "Expected %d, got %d\n", 333, r);
r = DialogBoxParam(hinst, "EDIT_READONLY_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 1); r = DialogBoxParam(hinst, "EDIT_READONLY_DIALOG", NULL, edit_dialog_proc, 1);
ok(111 == r, "Expected %d, got %d\n", 111, r); ok(111 == r, "Expected %d, got %d\n", 111, r);
r = DialogBoxParam(hinst, "EDIT_READONLY_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 2); r = DialogBoxParam(hinst, "EDIT_READONLY_DIALOG", NULL, edit_dialog_proc, 2);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
/* more tests for WM_CHAR */ /* more tests for WM_CHAR */
r = DialogBoxParam(hinst, "EDIT_READONLY_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 3); r = DialogBoxParam(hinst, "EDIT_READONLY_DIALOG", NULL, edit_dialog_proc, 3);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
r = DialogBoxParam(hinst, "EDIT_READONLY_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 4); r = DialogBoxParam(hinst, "EDIT_READONLY_DIALOG", NULL, edit_dialog_proc, 4);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
r = DialogBoxParam(hinst, "EDIT_READONLY_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 5); r = DialogBoxParam(hinst, "EDIT_READONLY_DIALOG", NULL, edit_dialog_proc, 5);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
/* more tests for WM_KEYDOWN + WM_CHAR */ /* more tests for WM_KEYDOWN + WM_CHAR */
r = DialogBoxParam(hinst, "EDIT_READONLY_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 6); r = DialogBoxParam(hinst, "EDIT_READONLY_DIALOG", NULL, edit_dialog_proc, 6);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
r = DialogBoxParam(hinst, "EDIT_READONLY_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 7); r = DialogBoxParam(hinst, "EDIT_READONLY_DIALOG", NULL, edit_dialog_proc, 7);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
r = DialogBoxParam(hinst, "EDIT_READONLY_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 8); r = DialogBoxParam(hinst, "EDIT_READONLY_DIALOG", NULL, edit_dialog_proc, 8);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
/* tests with an editable edit control */ /* tests with an editable edit control */
r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 0); r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, edit_dialog_proc, 0);
ok(333 == r, "Expected %d, got %d\n", 333, r); ok(333 == r, "Expected %d, got %d\n", 333, r);
r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 1); r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, edit_dialog_proc, 1);
ok(111 == r, "Expected %d, got %d\n", 111, r); ok(111 == r, "Expected %d, got %d\n", 111, r);
r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 2); r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, edit_dialog_proc, 2);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
/* tests for WM_CHAR */ /* tests for WM_CHAR */
r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 3); r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, edit_dialog_proc, 3);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 4); r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, edit_dialog_proc, 4);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 5); r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, edit_dialog_proc, 5);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
/* tests for WM_KEYDOWN + WM_CHAR */ /* tests for WM_KEYDOWN + WM_CHAR */
r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 6); r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, edit_dialog_proc, 6);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 7); r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, edit_dialog_proc, 7);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 8); r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, edit_dialog_proc, 8);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
/* multiple tab tests */ /* multiple tab tests */
r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 9); r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, edit_dialog_proc, 9);
ok(22 == r, "Expected %d, got %d\n", 22, r); ok(22 == r, "Expected %d, got %d\n", 22, r);
r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 10); r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, edit_dialog_proc, 10);
ok(33 == r, "Expected %d, got %d\n", 33, r); ok(33 == r, "Expected %d, got %d\n", 33, r);
} }
@ -2009,13 +2009,13 @@ static void test_multi_edit_dialog(void)
int r; int r;
/* test for multiple edit dialogs (bug 12319) */ /* test for multiple edit dialogs (bug 12319) */
r = DialogBoxParam(hinst, "MULTI_EDIT_DIALOG", NULL, (DLGPROC)multi_edit_dialog_proc, 0); r = DialogBoxParam(hinst, "MULTI_EDIT_DIALOG", NULL, multi_edit_dialog_proc, 0);
ok(2222 == r, "Expected %d, got %d\n", 2222, r); ok(2222 == r, "Expected %d, got %d\n", 2222, r);
r = DialogBoxParam(hinst, "MULTI_EDIT_DIALOG", NULL, (DLGPROC)multi_edit_dialog_proc, 1); r = DialogBoxParam(hinst, "MULTI_EDIT_DIALOG", NULL, multi_edit_dialog_proc, 1);
ok(1111 == r, "Expected %d, got %d\n", 1111, r); ok(1111 == r, "Expected %d, got %d\n", 1111, r);
r = DialogBoxParam(hinst, "MULTI_EDIT_DIALOG", NULL, (DLGPROC)multi_edit_dialog_proc, 2); r = DialogBoxParam(hinst, "MULTI_EDIT_DIALOG", NULL, multi_edit_dialog_proc, 2);
ok(2222 == r, "Expected %d, got %d\n", 2222, r); ok(2222 == r, "Expected %d, got %d\n", 2222, r);
r = DialogBoxParam(hinst, "MULTI_EDIT_DIALOG", NULL, (DLGPROC)multi_edit_dialog_proc, 3); r = DialogBoxParam(hinst, "MULTI_EDIT_DIALOG", NULL, multi_edit_dialog_proc, 3);
ok(11 == r, "Expected %d, got %d\n", 11, r); ok(11 == r, "Expected %d, got %d\n", 11, r);
} }
@ -2024,27 +2024,27 @@ static void test_wantreturn_edit_dialog(void)
int r; int r;
/* tests for WM_KEYDOWN */ /* tests for WM_KEYDOWN */
r = DialogBoxParam(hinst, "EDIT_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_wantreturn_dialog_proc, 0); r = DialogBoxParam(hinst, "EDIT_WANTRETURN_DIALOG", NULL, edit_wantreturn_dialog_proc, 0);
ok(333 == r, "Expected %d, got %d\n", 333, r); ok(333 == r, "Expected %d, got %d\n", 333, r);
r = DialogBoxParam(hinst, "EDIT_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_wantreturn_dialog_proc, 1); r = DialogBoxParam(hinst, "EDIT_WANTRETURN_DIALOG", NULL, edit_wantreturn_dialog_proc, 1);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
r = DialogBoxParam(hinst, "EDIT_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_wantreturn_dialog_proc, 2); r = DialogBoxParam(hinst, "EDIT_WANTRETURN_DIALOG", NULL, edit_wantreturn_dialog_proc, 2);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
/* tests for WM_CHAR */ /* tests for WM_CHAR */
r = DialogBoxParam(hinst, "EDIT_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_wantreturn_dialog_proc, 3); r = DialogBoxParam(hinst, "EDIT_WANTRETURN_DIALOG", NULL, edit_wantreturn_dialog_proc, 3);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
r = DialogBoxParam(hinst, "EDIT_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_wantreturn_dialog_proc, 4); r = DialogBoxParam(hinst, "EDIT_WANTRETURN_DIALOG", NULL, edit_wantreturn_dialog_proc, 4);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
r = DialogBoxParam(hinst, "EDIT_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_wantreturn_dialog_proc, 5); r = DialogBoxParam(hinst, "EDIT_WANTRETURN_DIALOG", NULL, edit_wantreturn_dialog_proc, 5);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
/* tests for WM_KEYDOWN + WM_CHAR */ /* tests for WM_KEYDOWN + WM_CHAR */
r = DialogBoxParam(hinst, "EDIT_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_wantreturn_dialog_proc, 6); r = DialogBoxParam(hinst, "EDIT_WANTRETURN_DIALOG", NULL, edit_wantreturn_dialog_proc, 6);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
r = DialogBoxParam(hinst, "EDIT_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_wantreturn_dialog_proc, 7); r = DialogBoxParam(hinst, "EDIT_WANTRETURN_DIALOG", NULL, edit_wantreturn_dialog_proc, 7);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
r = DialogBoxParam(hinst, "EDIT_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_wantreturn_dialog_proc, 8); r = DialogBoxParam(hinst, "EDIT_WANTRETURN_DIALOG", NULL, edit_wantreturn_dialog_proc, 8);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
} }
@ -2053,51 +2053,51 @@ static void test_singleline_wantreturn_edit_dialog(void)
int r; int r;
/* tests for WM_KEYDOWN */ /* tests for WM_KEYDOWN */
r = DialogBoxParam(hinst, "EDIT_SINGLELINE_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 0); r = DialogBoxParam(hinst, "EDIT_SINGLELINE_DIALOG", NULL, edit_singleline_dialog_proc, 0);
ok(222 == r, "Expected %d, got %d\n", 222, r); ok(222 == r, "Expected %d, got %d\n", 222, r);
r = DialogBoxParam(hinst, "EDIT_SINGLELINE_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 1); r = DialogBoxParam(hinst, "EDIT_SINGLELINE_DIALOG", NULL, edit_singleline_dialog_proc, 1);
ok(111 == r, "Expected %d, got %d\n", 111, r); ok(111 == r, "Expected %d, got %d\n", 111, r);
r = DialogBoxParam(hinst, "EDIT_SINGLELINE_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 2); r = DialogBoxParam(hinst, "EDIT_SINGLELINE_DIALOG", NULL, edit_singleline_dialog_proc, 2);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
/* tests for WM_CHAR */ /* tests for WM_CHAR */
r = DialogBoxParam(hinst, "EDIT_SINGLELINE_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 3); r = DialogBoxParam(hinst, "EDIT_SINGLELINE_DIALOG", NULL, edit_singleline_dialog_proc, 3);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
r = DialogBoxParam(hinst, "EDIT_SINGLELINE_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 4); r = DialogBoxParam(hinst, "EDIT_SINGLELINE_DIALOG", NULL, edit_singleline_dialog_proc, 4);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
r = DialogBoxParam(hinst, "EDIT_SINGLELINE_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 5); r = DialogBoxParam(hinst, "EDIT_SINGLELINE_DIALOG", NULL, edit_singleline_dialog_proc, 5);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
/* tests for WM_KEYDOWN + WM_CHAR */ /* tests for WM_KEYDOWN + WM_CHAR */
r = DialogBoxParam(hinst, "EDIT_SINGLELINE_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 6); r = DialogBoxParam(hinst, "EDIT_SINGLELINE_DIALOG", NULL, edit_singleline_dialog_proc, 6);
ok(222 == r, "Expected %d, got %d\n", 222, r); ok(222 == r, "Expected %d, got %d\n", 222, r);
r = DialogBoxParam(hinst, "EDIT_SINGLELINE_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 7); r = DialogBoxParam(hinst, "EDIT_SINGLELINE_DIALOG", NULL, edit_singleline_dialog_proc, 7);
ok(111 == r, "Expected %d, got %d\n", 111, r); ok(111 == r, "Expected %d, got %d\n", 111, r);
r = DialogBoxParam(hinst, "EDIT_SINGLELINE_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 8); r = DialogBoxParam(hinst, "EDIT_SINGLELINE_DIALOG", NULL, edit_singleline_dialog_proc, 8);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
/* tests for WM_KEYDOWN */ /* tests for WM_KEYDOWN */
r = DialogBoxParam(hinst, "EDIT_SINGLELINE_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 0); r = DialogBoxParam(hinst, "EDIT_SINGLELINE_WANTRETURN_DIALOG", NULL, edit_singleline_dialog_proc, 0);
ok(222 == r, "Expected %d, got %d\n", 222, r); ok(222 == r, "Expected %d, got %d\n", 222, r);
r = DialogBoxParam(hinst, "EDIT_SINGLELINE_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 1); r = DialogBoxParam(hinst, "EDIT_SINGLELINE_WANTRETURN_DIALOG", NULL, edit_singleline_dialog_proc, 1);
ok(111 == r, "Expected %d, got %d\n", 111, r); ok(111 == r, "Expected %d, got %d\n", 111, r);
r = DialogBoxParam(hinst, "EDIT_SINGLELINE_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 2); r = DialogBoxParam(hinst, "EDIT_SINGLELINE_WANTRETURN_DIALOG", NULL, edit_singleline_dialog_proc, 2);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
/* tests for WM_CHAR */ /* tests for WM_CHAR */
r = DialogBoxParam(hinst, "EDIT_SINGLELINE_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 3); r = DialogBoxParam(hinst, "EDIT_SINGLELINE_WANTRETURN_DIALOG", NULL, edit_singleline_dialog_proc, 3);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
r = DialogBoxParam(hinst, "EDIT_SINGLELINE_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 4); r = DialogBoxParam(hinst, "EDIT_SINGLELINE_WANTRETURN_DIALOG", NULL, edit_singleline_dialog_proc, 4);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
r = DialogBoxParam(hinst, "EDIT_SINGLELINE_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 5); r = DialogBoxParam(hinst, "EDIT_SINGLELINE_WANTRETURN_DIALOG", NULL, edit_singleline_dialog_proc, 5);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
/* tests for WM_KEYDOWN + WM_CHAR */ /* tests for WM_KEYDOWN + WM_CHAR */
r = DialogBoxParam(hinst, "EDIT_SINGLELINE_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 6); r = DialogBoxParam(hinst, "EDIT_SINGLELINE_WANTRETURN_DIALOG", NULL, edit_singleline_dialog_proc, 6);
ok(222 == r, "Expected %d, got %d\n", 222, r); ok(222 == r, "Expected %d, got %d\n", 222, r);
r = DialogBoxParam(hinst, "EDIT_SINGLELINE_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 7); r = DialogBoxParam(hinst, "EDIT_SINGLELINE_WANTRETURN_DIALOG", NULL, edit_singleline_dialog_proc, 7);
ok(111 == r, "Expected %d, got %d\n", 111, r); ok(111 == r, "Expected %d, got %d\n", 111, r);
r = DialogBoxParam(hinst, "EDIT_SINGLELINE_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 8); r = DialogBoxParam(hinst, "EDIT_SINGLELINE_WANTRETURN_DIALOG", NULL, edit_singleline_dialog_proc, 8);
ok(444 == r, "Expected %d, got %d\n", 444, r); ok(444 == r, "Expected %d, got %d\n", 444, r);
} }

View file

@ -5,7 +5,8 @@
* Unit tests for data structure packing * Unit tests for data structure packing
*/ */
//#define WINVER 0x0501 #undef WINVER
#define WINVER 0x0600
//#define _WIN32_IE 0x0501 //#define _WIN32_IE 0x0501
//#define _WIN32_WINNT 0x0501 //#define _WIN32_WINNT 0x0501
@ -1562,7 +1563,7 @@ static void test_pack_LPNONCLIENTMETRICSA(void)
/* LPNONCLIENTMETRICSA */ /* LPNONCLIENTMETRICSA */
TEST_TYPE_SIZE (LPNONCLIENTMETRICSA, 8) TEST_TYPE_SIZE (LPNONCLIENTMETRICSA, 8)
TEST_TYPE_ALIGN (LPNONCLIENTMETRICSA, 8) TEST_TYPE_ALIGN (LPNONCLIENTMETRICSA, 8)
TEST_TARGET_SIZE (LPNONCLIENTMETRICSA, 340) TEST_TARGET_SIZE (LPNONCLIENTMETRICSA, 344)
TEST_TARGET_ALIGN(LPNONCLIENTMETRICSA, 4) TEST_TARGET_ALIGN(LPNONCLIENTMETRICSA, 4)
} }
@ -1571,7 +1572,7 @@ static void test_pack_LPNONCLIENTMETRICSW(void)
/* LPNONCLIENTMETRICSW */ /* LPNONCLIENTMETRICSW */
TEST_TYPE_SIZE (LPNONCLIENTMETRICSW, 8) TEST_TYPE_SIZE (LPNONCLIENTMETRICSW, 8)
TEST_TYPE_ALIGN (LPNONCLIENTMETRICSW, 8) TEST_TYPE_ALIGN (LPNONCLIENTMETRICSW, 8)
TEST_TARGET_SIZE (LPNONCLIENTMETRICSW, 500) TEST_TARGET_SIZE (LPNONCLIENTMETRICSW, 504)
TEST_TARGET_ALIGN(LPNONCLIENTMETRICSW, 4) TEST_TARGET_ALIGN(LPNONCLIENTMETRICSW, 4)
} }
@ -2390,7 +2391,7 @@ static void test_pack_NMHDR(void)
static void test_pack_NONCLIENTMETRICSA(void) static void test_pack_NONCLIENTMETRICSA(void)
{ {
/* NONCLIENTMETRICSA */ /* NONCLIENTMETRICSA */
TEST_TYPE_SIZE (NONCLIENTMETRICSA, 340) TEST_TYPE_SIZE (NONCLIENTMETRICSA, 344)
TEST_TYPE_ALIGN (NONCLIENTMETRICSA, 4) TEST_TYPE_ALIGN (NONCLIENTMETRICSA, 4)
TEST_FIELD_SIZE (NONCLIENTMETRICSA, cbSize, 4) TEST_FIELD_SIZE (NONCLIENTMETRICSA, cbSize, 4)
TEST_FIELD_ALIGN (NONCLIENTMETRICSA, cbSize, 4) TEST_FIELD_ALIGN (NONCLIENTMETRICSA, cbSize, 4)
@ -2437,12 +2438,15 @@ static void test_pack_NONCLIENTMETRICSA(void)
TEST_FIELD_SIZE (NONCLIENTMETRICSA, lfMessageFont, 60) TEST_FIELD_SIZE (NONCLIENTMETRICSA, lfMessageFont, 60)
TEST_FIELD_ALIGN (NONCLIENTMETRICSA, lfMessageFont, 4) TEST_FIELD_ALIGN (NONCLIENTMETRICSA, lfMessageFont, 4)
TEST_FIELD_OFFSET(NONCLIENTMETRICSA, lfMessageFont, 280) TEST_FIELD_OFFSET(NONCLIENTMETRICSA, lfMessageFont, 280)
TEST_FIELD_SIZE (NONCLIENTMETRICSA, iPaddedBorderWidth, 4)
TEST_FIELD_ALIGN (NONCLIENTMETRICSA, iPaddedBorderWidth, 4)
TEST_FIELD_OFFSET(NONCLIENTMETRICSA, iPaddedBorderWidth, 340)
} }
static void test_pack_NONCLIENTMETRICSW(void) static void test_pack_NONCLIENTMETRICSW(void)
{ {
/* NONCLIENTMETRICSW */ /* NONCLIENTMETRICSW */
TEST_TYPE_SIZE (NONCLIENTMETRICSW, 500) TEST_TYPE_SIZE (NONCLIENTMETRICSW, 504)
TEST_TYPE_ALIGN (NONCLIENTMETRICSW, 4) TEST_TYPE_ALIGN (NONCLIENTMETRICSW, 4)
TEST_FIELD_SIZE (NONCLIENTMETRICSW, cbSize, 4) TEST_FIELD_SIZE (NONCLIENTMETRICSW, cbSize, 4)
TEST_FIELD_ALIGN (NONCLIENTMETRICSW, cbSize, 4) TEST_FIELD_ALIGN (NONCLIENTMETRICSW, cbSize, 4)
@ -2489,6 +2493,9 @@ static void test_pack_NONCLIENTMETRICSW(void)
TEST_FIELD_SIZE (NONCLIENTMETRICSW, lfMessageFont, 92) TEST_FIELD_SIZE (NONCLIENTMETRICSW, lfMessageFont, 92)
TEST_FIELD_ALIGN (NONCLIENTMETRICSW, lfMessageFont, 4) TEST_FIELD_ALIGN (NONCLIENTMETRICSW, lfMessageFont, 4)
TEST_FIELD_OFFSET(NONCLIENTMETRICSW, lfMessageFont, 408) TEST_FIELD_OFFSET(NONCLIENTMETRICSW, lfMessageFont, 408)
TEST_FIELD_SIZE (NONCLIENTMETRICSW, iPaddedBorderWidth, 4)
TEST_FIELD_ALIGN (NONCLIENTMETRICSW, iPaddedBorderWidth, 4)
TEST_FIELD_OFFSET(NONCLIENTMETRICSW, iPaddedBorderWidth, 500)
} }
static void test_pack_PAINTSTRUCT(void) static void test_pack_PAINTSTRUCT(void)
@ -2870,7 +2877,7 @@ static void test_pack_PNONCLIENTMETRICSA(void)
/* PNONCLIENTMETRICSA */ /* PNONCLIENTMETRICSA */
TEST_TYPE_SIZE (PNONCLIENTMETRICSA, 8) TEST_TYPE_SIZE (PNONCLIENTMETRICSA, 8)
TEST_TYPE_ALIGN (PNONCLIENTMETRICSA, 8) TEST_TYPE_ALIGN (PNONCLIENTMETRICSA, 8)
TEST_TARGET_SIZE (PNONCLIENTMETRICSA, 340) TEST_TARGET_SIZE (PNONCLIENTMETRICSA, 344)
TEST_TARGET_ALIGN(PNONCLIENTMETRICSA, 4) TEST_TARGET_ALIGN(PNONCLIENTMETRICSA, 4)
} }
@ -2879,7 +2886,7 @@ static void test_pack_PNONCLIENTMETRICSW(void)
/* PNONCLIENTMETRICSW */ /* PNONCLIENTMETRICSW */
TEST_TYPE_SIZE (PNONCLIENTMETRICSW, 8) TEST_TYPE_SIZE (PNONCLIENTMETRICSW, 8)
TEST_TYPE_ALIGN (PNONCLIENTMETRICSW, 8) TEST_TYPE_ALIGN (PNONCLIENTMETRICSW, 8)
TEST_TARGET_SIZE (PNONCLIENTMETRICSW, 500) TEST_TARGET_SIZE (PNONCLIENTMETRICSW, 504)
TEST_TARGET_ALIGN(PNONCLIENTMETRICSW, 4) TEST_TARGET_ALIGN(PNONCLIENTMETRICSW, 4)
} }
@ -5060,7 +5067,7 @@ static void test_pack_LPNONCLIENTMETRICSA(void)
/* LPNONCLIENTMETRICSA */ /* LPNONCLIENTMETRICSA */
TEST_TYPE_SIZE (LPNONCLIENTMETRICSA, 4) TEST_TYPE_SIZE (LPNONCLIENTMETRICSA, 4)
TEST_TYPE_ALIGN (LPNONCLIENTMETRICSA, 4) TEST_TYPE_ALIGN (LPNONCLIENTMETRICSA, 4)
TEST_TARGET_SIZE (LPNONCLIENTMETRICSA, 340) TEST_TARGET_SIZE (LPNONCLIENTMETRICSA, 344)
TEST_TARGET_ALIGN(LPNONCLIENTMETRICSA, 4) TEST_TARGET_ALIGN(LPNONCLIENTMETRICSA, 4)
} }
@ -5069,7 +5076,7 @@ static void test_pack_LPNONCLIENTMETRICSW(void)
/* LPNONCLIENTMETRICSW */ /* LPNONCLIENTMETRICSW */
TEST_TYPE_SIZE (LPNONCLIENTMETRICSW, 4) TEST_TYPE_SIZE (LPNONCLIENTMETRICSW, 4)
TEST_TYPE_ALIGN (LPNONCLIENTMETRICSW, 4) TEST_TYPE_ALIGN (LPNONCLIENTMETRICSW, 4)
TEST_TARGET_SIZE (LPNONCLIENTMETRICSW, 500) TEST_TARGET_SIZE (LPNONCLIENTMETRICSW, 504)
TEST_TARGET_ALIGN(LPNONCLIENTMETRICSW, 4) TEST_TARGET_ALIGN(LPNONCLIENTMETRICSW, 4)
} }
@ -5888,7 +5895,7 @@ static void test_pack_NMHDR(void)
static void test_pack_NONCLIENTMETRICSA(void) static void test_pack_NONCLIENTMETRICSA(void)
{ {
/* NONCLIENTMETRICSA */ /* NONCLIENTMETRICSA */
TEST_TYPE_SIZE (NONCLIENTMETRICSA, 340) TEST_TYPE_SIZE (NONCLIENTMETRICSA, 344)
TEST_TYPE_ALIGN (NONCLIENTMETRICSA, 4) TEST_TYPE_ALIGN (NONCLIENTMETRICSA, 4)
TEST_FIELD_SIZE (NONCLIENTMETRICSA, cbSize, 4) TEST_FIELD_SIZE (NONCLIENTMETRICSA, cbSize, 4)
TEST_FIELD_ALIGN (NONCLIENTMETRICSA, cbSize, 4) TEST_FIELD_ALIGN (NONCLIENTMETRICSA, cbSize, 4)
@ -5935,12 +5942,15 @@ static void test_pack_NONCLIENTMETRICSA(void)
TEST_FIELD_SIZE (NONCLIENTMETRICSA, lfMessageFont, 60) TEST_FIELD_SIZE (NONCLIENTMETRICSA, lfMessageFont, 60)
TEST_FIELD_ALIGN (NONCLIENTMETRICSA, lfMessageFont, 4) TEST_FIELD_ALIGN (NONCLIENTMETRICSA, lfMessageFont, 4)
TEST_FIELD_OFFSET(NONCLIENTMETRICSA, lfMessageFont, 280) TEST_FIELD_OFFSET(NONCLIENTMETRICSA, lfMessageFont, 280)
TEST_FIELD_SIZE (NONCLIENTMETRICSA, iPaddedBorderWidth, 4)
TEST_FIELD_ALIGN (NONCLIENTMETRICSA, iPaddedBorderWidth, 4)
TEST_FIELD_OFFSET(NONCLIENTMETRICSA, iPaddedBorderWidth, 340)
} }
static void test_pack_NONCLIENTMETRICSW(void) static void test_pack_NONCLIENTMETRICSW(void)
{ {
/* NONCLIENTMETRICSW */ /* NONCLIENTMETRICSW */
TEST_TYPE_SIZE (NONCLIENTMETRICSW, 500) TEST_TYPE_SIZE (NONCLIENTMETRICSW, 504)
TEST_TYPE_ALIGN (NONCLIENTMETRICSW, 4) TEST_TYPE_ALIGN (NONCLIENTMETRICSW, 4)
TEST_FIELD_SIZE (NONCLIENTMETRICSW, cbSize, 4) TEST_FIELD_SIZE (NONCLIENTMETRICSW, cbSize, 4)
TEST_FIELD_ALIGN (NONCLIENTMETRICSW, cbSize, 4) TEST_FIELD_ALIGN (NONCLIENTMETRICSW, cbSize, 4)
@ -5987,6 +5997,9 @@ static void test_pack_NONCLIENTMETRICSW(void)
TEST_FIELD_SIZE (NONCLIENTMETRICSW, lfMessageFont, 92) TEST_FIELD_SIZE (NONCLIENTMETRICSW, lfMessageFont, 92)
TEST_FIELD_ALIGN (NONCLIENTMETRICSW, lfMessageFont, 4) TEST_FIELD_ALIGN (NONCLIENTMETRICSW, lfMessageFont, 4)
TEST_FIELD_OFFSET(NONCLIENTMETRICSW, lfMessageFont, 408) TEST_FIELD_OFFSET(NONCLIENTMETRICSW, lfMessageFont, 408)
TEST_FIELD_SIZE (NONCLIENTMETRICSW, iPaddedBorderWidth, 4)
TEST_FIELD_ALIGN (NONCLIENTMETRICSW, iPaddedBorderWidth, 4)
TEST_FIELD_OFFSET(NONCLIENTMETRICSW, iPaddedBorderWidth, 500)
} }
static void test_pack_PAINTSTRUCT(void) static void test_pack_PAINTSTRUCT(void)
@ -6368,7 +6381,7 @@ static void test_pack_PNONCLIENTMETRICSA(void)
/* PNONCLIENTMETRICSA */ /* PNONCLIENTMETRICSA */
TEST_TYPE_SIZE (PNONCLIENTMETRICSA, 4) TEST_TYPE_SIZE (PNONCLIENTMETRICSA, 4)
TEST_TYPE_ALIGN (PNONCLIENTMETRICSA, 4) TEST_TYPE_ALIGN (PNONCLIENTMETRICSA, 4)
TEST_TARGET_SIZE (PNONCLIENTMETRICSA, 340) TEST_TARGET_SIZE (PNONCLIENTMETRICSA, 344)
TEST_TARGET_ALIGN(PNONCLIENTMETRICSA, 4) TEST_TARGET_ALIGN(PNONCLIENTMETRICSA, 4)
} }
@ -6377,7 +6390,7 @@ static void test_pack_PNONCLIENTMETRICSW(void)
/* PNONCLIENTMETRICSW */ /* PNONCLIENTMETRICSW */
TEST_TYPE_SIZE (PNONCLIENTMETRICSW, 4) TEST_TYPE_SIZE (PNONCLIENTMETRICSW, 4)
TEST_TYPE_ALIGN (PNONCLIENTMETRICSW, 4) TEST_TYPE_ALIGN (PNONCLIENTMETRICSW, 4)
TEST_TARGET_SIZE (PNONCLIENTMETRICSW, 500) TEST_TARGET_SIZE (PNONCLIENTMETRICSW, 504)
TEST_TARGET_ALIGN(PNONCLIENTMETRICSW, 4) TEST_TARGET_ALIGN(PNONCLIENTMETRICSW, 4)
} }

View file

@ -1540,7 +1540,7 @@ static void test_key_map(void)
static void test_ToUnicode(void) static void test_ToUnicode(void)
{ {
WCHAR wStr[2]; WCHAR wStr[4];
BYTE state[256]; BYTE state[256];
const BYTE SC_RETURN = 0x1c, SC_TAB = 0x0f; const BYTE SC_RETURN = 0x1c, SC_TAB = 0x0f;
const BYTE HIGHEST_BIT = 0x80; const BYTE HIGHEST_BIT = 0x80;
@ -1548,8 +1548,9 @@ static void test_ToUnicode(void)
for(i=0; i<256; i++) for(i=0; i<256; i++)
state[i]=0; state[i]=0;
wStr[1] = 0xAA;
SetLastError(0xdeadbeef); SetLastError(0xdeadbeef);
ret = ToUnicode(VK_RETURN, SC_RETURN, state, wStr, 2, 0); ret = ToUnicode(VK_RETURN, SC_RETURN, state, wStr, 4, 0);
if (!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) if (!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
{ {
win_skip("ToUnicode is not implemented\n"); win_skip("ToUnicode is not implemented\n");
@ -1558,7 +1559,11 @@ static void test_ToUnicode(void)
ok(ret == 1, "ToUnicode for Return key didn't return 1 (was %i)\n", ret); ok(ret == 1, "ToUnicode for Return key didn't return 1 (was %i)\n", ret);
if(ret == 1) if(ret == 1)
{
ok(wStr[0]=='\r', "ToUnicode for CTRL + Return was %i (expected 13)\n", wStr[0]); ok(wStr[0]=='\r', "ToUnicode for CTRL + Return was %i (expected 13)\n", wStr[0]);
ok(wStr[1]==0 || broken(wStr[1]!=0) /* nt4 */,
"ToUnicode didn't null-terminate the buffer when there was room.\n");
}
state[VK_CONTROL] |= HIGHEST_BIT; state[VK_CONTROL] |= HIGHEST_BIT;
state[VK_LCONTROL] |= HIGHEST_BIT; state[VK_LCONTROL] |= HIGHEST_BIT;

View file

@ -8134,12 +8134,6 @@ static VOID CALLBACK tfunc(HWND hwnd, UINT uMsg, UINT_PTR id, DWORD dwTime)
{ {
} }
static VOID CALLBACK tfunc_crash(HWND hwnd, UINT uMsg, UINT_PTR id, DWORD dwTime)
{
/* Crash on purpose */
*(volatile int *)0 = 2;
}
#define TIMER_ID 0x19 #define TIMER_ID 0x19
static DWORD WINAPI timer_thread_proc(LPVOID x) static DWORD WINAPI timer_thread_proc(LPVOID x)
@ -8161,7 +8155,6 @@ static void test_timers(void)
{ {
struct timer_info info; struct timer_info info;
DWORD id; DWORD id;
MSG msg;
info.hWnd = CreateWindow ("TestWindowClass", NULL, info.hWnd = CreateWindow ("TestWindowClass", NULL,
WS_OVERLAPPEDWINDOW , WS_OVERLAPPEDWINDOW ,
@ -8184,26 +8177,6 @@ static void test_timers(void)
ok( KillTimer(info.hWnd, TIMER_ID), "KillTimer failed\n"); ok( KillTimer(info.hWnd, TIMER_ID), "KillTimer failed\n");
ok(DestroyWindow(info.hWnd), "failed to destroy window\n"); ok(DestroyWindow(info.hWnd), "failed to destroy window\n");
/* Test timer callback with crash */
SetLastError(0xdeadbeef);
info.hWnd = CreateWindowW(testWindowClassW, NULL,
WS_OVERLAPPEDWINDOW ,
CW_USEDEFAULT, CW_USEDEFAULT, 300, 300, 0,
NULL, NULL, 0);
if ((!info.hWnd && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) || /* Win9x/Me */
(!pGetMenuInfo)) /* Win95/NT4 */
{
win_skip("Test would crash on Win9x/WinMe/NT4\n");
DestroyWindow(info.hWnd);
return;
}
info.id = SetTimer(info.hWnd, TIMER_ID, 0, tfunc_crash);
ok(info.id, "SetTimer failed\n");
Sleep(150);
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) DispatchMessage(&msg);
ok(DestroyWindow(info.hWnd), "failed to destroy window\n");
} }
static int count = 0; static int count = 0;
@ -9516,8 +9489,8 @@ static DWORD CALLBACK send_msg_thread_2(void *param)
case WAIT_OBJECT_0 + EV_SENDMSG: case WAIT_OBJECT_0 + EV_SENDMSG:
trace("thread: sending message\n"); trace("thread: sending message\n");
ok( SendNotifyMessageA(info->hwnd, WM_USER, 0, 0), ret = SendNotifyMessageA(info->hwnd, WM_USER, 0, 0);
"SendNotifyMessageA failed error %u\n", GetLastError()); ok(ret, "SendNotifyMessageA failed error %u\n", GetLastError());
SetEvent(info->hevent[EV_ACK]); SetEvent(info->hevent[EV_ACK]);
break; break;
@ -11236,7 +11209,7 @@ static void test_dialog_messages(void)
cls.lpszClassName = "MyDialogClass"; cls.lpszClassName = "MyDialogClass";
cls.hInstance = GetModuleHandle(0); cls.hInstance = GetModuleHandle(0);
/* need a cast since a dlgproc is used as a wndproc */ /* need a cast since a dlgproc is used as a wndproc */
cls.lpfnWndProc = (WNDPROC)test_dlg_proc; cls.lpfnWndProc = test_dlg_proc;
if (!RegisterClass(&cls)) assert(0); if (!RegisterClass(&cls)) assert(0);
hdlg = CreateDialogParam(0, "CLASS_TEST_DIALOG_2", 0, test_dlg_proc, 0); hdlg = CreateDialogParam(0, "CLASS_TEST_DIALOG_2", 0, test_dlg_proc, 0);
@ -11256,6 +11229,52 @@ static void test_dialog_messages(void)
UnregisterClass(cls.lpszClassName, cls.hInstance); UnregisterClass(cls.lpszClassName, cls.hInstance);
} }
static void test_EndDialog(void)
{
HWND hparent, hother, hactive, hdlg;
WNDCLASS cls;
hparent = CreateWindowExA(0, "TestParentClass", "Test parent",
WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_DISABLED,
100, 100, 200, 200, 0, 0, 0, NULL);
ok (hparent != 0, "Failed to create parent window\n");
hother = CreateWindowExA(0, "TestParentClass", "Test parent 2",
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
100, 100, 200, 200, 0, 0, 0, NULL);
ok (hother != 0, "Failed to create parent window\n");
ok(GetClassInfo(0, "#32770", &cls), "GetClassInfo failed\n");
cls.lpszClassName = "MyDialogClass";
cls.hInstance = GetModuleHandle(0);
/* need a cast since a dlgproc is used as a wndproc */
cls.lpfnWndProc = (WNDPROC)test_dlg_proc;
if (!RegisterClass(&cls)) assert(0);
flush_sequence();
SetForegroundWindow(hother);
hactive = GetForegroundWindow();
ok(hother == hactive, "Wrong window has focus (%p != %p)\n", hother, hactive);
/* create a dialog where the parent is disabled, this parent should still
receive the focus when the dialog exits (even though "normally" a
disabled window should not receive the focus) */
hdlg = CreateDialogParam(0, "CLASS_TEST_DIALOG_2", hparent, test_dlg_proc, 0);
ok(IsWindow(hdlg), "CreateDialogParam failed\n");
SetForegroundWindow(hdlg);
hactive = GetForegroundWindow();
ok(hdlg == hactive, "Wrong window has focus (%p != %p)\n", hdlg, hactive);
EndDialog(hdlg, 0);
hactive = GetForegroundWindow();
ok(hparent == hactive, "Wrong window has focus (parent != active) (active: %p, parent: %p, dlg: %p, other: %p)\n", hactive, hparent, hdlg, hother);
DestroyWindow(hdlg);
flush_sequence();
DestroyWindow( hother );
DestroyWindow( hparent );
UnregisterClass(cls.lpszClassName, cls.hInstance);
}
static void test_nullCallback(void) static void test_nullCallback(void)
{ {
HWND hwnd; HWND hwnd;
@ -13024,6 +13043,7 @@ static void test_keyflags(void)
test_window = CreateWindowEx(0, "TestWindowClass", NULL, WS_OVERLAPPEDWINDOW | WS_VISIBLE, test_window = CreateWindowEx(0, "TestWindowClass", NULL, WS_OVERLAPPEDWINDOW | WS_VISIBLE,
100, 100, 200, 200, 0, 0, 0, NULL); 100, 100, 200, 200, 0, 0, 0, NULL);
flush_events();
flush_sequence(); flush_sequence();
/* keyup without a keydown */ /* keyup without a keydown */
@ -13470,6 +13490,234 @@ end:
flush_sequence(); flush_sequence();
} }
static const struct message WmSetFocus_1[] = {
{ HCBT_SETFOCUS, hook }, /* child */
{ HCBT_ACTIVATE, hook }, /* parent */
{ WM_QUERYNEWPALETTE, sent|wparam|lparam|parent|optional, 0, 0 },
{ WM_WINDOWPOSCHANGING, sent|parent, 0, SWP_NOSIZE|SWP_NOMOVE },
{ WM_ACTIVATEAPP, sent|wparam|parent, 1 },
{ WM_NCACTIVATE, sent|parent },
{ WM_GETTEXT, sent|defwinproc|parent|optional },
{ WM_GETTEXT, sent|defwinproc|parent|optional },
{ WM_ACTIVATE, sent|wparam|parent, 1 },
{ HCBT_SETFOCUS, hook }, /* parent */
{ WM_SETFOCUS, sent|defwinproc|parent },
{ WM_KILLFOCUS, sent|parent },
{ WM_SETFOCUS, sent },
{ 0 }
};
static const struct message WmSetFocus_2[] = {
{ HCBT_SETFOCUS, hook }, /* parent */
{ WM_KILLFOCUS, sent },
{ WM_SETFOCUS, sent|parent },
{ 0 }
};
static const struct message WmSetFocus_3[] = {
{ HCBT_SETFOCUS, hook }, /* child */
{ 0 }
};
static const struct message WmSetFocus_4[] = {
{ 0 }
};
static void test_SetFocus(void)
{
HWND parent, old_parent, child, old_focus, old_active;
MSG msg;
struct wnd_event wnd_event;
HANDLE hthread;
DWORD ret, tid;
wnd_event.start_event = CreateEvent(NULL, 0, 0, NULL);
ok(wnd_event.start_event != 0, "CreateEvent error %d\n", GetLastError());
hthread = CreateThread(NULL, 0, thread_proc, &wnd_event, 0, &tid);
ok(hthread != 0, "CreateThread error %d\n", GetLastError());
ret = WaitForSingleObject(wnd_event.start_event, INFINITE);
ok(ret == WAIT_OBJECT_0, "WaitForSingleObject failed\n");
CloseHandle(wnd_event.start_event);
parent = CreateWindowEx(0, "TestParentClass", NULL, WS_OVERLAPPEDWINDOW,
0, 0, 0, 0, 0, 0, 0, NULL);
ok(parent != 0, "failed to create parent window\n");
child = CreateWindowEx(0, "TestWindowClass", NULL, WS_CHILD,
0, 0, 0, 0, parent, 0, 0, NULL);
ok(child != 0, "failed to create child window\n");
trace("parent %p, child %p, thread window %p\n", parent, child, wnd_event.hwnd);
SetFocus(0);
SetActiveWindow(0);
flush_events();
flush_sequence();
ok(GetActiveWindow() == 0, "expected active 0, got %p\n", GetActiveWindow());
ok(GetFocus() == 0, "expected focus 0, got %p\n", GetFocus());
log_all_parent_messages++;
old_focus = SetFocus(child);
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) DispatchMessage(&msg);
ok_sequence(WmSetFocus_1, "SetFocus on a child window", TRUE);
ok(old_focus == parent, "expected old focus %p, got %p\n", parent, old_focus);
ok(GetActiveWindow() == parent, "expected active %p, got %p\n", parent, GetActiveWindow());
ok(GetFocus() == child, "expected focus %p, got %p\n", child, GetFocus());
old_focus = SetFocus(parent);
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) DispatchMessage(&msg);
ok_sequence(WmSetFocus_2, "SetFocus on a parent window", FALSE);
ok(old_focus == child, "expected old focus %p, got %p\n", child, old_focus);
ok(GetActiveWindow() == parent, "expected active %p, got %p\n", parent, GetActiveWindow());
ok(GetFocus() == parent, "expected focus %p, got %p\n", parent, GetFocus());
SetLastError(0xdeadbeef);
old_focus = SetFocus((HWND)0xdeadbeef);
ok(GetLastError() == ERROR_INVALID_WINDOW_HANDLE || broken(GetLastError() == 0xdeadbeef),
"expected ERROR_INVALID_WINDOW_HANDLE, got %d\n", GetLastError());
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) DispatchMessage(&msg);
ok_sequence(WmEmptySeq, "SetFocus on an invalid window", FALSE);
ok(old_focus == 0, "expected old focus 0, got %p\n", old_focus);
ok(GetActiveWindow() == parent, "expected active %p, got %p\n", parent, GetActiveWindow());
ok(GetFocus() == parent, "expected focus %p, got %p\n", parent, GetFocus());
SetLastError(0xdeadbeef);
old_focus = SetFocus(GetDesktopWindow());
ok(GetLastError() == ERROR_ACCESS_DENIED /* Vista+ */ ||
broken(GetLastError() == 0xdeadbeef), "expected ERROR_ACCESS_DENIED, got %d\n", GetLastError());
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) DispatchMessage(&msg);
ok_sequence(WmEmptySeq, "SetFocus on a desktop window", TRUE);
ok(old_focus == 0, "expected old focus 0, got %p\n", old_focus);
ok(GetActiveWindow() == parent, "expected active %p, got %p\n", parent, GetActiveWindow());
ok(GetFocus() == parent, "expected focus %p, got %p\n", parent, GetFocus());
SetLastError(0xdeadbeef);
old_focus = SetFocus(wnd_event.hwnd);
ok(GetLastError() == ERROR_ACCESS_DENIED /* Vista+ */ ||
broken(GetLastError() == 0xdeadbeef), "expected ERROR_ACCESS_DENIED, got %d\n", GetLastError());
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) DispatchMessage(&msg);
ok_sequence(WmEmptySeq, "SetFocus on another thread window", TRUE);
ok(old_focus == 0, "expected old focus 0, got %p\n", old_focus);
ok(GetActiveWindow() == parent, "expected active %p, got %p\n", parent, GetActiveWindow());
ok(GetFocus() == parent, "expected focus %p, got %p\n", parent, GetFocus());
SetLastError(0xdeadbeef);
old_active = SetActiveWindow((HWND)0xdeadbeef);
ok(GetLastError() == ERROR_INVALID_WINDOW_HANDLE || broken(GetLastError() == 0xdeadbeef),
"expected ERROR_INVALID_WINDOW_HANDLE, got %d\n", GetLastError());
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) DispatchMessage(&msg);
ok_sequence(WmEmptySeq, "SetActiveWindow on an invalid window", FALSE);
ok(old_active == 0, "expected old focus 0, got %p\n", old_active);
ok(GetActiveWindow() == parent, "expected active %p, got %p\n", parent, GetActiveWindow());
ok(GetFocus() == parent, "expected focus %p, got %p\n", parent, GetFocus());
SetLastError(0xdeadbeef);
old_active = SetActiveWindow(GetDesktopWindow());
todo_wine
ok(GetLastError() == 0xdeadbeef, "expected 0xdeadbeef, got %d\n", GetLastError());
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) DispatchMessage(&msg);
ok_sequence(WmEmptySeq, "SetActiveWindow on a desktop window", TRUE);
ok(old_active == 0, "expected old focus 0, got %p\n", old_focus);
ok(GetActiveWindow() == parent, "expected active %p, got %p\n", parent, GetActiveWindow());
ok(GetFocus() == parent, "expected focus %p, got %p\n", parent, GetFocus());
SetLastError(0xdeadbeef);
old_active = SetActiveWindow(wnd_event.hwnd);
todo_wine
ok(GetLastError() == 0xdeadbeef, "expected 0xdeadbeef, got %d\n", GetLastError());
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) DispatchMessage(&msg);
ok_sequence(WmEmptySeq, "SetActiveWindow on another thread window", TRUE);
ok(old_active == 0, "expected old focus 0, got %p\n", old_active);
ok(GetActiveWindow() == parent, "expected active %p, got %p\n", parent, GetActiveWindow());
ok(GetFocus() == parent, "expected focus %p, got %p\n", parent, GetFocus());
SetLastError(0xdeadbeef);
ret = AttachThreadInput(GetCurrentThreadId(), tid, TRUE);
ok(ret, "AttachThreadInput error %d\n", GetLastError());
todo_wine {
ok(GetActiveWindow() == parent, "expected active %p, got %p\n", parent, GetActiveWindow());
ok(GetFocus() == parent, "expected focus %p, got %p\n", parent, GetFocus());
}
flush_events();
flush_sequence();
old_focus = SetFocus(wnd_event.hwnd);
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) DispatchMessage(&msg);
ok(old_focus == wnd_event.hwnd, "expected old focus %p, got %p\n", wnd_event.hwnd, old_focus);
ok(GetActiveWindow() == wnd_event.hwnd, "expected active %p, got %p\n", wnd_event.hwnd, GetActiveWindow());
ok(GetFocus() == wnd_event.hwnd, "expected focus %p, got %p\n", wnd_event.hwnd, GetFocus());
old_focus = SetFocus(parent);
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) DispatchMessage(&msg);
ok(old_focus == parent, "expected old focus %p, got %p\n", parent, old_focus);
ok(GetActiveWindow() == parent, "expected active %p, got %p\n", parent, GetActiveWindow());
ok(GetFocus() == parent, "expected focus %p, got %p\n", parent, GetFocus());
flush_events();
flush_sequence();
old_active = SetActiveWindow(wnd_event.hwnd);
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) DispatchMessage(&msg);
ok(old_active == parent, "expected old focus %p, got %p\n", parent, old_active);
ok(GetActiveWindow() == wnd_event.hwnd, "expected active %p, got %p\n", wnd_event.hwnd, GetActiveWindow());
ok(GetFocus() == wnd_event.hwnd, "expected focus %p, got %p\n", wnd_event.hwnd, GetFocus());
SetLastError(0xdeadbeef);
ret = AttachThreadInput(GetCurrentThreadId(), tid, FALSE);
ok(ret, "AttachThreadInput error %d\n", GetLastError());
ok(GetActiveWindow() == 0, "expected active 0, got %p\n", GetActiveWindow());
ok(GetFocus() == 0, "expected focus 0, got %p\n", GetFocus());
old_parent = SetParent(child, GetDesktopWindow());
ok(old_parent == parent, "expected old parent %p, got %p\n", parent, old_parent);
ok(GetActiveWindow() == 0, "expected active 0, got %p\n", GetActiveWindow());
ok(GetFocus() == 0, "expected focus 0, got %p\n", GetFocus());
old_focus = SetFocus(parent);
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) DispatchMessage(&msg);
ok(old_focus == parent, "expected old focus %p, got %p\n", parent, old_focus);
ok(GetActiveWindow() == parent, "expected active %p, got %p\n", parent, GetActiveWindow());
ok(GetFocus() == parent, "expected focus %p, got %p\n", parent, GetFocus());
flush_events();
flush_sequence();
SetLastError(0xdeadbeef);
old_focus = SetFocus(child);
todo_wine
ok(GetLastError() == ERROR_INVALID_PARAMETER /* Vista+ */ ||
broken(GetLastError() == 0) /* XP */ ||
broken(GetLastError() == 0xdeadbeef), "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) DispatchMessage(&msg);
ok_sequence(WmSetFocus_3, "SetFocus on a child window", TRUE);
ok(old_focus == 0, "expected old focus 0, got %p\n", old_focus);
ok(GetActiveWindow() == parent, "expected active %p, got %p\n", parent, GetActiveWindow());
ok(GetFocus() == parent, "expected focus %p, got %p\n", parent, GetFocus());
SetLastError(0xdeadbeef);
old_active = SetActiveWindow(child);
ok(GetLastError() == 0xdeadbeef, "expected 0xdeadbeef, got %d\n", GetLastError());
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) DispatchMessage(&msg);
ok_sequence(WmEmptySeq, "SetActiveWindow on a child window", FALSE);
ok(old_active == parent, "expected old active %p, got %p\n", parent, old_active);
ok(GetActiveWindow() == parent, "expected active %p, got %p\n", parent, GetActiveWindow());
ok(GetFocus() == parent, "expected focus %p, got %p\n", parent, GetFocus());
log_all_parent_messages--;
DestroyWindow(child);
DestroyWindow(parent);
ret = PostMessage(wnd_event.hwnd, WM_QUIT, 0, 0);
ok(ret, "PostMessage(WM_QUIT) error %d\n", GetLastError());
ret = WaitForSingleObject(hthread, INFINITE);
ok(ret == WAIT_OBJECT_0, "WaitForSingleObject failed\n");
CloseHandle(hthread);
}
START_TEST(msg) START_TEST(msg)
{ {
char **test_argv; char **test_argv;
@ -13533,6 +13781,7 @@ START_TEST(msg)
hEvent_hook = 0; hEvent_hook = 0;
#endif #endif
test_SetFocus();
test_SetParent(); test_SetParent();
test_PostMessage(); test_PostMessage();
test_ShowWindow(); test_ShowWindow();
@ -13572,6 +13821,7 @@ START_TEST(msg)
test_SetWindowRgn(); test_SetWindowRgn();
test_sys_menu(); test_sys_menu();
test_dialog_messages(); test_dialog_messages();
test_EndDialog();
test_nullCallback(); test_nullCallback();
test_dbcs_wm_char(); test_dbcs_wm_char();
test_menu_messages(); test_menu_messages();

View file

@ -90,7 +90,7 @@ static void test_LoadStringA (void)
{sizeof str, sizeof str - 1}, {sizeof str, sizeof str - 1},
{sizeof str - 1, sizeof str - 2}}; {sizeof str - 1, sizeof str - 2}};
unsigned int i; unsigned int i;
int ret; int ret, ret2;
assert (sizeof str < sizeof buf); assert (sizeof str < sizeof buf);
for (i = 0; i < sizeof tests / sizeof tests[0]; i++) { for (i = 0; i < sizeof tests / sizeof tests[0]; i++) {
@ -110,17 +110,17 @@ static void test_LoadStringA (void)
ret = LoadStringA(hInst, 1, buf, sizeof(buf) ); ret = LoadStringA(hInst, 1, buf, sizeof(buf) );
ok( ret > 0, "LoadString failed: ret %d err %d\n", ret, GetLastError()); ok( ret > 0, "LoadString failed: ret %d err %d\n", ret, GetLastError());
ok( LoadStringA( hInst, MAKELONG( 1, 0x8000 ), buf, sizeof(buf)) == ret, ret2 = LoadStringA( hInst, MAKELONG( 1, 0x8000 ), buf, sizeof(buf));
"LoadString failed: ret %d err %d\n", ret, GetLastError()); ok( ret2 == ret, "LoadString failed: ret %d err %d\n", ret, GetLastError());
ok( LoadStringA( hInst, MAKELONG( 1, 0xffff ), buf, sizeof(buf)) == ret, ret2 = LoadStringA( hInst, MAKELONG( 1, 0xffff ), buf, sizeof(buf));
"LoadString failed: ret %d err %d\n", ret, GetLastError()); ok( ret2 == ret, "LoadString failed: ret %d err %d\n", ret, GetLastError());
ret = LoadStringA(hInst, 65534, buf, sizeof(buf) ); ret = LoadStringA(hInst, 65534, buf, sizeof(buf) );
ok( ret > 0, "LoadString failed: ret %d err %d\n", ret, GetLastError()); ok( ret > 0, "LoadString failed: ret %d err %d\n", ret, GetLastError());
ok( LoadStringA( hInst, MAKELONG( 65534, 0x8000 ), buf, sizeof(buf)) == ret, ret2 = LoadStringA( hInst, MAKELONG( 65534, 0x8000 ), buf, sizeof(buf));
"LoadString failed: ret %d err %d\n", ret, GetLastError()); ok( ret2 == ret, "LoadString failed: ret %d err %d\n", ret, GetLastError());
ok( LoadStringA( hInst, MAKELONG( 65534, 0xffff ), buf, sizeof(buf)) == ret, ret2 = LoadStringA( hInst, MAKELONG( 65534, 0xffff ), buf, sizeof(buf));
"LoadString failed: ret %d err %d\n", ret, GetLastError()); ok( ret2 == ret, "LoadString failed: ret %d err %d\n", ret, GetLastError());
ret = LoadStringA(hInst, 0, buf, 0); ret = LoadStringA(hInst, 0, buf, 0);
ok( ret == -1 || broken(ret == 0), ok( ret == -1 || broken(ret == 0),

View file

@ -45,6 +45,16 @@ STRINGTABLE
65534 "Test high id" 65534 "Test high id"
} }
/* Test dialog with a mixed style WS_CHILD | WS_POPUP control */
TEST_DLG_CHILD_POPUP DIALOG 0, 0, 60, 30
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Test dialog with mixed style controls"
FONT 8, "MS Shell Dlg"
{
CONTROL "bump7",7,"static",WS_CHILD|WS_POPUP|WS_BORDER,0,0,40,10,WS_EX_TRANSPARENT
CONTROL "bump8",8,"static",WS_POPUP,0,10,40,10,WS_EX_TRANSPARENT
}
TEST_DIALOG DIALOG 0, 0, 60, 30 TEST_DIALOG DIALOG 0, 0, 60, 30
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Test dialog" CAPTION "Test dialog"
@ -89,6 +99,14 @@ FONT 8, "MS Shell Dlg"
EDITTEXT 200,4,4,50,14 EDITTEXT 200,4,4,50,14
} }
FOCUS_TEST_DIALOG_2 DIALOG 0, 0, 60, 30
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Test dialog"
FONT 8, "MS Shell Dlg"
{
LTEXT "Hello world", 200,4,4,50,14
}
IDD_DIALOG DIALOG 0, 0, 186, 95 IDD_DIALOG DIALOG 0, 0, 186, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog" CAPTION "Dialog"

View file

@ -302,13 +302,10 @@ todo_wine
if (bThemeActive || style != WS_HSCROLL) if (bThemeActive || style != WS_HSCROLL)
todo_wine todo_wine
ok( (winstyle & (WS_HSCROLL|WS_VSCROLL)) == ( style | WS_VSCROLL), ok( (winstyle & (WS_HSCROLL|WS_VSCROLL)) == ( style | WS_VSCROLL),
"unexpected style change %8lx expected %8lx\n", "unexpected style change %08x/%08x\n", winstyle, style);
(winstyle & (WS_HSCROLL|WS_VSCROLL)), style | WS_VSCROLL);
else else
ok( (winstyle & (WS_HSCROLL|WS_VSCROLL)) == style || ok( (winstyle & (WS_HSCROLL|WS_VSCROLL)) == style,
broken((winstyle & (WS_HSCROLL|WS_VSCROLL)) == (WS_HSCROLL|WS_VSCROLL)), /* Win 9x/ME */ "unexpected style change %08x/%08x\n", winstyle, style);
"unexpected style change %8lx expected %8x\n",
(winstyle & (WS_HSCROLL|WS_VSCROLL)), style);
} }
/* do the test again with H and V reversed. /* do the test again with H and V reversed.
* Start with a clean window */ * Start with a clean window */
@ -341,13 +338,10 @@ todo_wine
if (bThemeActive || style != WS_VSCROLL) if (bThemeActive || style != WS_VSCROLL)
todo_wine todo_wine
ok( (winstyle & (WS_HSCROLL|WS_VSCROLL)) == ( style | WS_HSCROLL), ok( (winstyle & (WS_HSCROLL|WS_VSCROLL)) == ( style | WS_HSCROLL),
"unexpected style change %8lx expected %8lx\n", "unexpected style change %08x/%08x\n", winstyle, style);
(winstyle & (WS_HSCROLL|WS_VSCROLL)), style | WS_HSCROLL);
else else
ok( (winstyle & (WS_HSCROLL|WS_VSCROLL)) == style || ok( (winstyle & (WS_HSCROLL|WS_VSCROLL)) == style,
broken((winstyle & (WS_HSCROLL|WS_VSCROLL)) == (WS_HSCROLL|WS_VSCROLL)), /* Win 9x/ME */ "unexpected style change %08x/%08x\n", winstyle, style);
"unexpected style change %8lx expected %8x\n",
(winstyle & (WS_HSCROLL|WS_VSCROLL)), style);
} }
/* Slightly change the test to use SetScrollInfo /* Slightly change the test to use SetScrollInfo
* Start with a clean window */ * Start with a clean window */

View file

@ -17,7 +17,6 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/ */
#include <assert.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdio.h> #include <stdio.h>

View file

@ -25,6 +25,8 @@
#undef _WIN32_WINNT #undef _WIN32_WINNT
#define _WIN32_WINNT 0x0600 /* For SPI_GETMOUSEHOVERWIDTH and more */ #define _WIN32_WINNT 0x0600 /* For SPI_GETMOUSEHOVERWIDTH and more */
//#define _WIN32_IE 0x0700 //#define _WIN32_IE 0x0700
#undef WINVER
#define WINVER 0x0600 /* For COLOR_MENUBAR, NONCLIENTMETRICS with padding */
#include "wine/test.h" #include "wine/test.h"
#include "windef.h" #include "windef.h"
@ -682,7 +684,7 @@ static BOOL test_setborder(UINT curr_val, int usesetborder, int dpi)
INT frame; INT frame;
NONCLIENTMETRICSA ncm; NONCLIENTMETRICSA ncm;
ncm.cbSize = sizeof( ncm); ncm.cbSize = FIELD_OFFSET(NONCLIENTMETRICS, iPaddedBorderWidth);
rc=SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0); rc=SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0);
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError()); ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError());
if( usesetborder) { if( usesetborder) {
@ -727,11 +729,11 @@ static void test_SPI_SETBORDER( void ) /* 6 */
{ {
BOOL rc; BOOL rc;
UINT old_border; UINT old_border;
NONCLIENTMETRICSA ncmsave; NONCLIENTMETRICS ncmsave;
INT CaptionWidth, INT CaptionWidth,
PaddedBorderWidth; PaddedBorderWidth;
ncmsave.cbSize = sizeof( ncmsave); ncmsave.cbSize = FIELD_OFFSET(NONCLIENTMETRICS, iPaddedBorderWidth);
rc=SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &ncmsave, 0); rc=SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &ncmsave, 0);
if( !rc) { if( !rc) {
win_skip("SPI_GETNONCLIENTMETRICS is not available\n"); win_skip("SPI_GETNONCLIENTMETRICS is not available\n");
@ -1415,10 +1417,10 @@ static void test_SPI_SETNONCLIENTMETRICS( void ) /* 44 */
NONCLIENTMETRICSA Ncmcur; NONCLIENTMETRICSA Ncmcur;
NONCLIENTMETRICSA Ncmstart; NONCLIENTMETRICSA Ncmstart;
Ncmorig.cbSize = sizeof(NONCLIENTMETRICSA); Ncmorig.cbSize = FIELD_OFFSET(NONCLIENTMETRICSA, iPaddedBorderWidth);
Ncmnew.cbSize = sizeof(NONCLIENTMETRICSA); Ncmnew.cbSize = FIELD_OFFSET(NONCLIENTMETRICSA, iPaddedBorderWidth);
Ncmcur.cbSize = sizeof(NONCLIENTMETRICSA); Ncmcur.cbSize = FIELD_OFFSET(NONCLIENTMETRICSA, iPaddedBorderWidth);
Ncmstart.cbSize = sizeof(NONCLIENTMETRICSA); Ncmstart.cbSize = FIELD_OFFSET(NONCLIENTMETRICSA, iPaddedBorderWidth);
trace("testing SPI_{GET,SET}NONCLIENTMETRICS\n"); trace("testing SPI_{GET,SET}NONCLIENTMETRICS\n");
change_counter = 0; change_counter = 0;
@ -2574,8 +2576,28 @@ static void test_GetSystemMetrics( void)
NONCLIENTMETRICS ncm; NONCLIENTMETRICS ncm;
SIZE screen; SIZE screen;
assert(sizeof(ncm) == 344);
ncm.cbSize = FIELD_OFFSET(NONCLIENTMETRICS, iPaddedBorderWidth);
rc = SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, &ncm, 0);
ok(rc, "SystemParametersInfoA failed\n");
ncm.cbSize = FIELD_OFFSET(NONCLIENTMETRICS, iPaddedBorderWidth) - 1;
rc = SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, &ncm, 0);
ok(!rc, "SystemParametersInfoA should fail\n");
ncm.cbSize = FIELD_OFFSET(NONCLIENTMETRICS, iPaddedBorderWidth) + 1;
SetLastError(0xdeadbeef);
rc = SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, &ncm, 0);
ok(!rc, "SystemParametersInfoA should fail\n");
ncm.cbSize = sizeof(ncm); /* Vista added padding */
SetLastError(0xdeadbeef);
rc = SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, &ncm, 0);
ok(rc || broken(!rc) /* before Vista */, "SystemParametersInfoA failed\n");
minim.cbSize = sizeof( minim); minim.cbSize = sizeof( minim);
ncm.cbSize = sizeof( ncm); ncm.cbSize = FIELD_OFFSET(NONCLIENTMETRICS, iPaddedBorderWidth);
SystemParametersInfo( SPI_GETMINIMIZEDMETRICS, 0, &minim, 0); SystemParametersInfo( SPI_GETMINIMIZEDMETRICS, 0, &minim, 0);
rc = SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0); rc = SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0);
if( !rc) { if( !rc) {

View file

@ -2513,7 +2513,7 @@ static LRESULT WINAPI set_focus_on_activate_proc(HWND hwnd, UINT msg, WPARAM wp,
static void test_SetFocus(HWND hwnd) static void test_SetFocus(HWND hwnd)
{ {
HWND child, child2; HWND child, child2, ret;
WNDPROC old_wnd_proc; WNDPROC old_wnd_proc;
/* check if we can set focus to non-visible windows */ /* check if we can set focus to non-visible windows */
@ -2588,9 +2588,32 @@ todo_wine
ok( GetActiveWindow() == hwnd, "parent window %p should be active\n", hwnd); ok( GetActiveWindow() == hwnd, "parent window %p should be active\n", hwnd);
todo_wine todo_wine
ok( GetFocus() == child, "Focus should be on child %p, not %p\n", child, GetFocus() ); ok( GetFocus() == child, "Focus should be on child %p, not %p\n", child, GetFocus() );
SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)old_wnd_proc); SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)old_wnd_proc);
SetFocus( hwnd );
SetParent( child, GetDesktopWindow());
SetParent( child2, child );
ok( GetActiveWindow() == hwnd, "parent window %p should be active\n", hwnd);
ok( GetFocus() == hwnd, "Focus should be on parent %p\n", hwnd );
ret = SetFocus( child2 );
ok( ret == 0, "SetFocus %p should fail\n", child2);
ok( GetActiveWindow() == hwnd, "parent window %p should be active\n", hwnd);
ok( GetFocus() == hwnd, "Focus should be on parent %p\n", hwnd );
ret = SetFocus( child );
ok( ret == 0, "SetFocus %p should fail\n", child);
ok( GetActiveWindow() == hwnd, "parent window %p should be active\n", hwnd);
ok( GetFocus() == hwnd, "Focus should be on parent %p\n", hwnd );
SetWindowLongW( child, GWL_STYLE, WS_POPUP|WS_CHILD );
SetFocus( child2 );
ok( GetActiveWindow() == child, "child window %p should be active\n", child);
ok( GetFocus() == child2, "Focus should be on child2 %p\n", child2 );
SetFocus( hwnd );
ok( GetActiveWindow() == hwnd, "parent window %p should be active\n", hwnd);
ok( GetFocus() == hwnd, "Focus should be on parent %p\n", hwnd );
SetFocus( child );
ok( GetActiveWindow() == child, "child window %p should be active\n", child);
ok( GetFocus() == child, "Focus should be on child %p\n", child );
DestroyWindow( child2 ); DestroyWindow( child2 );
DestroyWindow( child ); DestroyWindow( child );
} }
@ -3642,7 +3665,7 @@ static LRESULT WINAPI StyleCheckProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM
ok(!(lpcs->dwExStyle & WS_EX_WINDOWEDGE), "Window shouldn't have WS_EX_WINDOWEDGE style\n"); ok(!(lpcs->dwExStyle & WS_EX_WINDOWEDGE), "Window shouldn't have WS_EX_WINDOWEDGE style\n");
ok((lpss->styleOld & ~WS_EX_WINDOWEDGE) == (lpcs->dwExStyle & ~WS_EX_WINDOWEDGE), ok((lpss->styleOld & ~WS_EX_WINDOWEDGE) == (lpcs->dwExStyle & ~WS_EX_WINDOWEDGE),
"Ex style (0x%08lx) should match what the caller passed to CreateWindowEx (0x%08lx)\n", "Ex style (0x%08x) should match what the caller passed to CreateWindowEx (0x%08x)\n",
(lpss->styleOld & ~WS_EX_WINDOWEDGE), (lpcs->dwExStyle & ~WS_EX_WINDOWEDGE)); (lpss->styleOld & ~WS_EX_WINDOWEDGE), (lpcs->dwExStyle & ~WS_EX_WINDOWEDGE));
ok(lpss->styleNew == lpcs->style, ok(lpss->styleNew == lpcs->style,
@ -3673,6 +3696,7 @@ static void register_style_check_class(void)
}; };
atomStyleCheckClass = RegisterClass(&wc); atomStyleCheckClass = RegisterClass(&wc);
assert(atomStyleCheckClass);
} }
static void check_window_style(DWORD dwStyleIn, DWORD dwExStyleIn, DWORD dwStyleOut, DWORD dwExStyleOut) static void check_window_style(DWORD dwStyleIn, DWORD dwExStyleIn, DWORD dwStyleOut, DWORD dwExStyleOut)
@ -3700,28 +3724,42 @@ static void check_window_style(DWORD dwStyleIn, DWORD dwExStyleIn, DWORD dwStyle
dwActualStyle = GetWindowLong(hwnd, GWL_STYLE); dwActualStyle = GetWindowLong(hwnd, GWL_STYLE);
dwActualExStyle = GetWindowLong(hwnd, GWL_EXSTYLE); dwActualExStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
ok((dwActualStyle == dwStyleOut) && (dwActualExStyle == dwExStyleOut), ok(dwActualStyle == dwStyleOut, "expected style %#x, got %#x\n", dwStyleOut, dwActualStyle);
"Style (0x%08x) should really be 0x%08x and/or Ex style (0x%08x) should really be 0x%08x\n", ok(dwActualExStyle == dwExStyleOut, "expected ex_style %#x, got %#x\n", dwExStyleOut, dwActualExStyle);
dwActualStyle, dwStyleOut, dwActualExStyle, dwExStyleOut);
/* try setting the styles explicitly */ /* try setting the styles explicitly */
SetWindowLong( hwnd, GWL_EXSTYLE, dwExStyleIn ); SetWindowLong( hwnd, GWL_EXSTYLE, dwExStyleIn );
dwActualStyle = GetWindowLong(hwnd, GWL_STYLE);
dwActualExStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
/* WS_EX_WINDOWEDGE can't always be changed */
if (dwExStyleIn & WS_EX_DLGMODALFRAME)
dwExStyleOut = dwExStyleIn | WS_EX_WINDOWEDGE;
else if ((dwActualStyle & (WS_DLGFRAME | WS_THICKFRAME)) && !(dwExStyleIn & WS_EX_STATICEDGE))
dwExStyleOut = dwExStyleIn | WS_EX_WINDOWEDGE;
else
dwExStyleOut = dwExStyleIn & ~WS_EX_WINDOWEDGE;
ok(dwActualStyle == dwStyleOut, "expected style %#x, got %#x\n", dwStyleOut, dwActualStyle);
ok(dwActualExStyle == dwExStyleOut, "expected ex_style %#x, got %#x\n", dwExStyleOut, dwActualExStyle);
SetWindowLong( hwnd, GWL_STYLE, dwStyleIn ); SetWindowLong( hwnd, GWL_STYLE, dwStyleIn );
dwActualStyle = GetWindowLong(hwnd, GWL_STYLE); dwActualStyle = GetWindowLong(hwnd, GWL_STYLE);
dwActualExStyle = GetWindowLong(hwnd, GWL_EXSTYLE); dwActualExStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
/* WS_CLIPSIBLINGS can't be reset on top-level windows */ /* WS_CLIPSIBLINGS can't be reset on top-level windows */
if (dwStyleIn & WS_CHILD) dwStyleOut = dwStyleIn; if ((dwStyleIn & (WS_CHILD|WS_POPUP)) == WS_CHILD) dwStyleOut = dwStyleIn;
else dwStyleOut = dwStyleIn | WS_CLIPSIBLINGS; else dwStyleOut = dwStyleIn | WS_CLIPSIBLINGS;
/* WS_EX_WINDOWEDGE can't always be changed */ /* WS_EX_WINDOWEDGE can't always be changed */
if ((dwExStyleIn & WS_EX_DLGMODALFRAME) || (dwStyleIn & WS_THICKFRAME)) if (dwExStyleIn & WS_EX_DLGMODALFRAME)
dwExStyleOut = dwExStyleIn | WS_EX_WINDOWEDGE;
else if ((dwActualStyle & (WS_DLGFRAME | WS_THICKFRAME)) && !(dwExStyleIn & WS_EX_STATICEDGE))
dwExStyleOut = dwExStyleIn | WS_EX_WINDOWEDGE; dwExStyleOut = dwExStyleIn | WS_EX_WINDOWEDGE;
else if (dwStyleIn & (WS_CHILD | WS_POPUP))
dwExStyleOut = dwExStyleIn & ~WS_EX_WINDOWEDGE;
else else
dwExStyleOut = dwExStyleIn; dwExStyleOut = dwExStyleIn & ~WS_EX_WINDOWEDGE;
ok((dwActualStyle == dwStyleOut) && (dwActualExStyle == dwExStyleOut), ok(dwActualStyle == dwStyleOut, "expected style %#x, got %#x\n", dwStyleOut, dwActualStyle);
"%08x/%08x: Style (0x%08x) should really be 0x%08x and/or Ex style (0x%08x) should really be 0x%08x\n", /* FIXME: Remove the condition below once Wine is fixed */
dwStyleIn, dwExStyleIn, dwActualStyle, dwStyleOut, dwActualExStyle, dwExStyleOut); if (dwActualExStyle != dwExStyleOut)
todo_wine ok(dwActualExStyle == dwExStyleOut, "expected ex_style %#x, got %#x\n", dwExStyleOut, dwActualExStyle);
else
ok(dwActualExStyle == dwExStyleOut, "expected ex_style %#x, got %#x\n", dwExStyleOut, dwActualExStyle);
DestroyWindow(hwnd); DestroyWindow(hwnd);
if (hwndParent) DestroyWindow(hwndParent); if (hwndParent) DestroyWindow(hwndParent);
@ -3733,14 +3771,36 @@ static void test_window_styles(void)
register_style_check_class(); register_style_check_class();
check_window_style(0, 0, WS_CLIPSIBLINGS|WS_CAPTION, WS_EX_WINDOWEDGE); check_window_style(0, 0, WS_CLIPSIBLINGS|WS_CAPTION, WS_EX_WINDOWEDGE);
check_window_style(WS_DLGFRAME, 0, WS_CLIPSIBLINGS|WS_CAPTION, WS_EX_WINDOWEDGE);
check_window_style(WS_THICKFRAME, 0, WS_THICKFRAME|WS_CLIPSIBLINGS|WS_CAPTION, WS_EX_WINDOWEDGE);
check_window_style(WS_DLGFRAME, WS_EX_STATICEDGE, WS_CLIPSIBLINGS|WS_CAPTION, WS_EX_WINDOWEDGE|WS_EX_STATICEDGE);
check_window_style(WS_THICKFRAME, WS_EX_STATICEDGE, WS_THICKFRAME|WS_CLIPSIBLINGS|WS_CAPTION, WS_EX_WINDOWEDGE|WS_EX_STATICEDGE);
check_window_style(WS_OVERLAPPEDWINDOW, 0, WS_CLIPSIBLINGS|WS_OVERLAPPEDWINDOW, WS_EX_WINDOWEDGE); check_window_style(WS_OVERLAPPEDWINDOW, 0, WS_CLIPSIBLINGS|WS_OVERLAPPEDWINDOW, WS_EX_WINDOWEDGE);
check_window_style(WS_CHILD, 0, WS_CHILD, 0); check_window_style(WS_CHILD, 0, WS_CHILD, 0);
check_window_style(WS_CHILD|WS_DLGFRAME, 0, WS_CHILD|WS_DLGFRAME, WS_EX_WINDOWEDGE);
check_window_style(WS_CHILD|WS_THICKFRAME, 0, WS_CHILD|WS_THICKFRAME, WS_EX_WINDOWEDGE);
check_window_style(WS_CHILD|WS_DLGFRAME, WS_EX_STATICEDGE, WS_CHILD|WS_DLGFRAME, WS_EX_STATICEDGE);
check_window_style(WS_CHILD|WS_THICKFRAME, WS_EX_STATICEDGE, WS_CHILD|WS_THICKFRAME, WS_EX_STATICEDGE);
check_window_style(WS_CHILD|WS_CAPTION, 0, WS_CHILD|WS_CAPTION, WS_EX_WINDOWEDGE);
check_window_style(WS_CHILD|WS_CAPTION|WS_SYSMENU, 0, WS_CHILD|WS_CAPTION|WS_SYSMENU, WS_EX_WINDOWEDGE);
check_window_style(WS_CHILD, WS_EX_WINDOWEDGE, WS_CHILD, 0);
check_window_style(WS_CHILD, WS_EX_DLGMODALFRAME, WS_CHILD, WS_EX_WINDOWEDGE|WS_EX_DLGMODALFRAME);
check_window_style(WS_CHILD, WS_EX_DLGMODALFRAME|WS_EX_STATICEDGE, WS_CHILD, WS_EX_STATICEDGE|WS_EX_WINDOWEDGE|WS_EX_DLGMODALFRAME);
check_window_style(WS_CHILD|WS_POPUP, 0, WS_CHILD|WS_POPUP|WS_CLIPSIBLINGS, 0);
check_window_style(WS_CHILD|WS_POPUP|WS_DLGFRAME, 0, WS_CHILD|WS_POPUP|WS_DLGFRAME|WS_CLIPSIBLINGS, WS_EX_WINDOWEDGE);
check_window_style(WS_CHILD|WS_POPUP|WS_THICKFRAME, 0, WS_CHILD|WS_POPUP|WS_THICKFRAME|WS_CLIPSIBLINGS, WS_EX_WINDOWEDGE);
check_window_style(WS_CHILD|WS_POPUP|WS_DLGFRAME, WS_EX_STATICEDGE, WS_CHILD|WS_POPUP|WS_DLGFRAME|WS_CLIPSIBLINGS, WS_EX_STATICEDGE);
check_window_style(WS_CHILD|WS_POPUP|WS_THICKFRAME, WS_EX_STATICEDGE, WS_CHILD|WS_POPUP|WS_THICKFRAME|WS_CLIPSIBLINGS, WS_EX_STATICEDGE);
check_window_style(WS_CHILD|WS_POPUP, WS_EX_APPWINDOW, WS_CHILD|WS_POPUP|WS_CLIPSIBLINGS, WS_EX_APPWINDOW);
check_window_style(WS_CHILD|WS_POPUP, WS_EX_WINDOWEDGE, WS_CHILD|WS_POPUP|WS_CLIPSIBLINGS, 0);
check_window_style(WS_CHILD, WS_EX_WINDOWEDGE, WS_CHILD, 0); check_window_style(WS_CHILD, WS_EX_WINDOWEDGE, WS_CHILD, 0);
check_window_style(0, WS_EX_TOOLWINDOW, WS_CLIPSIBLINGS|WS_CAPTION, WS_EX_WINDOWEDGE|WS_EX_TOOLWINDOW); check_window_style(0, WS_EX_TOOLWINDOW, WS_CLIPSIBLINGS|WS_CAPTION, WS_EX_WINDOWEDGE|WS_EX_TOOLWINDOW);
check_window_style(WS_POPUP, 0, WS_POPUP|WS_CLIPSIBLINGS, 0); check_window_style(WS_POPUP, 0, WS_POPUP|WS_CLIPSIBLINGS, 0);
check_window_style(WS_POPUP, WS_EX_WINDOWEDGE, WS_POPUP|WS_CLIPSIBLINGS, 0); check_window_style(WS_POPUP, WS_EX_WINDOWEDGE, WS_POPUP|WS_CLIPSIBLINGS, 0);
check_window_style(WS_CHILD, WS_EX_DLGMODALFRAME, WS_CHILD, WS_EX_WINDOWEDGE|WS_EX_DLGMODALFRAME); check_window_style(WS_POPUP|WS_DLGFRAME, 0, WS_POPUP|WS_DLGFRAME|WS_CLIPSIBLINGS, WS_EX_WINDOWEDGE);
check_window_style(WS_CHILD, WS_EX_DLGMODALFRAME|WS_EX_STATICEDGE, WS_CHILD, WS_EX_STATICEDGE|WS_EX_WINDOWEDGE|WS_EX_DLGMODALFRAME); check_window_style(WS_POPUP|WS_THICKFRAME, 0, WS_POPUP|WS_THICKFRAME|WS_CLIPSIBLINGS, WS_EX_WINDOWEDGE);
check_window_style(WS_POPUP|WS_DLGFRAME, WS_EX_STATICEDGE, WS_POPUP|WS_DLGFRAME|WS_CLIPSIBLINGS, WS_EX_STATICEDGE);
check_window_style(WS_POPUP|WS_THICKFRAME, WS_EX_STATICEDGE, WS_POPUP|WS_THICKFRAME|WS_CLIPSIBLINGS, WS_EX_STATICEDGE);
check_window_style(WS_CAPTION, WS_EX_STATICEDGE, WS_CLIPSIBLINGS|WS_CAPTION, WS_EX_STATICEDGE|WS_EX_WINDOWEDGE); check_window_style(WS_CAPTION, WS_EX_STATICEDGE, WS_CLIPSIBLINGS|WS_CAPTION, WS_EX_STATICEDGE|WS_EX_WINDOWEDGE);
check_window_style(0, WS_EX_APPWINDOW, WS_CLIPSIBLINGS|WS_CAPTION, WS_EX_APPWINDOW|WS_EX_WINDOWEDGE); check_window_style(0, WS_EX_APPWINDOW, WS_CLIPSIBLINGS|WS_CAPTION, WS_EX_APPWINDOW|WS_EX_WINDOWEDGE);
@ -3753,6 +3813,175 @@ 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_CAPTION, 0, WS_CAPTION|WS_CLIPSIBLINGS, WS_EX_WINDOWEDGE|WS_EX_CONTROLPARENT);
check_dialog_style(WS_BORDER, 0, WS_CAPTION|WS_CLIPSIBLINGS, WS_EX_WINDOWEDGE|WS_EX_CONTROLPARENT);
check_dialog_style(WS_DLGFRAME, 0, WS_CAPTION|WS_CLIPSIBLINGS, WS_EX_WINDOWEDGE|WS_EX_CONTROLPARENT);
check_dialog_style(WS_BORDER|DS_CONTROL, 0, WS_CAPTION|DS_CONTROL|WS_CLIPSIBLINGS, WS_EX_WINDOWEDGE|WS_EX_CONTROLPARENT);
check_dialog_style(WS_DLGFRAME|DS_CONTROL, 0, WS_CAPTION|DS_CONTROL|WS_CLIPSIBLINGS, WS_EX_WINDOWEDGE|WS_EX_CONTROLPARENT);
check_dialog_style(WS_CAPTION|WS_SYSMENU, 0, WS_CAPTION|WS_SYSMENU|WS_CLIPSIBLINGS, WS_EX_WINDOWEDGE|WS_EX_CONTROLPARENT);
check_dialog_style(WS_SYSMENU, 0, WS_CAPTION|WS_SYSMENU|WS_CLIPSIBLINGS, WS_EX_WINDOWEDGE|WS_EX_CONTROLPARENT);
check_dialog_style(WS_CAPTION|DS_CONTROL, 0, WS_CAPTION|DS_CONTROL|WS_CLIPSIBLINGS, WS_EX_WINDOWEDGE|WS_EX_CONTROLPARENT);
check_dialog_style(WS_SYSMENU|DS_CONTROL, 0, WS_CAPTION|DS_CONTROL|WS_CLIPSIBLINGS, WS_EX_WINDOWEDGE|WS_EX_CONTROLPARENT);
check_dialog_style(WS_CAPTION|WS_SYSMENU|DS_CONTROL, 0, WS_CAPTION|DS_CONTROL|WS_CLIPSIBLINGS, 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_BORDER, 0, WS_CHILD|WS_BORDER, 0);
check_dialog_style(WS_CHILD|WS_DLGFRAME, 0, WS_CHILD|WS_DLGFRAME, WS_EX_WINDOWEDGE);
check_dialog_style(WS_CHILD|WS_BORDER|DS_CONTROL, 0, WS_CHILD|DS_CONTROL, WS_EX_CONTROLPARENT);
check_dialog_style(WS_CHILD|WS_DLGFRAME|DS_CONTROL, 0, WS_CHILD|DS_CONTROL, WS_EX_CONTROLPARENT);
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_SYSMENU, 0, WS_CHILD|WS_SYSMENU, 0);
check_dialog_style(WS_CHILD|WS_CAPTION|DS_CONTROL, 0, WS_CHILD|DS_CONTROL, WS_EX_CONTROLPARENT);
check_dialog_style(WS_CHILD|WS_SYSMENU|DS_CONTROL, 0, WS_CHILD|DS_CONTROL, WS_EX_CONTROLPARENT);
check_dialog_style(WS_CHILD|WS_CAPTION|WS_SYSMENU|DS_CONTROL, 0, WS_CHILD|DS_CONTROL, WS_EX_CONTROLPARENT);
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_CAPTION, 0, WS_CHILD|WS_POPUP|WS_CAPTION|WS_CLIPSIBLINGS, WS_EX_WINDOWEDGE);
check_dialog_style(WS_CHILD|WS_POPUP|WS_BORDER, 0, WS_CHILD|WS_POPUP|WS_BORDER|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_BORDER|DS_CONTROL, 0, WS_CHILD|WS_POPUP|DS_CONTROL|WS_CLIPSIBLINGS, WS_EX_CONTROLPARENT);
check_dialog_style(WS_CHILD|WS_POPUP|WS_DLGFRAME|DS_CONTROL, 0, WS_CHILD|WS_POPUP|DS_CONTROL|WS_CLIPSIBLINGS, WS_EX_CONTROLPARENT);
check_dialog_style(WS_CHILD|WS_POPUP|WS_CAPTION|WS_SYSMENU, 0, WS_CHILD|WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_CLIPSIBLINGS, WS_EX_WINDOWEDGE);
check_dialog_style(WS_CHILD|WS_POPUP|WS_SYSMENU, 0, WS_CHILD|WS_POPUP|WS_SYSMENU|WS_CLIPSIBLINGS, 0);
check_dialog_style(WS_CHILD|WS_POPUP|WS_CAPTION|DS_CONTROL, 0, WS_CHILD|WS_POPUP|DS_CONTROL|WS_CLIPSIBLINGS, WS_EX_CONTROLPARENT);
check_dialog_style(WS_CHILD|WS_POPUP|WS_SYSMENU|DS_CONTROL, 0, WS_CHILD|WS_POPUP|DS_CONTROL|WS_CLIPSIBLINGS, WS_EX_CONTROLPARENT);
check_dialog_style(WS_CHILD|WS_POPUP|WS_CAPTION|WS_SYSMENU|DS_CONTROL, 0, WS_CHILD|WS_POPUP|DS_CONTROL|WS_CLIPSIBLINGS, 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_POPUP|WS_CAPTION, 0, WS_POPUP|WS_CAPTION|WS_CLIPSIBLINGS, WS_EX_WINDOWEDGE|WS_EX_CONTROLPARENT);
check_dialog_style(WS_POPUP|WS_BORDER, 0, WS_POPUP|WS_BORDER|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_BORDER|DS_CONTROL, 0, WS_POPUP|DS_CONTROL|WS_CLIPSIBLINGS, WS_EX_CONTROLPARENT);
check_dialog_style(WS_POPUP|WS_DLGFRAME|DS_CONTROL, 0, WS_POPUP|DS_CONTROL|WS_CLIPSIBLINGS, WS_EX_CONTROLPARENT);
check_dialog_style(WS_POPUP|WS_CAPTION|WS_SYSMENU, 0, WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_CLIPSIBLINGS, WS_EX_WINDOWEDGE|WS_EX_CONTROLPARENT);
check_dialog_style(WS_POPUP|WS_SYSMENU, 0, WS_POPUP|WS_SYSMENU|WS_CLIPSIBLINGS, WS_EX_CONTROLPARENT);
check_dialog_style(WS_POPUP|WS_CAPTION|DS_CONTROL, 0, WS_POPUP|DS_CONTROL|WS_CLIPSIBLINGS, WS_EX_CONTROLPARENT);
check_dialog_style(WS_POPUP|WS_SYSMENU|DS_CONTROL, 0, WS_POPUP|DS_CONTROL|WS_CLIPSIBLINGS, WS_EX_CONTROLPARENT);
check_dialog_style(WS_POPUP|WS_CAPTION|WS_SYSMENU|DS_CONTROL, 0, WS_POPUP|DS_CONTROL|WS_CLIPSIBLINGS, 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;
@ -5094,20 +5323,20 @@ static void test_CreateWindow(void)
ok( !pGetProcessDefaultLayout( NULL ), "GetProcessDefaultLayout succeeded\n" ); ok( !pGetProcessDefaultLayout( NULL ), "GetProcessDefaultLayout succeeded\n" );
ok( GetLastError() == ERROR_NOACCESS, "wrong error %u\n", GetLastError() ); ok( GetLastError() == ERROR_NOACCESS, "wrong error %u\n", GetLastError() );
SetLastError( 0xdeadbeef ); SetLastError( 0xdeadbeef );
ok( pGetProcessDefaultLayout( &layout ), res = pGetProcessDefaultLayout( &layout );
"GetProcessDefaultLayout failed err %u\n", GetLastError ()); ok( res, "GetProcessDefaultLayout failed err %u\n", GetLastError ());
ok( layout == 0, "GetProcessDefaultLayout wrong layout %x\n", layout ); ok( layout == 0, "GetProcessDefaultLayout wrong layout %x\n", layout );
SetLastError( 0xdeadbeef ); SetLastError( 0xdeadbeef );
ok( pSetProcessDefaultLayout( 7 ), res = pSetProcessDefaultLayout( 7 );
"SetProcessDefaultLayout failed err %u\n", GetLastError ()); ok( res, "SetProcessDefaultLayout failed err %u\n", GetLastError ());
ok( pGetProcessDefaultLayout( &layout ), res = pGetProcessDefaultLayout( &layout );
"GetProcessDefaultLayout failed err %u\n", GetLastError ()); ok( res, "GetProcessDefaultLayout failed err %u\n", GetLastError ());
ok( layout == 7, "GetProcessDefaultLayout wrong layout %x\n", layout ); ok( layout == 7, "GetProcessDefaultLayout wrong layout %x\n", layout );
SetLastError( 0xdeadbeef ); SetLastError( 0xdeadbeef );
ok( pSetProcessDefaultLayout( LAYOUT_RTL ), res = pSetProcessDefaultLayout( LAYOUT_RTL );
"SetProcessDefaultLayout failed err %u\n", GetLastError ()); ok( res, "SetProcessDefaultLayout failed err %u\n", GetLastError ());
ok( pGetProcessDefaultLayout( &layout ), res = pGetProcessDefaultLayout( &layout );
"GetProcessDefaultLayout failed err %u\n", GetLastError ()); ok( res, "GetProcessDefaultLayout failed err %u\n", GetLastError ());
ok( layout == LAYOUT_RTL, "GetProcessDefaultLayout wrong layout %x\n", layout ); ok( layout == LAYOUT_RTL, "GetProcessDefaultLayout wrong layout %x\n", layout );
hwnd = CreateWindowEx(WS_EX_APPWINDOW, "static", NULL, WS_POPUP, hwnd = CreateWindowEx(WS_EX_APPWINDOW, "static", NULL, WS_POPUP,
0, 0, 100, 100, 0, 0, 0, NULL); 0, 0, 100, 100, 0, 0, 0, NULL);
@ -6685,6 +6914,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();