[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
#include <assert.h>
#include <stdarg.h>
#include <stdio.h>

View file

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

View file

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

View file

@ -20,7 +20,6 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <assert.h>
#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>
@ -185,7 +184,7 @@ typedef struct {
0, /* biYPelsPerMeter */ \
0, /* biClrUsed */ \
0 /* biClrImportant */ \
}, \
} \
/* DIB data: left uninitialized */ \
} \
}
@ -697,7 +696,7 @@ static void test_initial_cursor(void)
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;
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.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
{
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.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)
{
@ -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)
{
@ -790,6 +789,7 @@ static void test_CreateIcon(void)
HDC hdc;
void *bits;
UINT display_bpp;
int i;
hdc = GetDC(0);
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);
ok(hIcon != 0, "CreateIcon failed\n");
test_icon_info(hIcon, 16, 16, 1);
test_icon_info(hIcon, 16, 16, 32, 1);
DestroyIcon(hIcon);
hIcon = CreateIcon(0, 16, 16, 1, display_bpp, bmp_bits, bmp_bits);
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);
hbmMask = CreateBitmap(16, 16, 1, 1, bmp_bits);
@ -841,7 +841,7 @@ static void test_CreateIcon(void)
info.hbmColor = hbmColor;
hIcon = CreateIconIndirect(&info);
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);
DeleteObject(hbmMask);
@ -858,11 +858,27 @@ static void test_CreateIcon(void)
SetLastError(0xdeadbeaf);
hIcon = CreateIconIndirect(&info);
ok(hIcon != 0, "CreateIconIndirect failed\n");
test_icon_info(hIcon, 16, 16, 1);
test_icon_info(hIcon, 16, 16, 32, 1);
DestroyIcon(hIcon);
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 */
@ -891,7 +907,7 @@ static void test_CreateIcon(void)
SetLastError(0xdeadbeaf);
hIcon = CreateIconIndirect(&info);
ok(hIcon != 0, "CreateIconIndirect failed\n");
test_icon_info(hIcon, 32, 32, 8);
test_icon_info(hIcon, 32, 32, 32, 8);
DestroyIcon(hIcon);
DeleteObject(hbmColor);
@ -909,7 +925,7 @@ static void test_CreateIcon(void)
SetLastError(0xdeadbeaf);
hIcon = CreateIconIndirect(&info);
ok(hIcon != 0, "CreateIconIndirect failed\n");
test_icon_info(hIcon, 32, 32, 8);
test_icon_info(hIcon, 32, 32, 32, 8);
DestroyIcon(hIcon);
DeleteObject(hbmColor);
@ -927,7 +943,7 @@ static void test_CreateIcon(void)
SetLastError(0xdeadbeaf);
hIcon = CreateIconIndirect(&info);
ok(hIcon != 0, "CreateIconIndirect failed\n");
test_icon_info(hIcon, 32, 32, 8);
test_icon_info(hIcon, 32, 32, 32, 8);
DestroyIcon(hIcon);
DeleteObject(hbmMask);

View file

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

View file

@ -33,6 +33,9 @@
#include <stdio.h>
#include <stdarg.h>
#undef WINVER
#define WINVER 0x0600 /* For NONCLIENTMETRICS with padding */
#include "wine/test.h"
#include "windef.h"
#include "winbase.h"
@ -830,8 +833,7 @@ static void test_initial_focus(void)
{
/* Test 1:
* This test intentionally returns FALSE in response to WM_INITDIALOG
* without setting focus to a control. This is not allowed according to
* MSDN, but it is exactly what MFC's CFormView does.
* without setting focus to a control. This is what MFC's CFormView does.
*
* Since the WM_INITDIALOG handler returns FALSE without setting the focus,
* 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);
}
/* 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)
@ -1058,11 +1085,50 @@ static INT_PTR CALLBACK TestReturnKeyDlgProc (HWND hDlg, UINT uiMsg,
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)
{
INT_PTR ret;
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);
ret = DialogBoxParamA(GetModuleHandle(NULL), "IDD_DIALOG" , hwnd_invalid, 0 , 0);
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)
{
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");
}
@ -1198,7 +1264,7 @@ static void test_MessageBoxFontTest(void)
}
GetObjectW(hFont, sizeof(LOGFONTW), &lfStaticFont);
ncMetrics.cbSize = sizeof(NONCLIENTMETRICSW);
ncMetrics.cbSize = FIELD_OFFSET(NONCLIENTMETRICSW, iPaddedBorderWidth);
SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, 0, &ncMetrics, 0);
ok( !memcmp(&lfStaticFont, &ncMetrics.lfMessageFont, FIELD_OFFSET(LOGFONTW, lfFaceName)) &&
!lstrcmpW(lfStaticFont.lfFaceName, ncMetrics.lfMessageFont.lfFaceName),

View file

@ -1736,7 +1736,7 @@ static void test_espassword(void)
hwEdit = create_editcontrol(ES_PASSWORD, 0);
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 */
r = SendMessage(hwEdit , WM_SETTEXT, 0, (LPARAM) password);
ok(r == TRUE, "Expected: %d, got: %d\n", TRUE, r);
@ -1840,7 +1840,7 @@ static void test_enter(void)
/* multiline */
hwEdit = create_editcontrol(ES_MULTILINE, 0);
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 */
r = SendMessage(hwEdit , WM_SETTEXT, 0, (LPARAM) "");
@ -1880,7 +1880,7 @@ static void test_enter(void)
/* single line with ES_WANTRETURN */
hwEdit = create_editcontrol(ES_WANTRETURN, 0);
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 */
r = SendMessage(hwEdit , WM_SETTEXT, 0, (LPARAM) "");
@ -1907,7 +1907,7 @@ static void test_tab(void)
/* multiline */
hwEdit = create_editcontrol(ES_MULTILINE, 0);
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 */
r = SendMessage(hwEdit , WM_SETTEXT, 0, (LPARAM) "");
@ -1950,57 +1950,57 @@ static void test_edit_dialog(void)
int r;
/* 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);
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);
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);
/* 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);
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);
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);
/* 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);
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);
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);
/* 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);
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);
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);
/* 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);
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);
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);
/* 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);
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);
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);
/* 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);
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);
}
@ -2009,13 +2009,13 @@ static void test_multi_edit_dialog(void)
int r;
/* 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);
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);
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);
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);
}
@ -2024,27 +2024,27 @@ static void test_wantreturn_edit_dialog(void)
int r;
/* 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);
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);
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);
/* 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);
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);
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);
/* 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);
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);
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);
}
@ -2053,51 +2053,51 @@ static void test_singleline_wantreturn_edit_dialog(void)
int r;
/* 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);
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);
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);
/* 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);
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);
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);
/* 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);
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);
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);
/* 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);
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);
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);
/* 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);
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);
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);
/* 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);
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);
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);
}

View file

@ -5,7 +5,8 @@
* Unit tests for data structure packing
*/
//#define WINVER 0x0501
#undef WINVER
#define WINVER 0x0600
//#define _WIN32_IE 0x0501
//#define _WIN32_WINNT 0x0501
@ -1562,7 +1563,7 @@ static void test_pack_LPNONCLIENTMETRICSA(void)
/* LPNONCLIENTMETRICSA */
TEST_TYPE_SIZE (LPNONCLIENTMETRICSA, 8)
TEST_TYPE_ALIGN (LPNONCLIENTMETRICSA, 8)
TEST_TARGET_SIZE (LPNONCLIENTMETRICSA, 340)
TEST_TARGET_SIZE (LPNONCLIENTMETRICSA, 344)
TEST_TARGET_ALIGN(LPNONCLIENTMETRICSA, 4)
}
@ -1571,7 +1572,7 @@ static void test_pack_LPNONCLIENTMETRICSW(void)
/* LPNONCLIENTMETRICSW */
TEST_TYPE_SIZE (LPNONCLIENTMETRICSW, 8)
TEST_TYPE_ALIGN (LPNONCLIENTMETRICSW, 8)
TEST_TARGET_SIZE (LPNONCLIENTMETRICSW, 500)
TEST_TARGET_SIZE (LPNONCLIENTMETRICSW, 504)
TEST_TARGET_ALIGN(LPNONCLIENTMETRICSW, 4)
}
@ -2390,7 +2391,7 @@ static void test_pack_NMHDR(void)
static void test_pack_NONCLIENTMETRICSA(void)
{
/* NONCLIENTMETRICSA */
TEST_TYPE_SIZE (NONCLIENTMETRICSA, 340)
TEST_TYPE_SIZE (NONCLIENTMETRICSA, 344)
TEST_TYPE_ALIGN (NONCLIENTMETRICSA, 4)
TEST_FIELD_SIZE (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_ALIGN (NONCLIENTMETRICSA, lfMessageFont, 4)
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)
{
/* NONCLIENTMETRICSW */
TEST_TYPE_SIZE (NONCLIENTMETRICSW, 500)
TEST_TYPE_SIZE (NONCLIENTMETRICSW, 504)
TEST_TYPE_ALIGN (NONCLIENTMETRICSW, 4)
TEST_FIELD_SIZE (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_ALIGN (NONCLIENTMETRICSW, lfMessageFont, 4)
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)
@ -2870,7 +2877,7 @@ static void test_pack_PNONCLIENTMETRICSA(void)
/* PNONCLIENTMETRICSA */
TEST_TYPE_SIZE (PNONCLIENTMETRICSA, 8)
TEST_TYPE_ALIGN (PNONCLIENTMETRICSA, 8)
TEST_TARGET_SIZE (PNONCLIENTMETRICSA, 340)
TEST_TARGET_SIZE (PNONCLIENTMETRICSA, 344)
TEST_TARGET_ALIGN(PNONCLIENTMETRICSA, 4)
}
@ -2879,7 +2886,7 @@ static void test_pack_PNONCLIENTMETRICSW(void)
/* PNONCLIENTMETRICSW */
TEST_TYPE_SIZE (PNONCLIENTMETRICSW, 8)
TEST_TYPE_ALIGN (PNONCLIENTMETRICSW, 8)
TEST_TARGET_SIZE (PNONCLIENTMETRICSW, 500)
TEST_TARGET_SIZE (PNONCLIENTMETRICSW, 504)
TEST_TARGET_ALIGN(PNONCLIENTMETRICSW, 4)
}
@ -5060,7 +5067,7 @@ static void test_pack_LPNONCLIENTMETRICSA(void)
/* LPNONCLIENTMETRICSA */
TEST_TYPE_SIZE (LPNONCLIENTMETRICSA, 4)
TEST_TYPE_ALIGN (LPNONCLIENTMETRICSA, 4)
TEST_TARGET_SIZE (LPNONCLIENTMETRICSA, 340)
TEST_TARGET_SIZE (LPNONCLIENTMETRICSA, 344)
TEST_TARGET_ALIGN(LPNONCLIENTMETRICSA, 4)
}
@ -5069,7 +5076,7 @@ static void test_pack_LPNONCLIENTMETRICSW(void)
/* LPNONCLIENTMETRICSW */
TEST_TYPE_SIZE (LPNONCLIENTMETRICSW, 4)
TEST_TYPE_ALIGN (LPNONCLIENTMETRICSW, 4)
TEST_TARGET_SIZE (LPNONCLIENTMETRICSW, 500)
TEST_TARGET_SIZE (LPNONCLIENTMETRICSW, 504)
TEST_TARGET_ALIGN(LPNONCLIENTMETRICSW, 4)
}
@ -5888,7 +5895,7 @@ static void test_pack_NMHDR(void)
static void test_pack_NONCLIENTMETRICSA(void)
{
/* NONCLIENTMETRICSA */
TEST_TYPE_SIZE (NONCLIENTMETRICSA, 340)
TEST_TYPE_SIZE (NONCLIENTMETRICSA, 344)
TEST_TYPE_ALIGN (NONCLIENTMETRICSA, 4)
TEST_FIELD_SIZE (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_ALIGN (NONCLIENTMETRICSA, lfMessageFont, 4)
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)
{
/* NONCLIENTMETRICSW */
TEST_TYPE_SIZE (NONCLIENTMETRICSW, 500)
TEST_TYPE_SIZE (NONCLIENTMETRICSW, 504)
TEST_TYPE_ALIGN (NONCLIENTMETRICSW, 4)
TEST_FIELD_SIZE (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_ALIGN (NONCLIENTMETRICSW, lfMessageFont, 4)
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)
@ -6368,7 +6381,7 @@ static void test_pack_PNONCLIENTMETRICSA(void)
/* PNONCLIENTMETRICSA */
TEST_TYPE_SIZE (PNONCLIENTMETRICSA, 4)
TEST_TYPE_ALIGN (PNONCLIENTMETRICSA, 4)
TEST_TARGET_SIZE (PNONCLIENTMETRICSA, 340)
TEST_TARGET_SIZE (PNONCLIENTMETRICSA, 344)
TEST_TARGET_ALIGN(PNONCLIENTMETRICSA, 4)
}
@ -6377,7 +6390,7 @@ static void test_pack_PNONCLIENTMETRICSW(void)
/* PNONCLIENTMETRICSW */
TEST_TYPE_SIZE (PNONCLIENTMETRICSW, 4)
TEST_TYPE_ALIGN (PNONCLIENTMETRICSW, 4)
TEST_TARGET_SIZE (PNONCLIENTMETRICSW, 500)
TEST_TARGET_SIZE (PNONCLIENTMETRICSW, 504)
TEST_TARGET_ALIGN(PNONCLIENTMETRICSW, 4)
}

View file

@ -1540,7 +1540,7 @@ static void test_key_map(void)
static void test_ToUnicode(void)
{
WCHAR wStr[2];
WCHAR wStr[4];
BYTE state[256];
const BYTE SC_RETURN = 0x1c, SC_TAB = 0x0f;
const BYTE HIGHEST_BIT = 0x80;
@ -1548,8 +1548,9 @@ static void test_ToUnicode(void)
for(i=0; i<256; i++)
state[i]=0;
wStr[1] = 0xAA;
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)
{
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);
if(ret == 1)
{
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_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
static DWORD WINAPI timer_thread_proc(LPVOID x)
@ -8161,7 +8155,6 @@ static void test_timers(void)
{
struct timer_info info;
DWORD id;
MSG msg;
info.hWnd = CreateWindow ("TestWindowClass", NULL,
WS_OVERLAPPEDWINDOW ,
@ -8184,26 +8177,6 @@ static void test_timers(void)
ok( KillTimer(info.hWnd, TIMER_ID), "KillTimer failed\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;
@ -9516,8 +9489,8 @@ static DWORD CALLBACK send_msg_thread_2(void *param)
case WAIT_OBJECT_0 + EV_SENDMSG:
trace("thread: sending message\n");
ok( SendNotifyMessageA(info->hwnd, WM_USER, 0, 0),
"SendNotifyMessageA failed error %u\n", GetLastError());
ret = SendNotifyMessageA(info->hwnd, WM_USER, 0, 0);
ok(ret, "SendNotifyMessageA failed error %u\n", GetLastError());
SetEvent(info->hevent[EV_ACK]);
break;
@ -11236,7 +11209,7 @@ static void test_dialog_messages(void)
cls.lpszClassName = "MyDialogClass";
cls.hInstance = GetModuleHandle(0);
/* 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);
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);
}
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)
{
HWND hwnd;
@ -13024,6 +13043,7 @@ static void test_keyflags(void)
test_window = CreateWindowEx(0, "TestWindowClass", NULL, WS_OVERLAPPEDWINDOW | WS_VISIBLE,
100, 100, 200, 200, 0, 0, 0, NULL);
flush_events();
flush_sequence();
/* keyup without a keydown */
@ -13470,6 +13490,234 @@ end:
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)
{
char **test_argv;
@ -13533,6 +13781,7 @@ START_TEST(msg)
hEvent_hook = 0;
#endif
test_SetFocus();
test_SetParent();
test_PostMessage();
test_ShowWindow();
@ -13572,6 +13821,7 @@ START_TEST(msg)
test_SetWindowRgn();
test_sys_menu();
test_dialog_messages();
test_EndDialog();
test_nullCallback();
test_dbcs_wm_char();
test_menu_messages();

View file

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

View file

@ -45,6 +45,16 @@ STRINGTABLE
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
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Test dialog"
@ -89,6 +99,14 @@ FONT 8, "MS Shell Dlg"
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
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"

View file

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

View file

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

View file

@ -25,6 +25,8 @@
#undef _WIN32_WINNT
#define _WIN32_WINNT 0x0600 /* For SPI_GETMOUSEHOVERWIDTH and more */
//#define _WIN32_IE 0x0700
#undef WINVER
#define WINVER 0x0600 /* For COLOR_MENUBAR, NONCLIENTMETRICS with padding */
#include "wine/test.h"
#include "windef.h"
@ -682,7 +684,7 @@ static BOOL test_setborder(UINT curr_val, int usesetborder, int dpi)
INT frame;
NONCLIENTMETRICSA ncm;
ncm.cbSize = sizeof( ncm);
ncm.cbSize = FIELD_OFFSET(NONCLIENTMETRICS, iPaddedBorderWidth);
rc=SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0);
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError());
if( usesetborder) {
@ -727,11 +729,11 @@ static void test_SPI_SETBORDER( void ) /* 6 */
{
BOOL rc;
UINT old_border;
NONCLIENTMETRICSA ncmsave;
NONCLIENTMETRICS ncmsave;
INT CaptionWidth,
PaddedBorderWidth;
ncmsave.cbSize = sizeof( ncmsave);
ncmsave.cbSize = FIELD_OFFSET(NONCLIENTMETRICS, iPaddedBorderWidth);
rc=SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &ncmsave, 0);
if( !rc) {
win_skip("SPI_GETNONCLIENTMETRICS is not available\n");
@ -1415,10 +1417,10 @@ static void test_SPI_SETNONCLIENTMETRICS( void ) /* 44 */
NONCLIENTMETRICSA Ncmcur;
NONCLIENTMETRICSA Ncmstart;
Ncmorig.cbSize = sizeof(NONCLIENTMETRICSA);
Ncmnew.cbSize = sizeof(NONCLIENTMETRICSA);
Ncmcur.cbSize = sizeof(NONCLIENTMETRICSA);
Ncmstart.cbSize = sizeof(NONCLIENTMETRICSA);
Ncmorig.cbSize = FIELD_OFFSET(NONCLIENTMETRICSA, iPaddedBorderWidth);
Ncmnew.cbSize = FIELD_OFFSET(NONCLIENTMETRICSA, iPaddedBorderWidth);
Ncmcur.cbSize = FIELD_OFFSET(NONCLIENTMETRICSA, iPaddedBorderWidth);
Ncmstart.cbSize = FIELD_OFFSET(NONCLIENTMETRICSA, iPaddedBorderWidth);
trace("testing SPI_{GET,SET}NONCLIENTMETRICS\n");
change_counter = 0;
@ -2574,8 +2576,28 @@ static void test_GetSystemMetrics( void)
NONCLIENTMETRICS ncm;
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);
ncm.cbSize = sizeof( ncm);
ncm.cbSize = FIELD_OFFSET(NONCLIENTMETRICS, iPaddedBorderWidth);
SystemParametersInfo( SPI_GETMINIMIZEDMETRICS, 0, &minim, 0);
rc = SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0);
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)
{
HWND child, child2;
HWND child, child2, ret;
WNDPROC old_wnd_proc;
/* 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);
todo_wine
ok( GetFocus() == child, "Focus should be on child %p, not %p\n", child, GetFocus() );
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( 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((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));
ok(lpss->styleNew == lpcs->style,
@ -3673,6 +3696,7 @@ static void register_style_check_class(void)
};
atomStyleCheckClass = RegisterClass(&wc);
assert(atomStyleCheckClass);
}
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);
dwActualExStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
ok((dwActualStyle == dwStyleOut) && (dwActualExStyle == dwExStyleOut),
"Style (0x%08x) should really be 0x%08x and/or Ex style (0x%08x) should really be 0x%08x\n",
dwActualStyle, dwStyleOut, dwActualExStyle, dwExStyleOut);
ok(dwActualStyle == dwStyleOut, "expected style %#x, got %#x\n", dwStyleOut, dwActualStyle);
ok(dwActualExStyle == dwExStyleOut, "expected ex_style %#x, got %#x\n", dwExStyleOut, dwActualExStyle);
/* try setting the styles explicitly */
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 );
dwActualStyle = GetWindowLong(hwnd, GWL_STYLE);
dwActualExStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
/* 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;
/* 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;
else if (dwStyleIn & (WS_CHILD | WS_POPUP))
dwExStyleOut = dwExStyleIn & ~WS_EX_WINDOWEDGE;
else
dwExStyleOut = dwExStyleIn;
ok((dwActualStyle == dwStyleOut) && (dwActualExStyle == dwExStyleOut),
"%08x/%08x: Style (0x%08x) should really be 0x%08x and/or Ex style (0x%08x) should really be 0x%08x\n",
dwStyleIn, dwExStyleIn, dwActualStyle, dwStyleOut, dwActualExStyle, dwExStyleOut);
dwExStyleOut = dwExStyleIn & ~WS_EX_WINDOWEDGE;
ok(dwActualStyle == dwStyleOut, "expected style %#x, got %#x\n", dwStyleOut, dwActualStyle);
/* FIXME: Remove the condition below once Wine is fixed */
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);
if (hwndParent) DestroyWindow(hwndParent);
@ -3733,14 +3771,36 @@ static void test_window_styles(void)
register_style_check_class();
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_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(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, 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_CHILD, WS_EX_DLGMODALFRAME|WS_EX_STATICEDGE, WS_CHILD, WS_EX_STATICEDGE|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_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(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)
{
HDC hdc;
@ -5094,20 +5323,20 @@ static void test_CreateWindow(void)
ok( !pGetProcessDefaultLayout( NULL ), "GetProcessDefaultLayout succeeded\n" );
ok( GetLastError() == ERROR_NOACCESS, "wrong error %u\n", GetLastError() );
SetLastError( 0xdeadbeef );
ok( pGetProcessDefaultLayout( &layout ),
"GetProcessDefaultLayout failed err %u\n", GetLastError ());
res = pGetProcessDefaultLayout( &layout );
ok( res, "GetProcessDefaultLayout failed err %u\n", GetLastError ());
ok( layout == 0, "GetProcessDefaultLayout wrong layout %x\n", layout );
SetLastError( 0xdeadbeef );
ok( pSetProcessDefaultLayout( 7 ),
"SetProcessDefaultLayout failed err %u\n", GetLastError ());
ok( pGetProcessDefaultLayout( &layout ),
"GetProcessDefaultLayout failed err %u\n", GetLastError ());
res = pSetProcessDefaultLayout( 7 );
ok( res, "SetProcessDefaultLayout failed err %u\n", GetLastError ());
res = pGetProcessDefaultLayout( &layout );
ok( res, "GetProcessDefaultLayout failed err %u\n", GetLastError ());
ok( layout == 7, "GetProcessDefaultLayout wrong layout %x\n", layout );
SetLastError( 0xdeadbeef );
ok( pSetProcessDefaultLayout( LAYOUT_RTL ),
"SetProcessDefaultLayout failed err %u\n", GetLastError ());
ok( pGetProcessDefaultLayout( &layout ),
"GetProcessDefaultLayout failed err %u\n", GetLastError ());
res = pSetProcessDefaultLayout( LAYOUT_RTL );
ok( res, "SetProcessDefaultLayout failed err %u\n", GetLastError ());
res = pGetProcessDefaultLayout( &layout );
ok( res, "GetProcessDefaultLayout failed err %u\n", GetLastError ());
ok( layout == LAYOUT_RTL, "GetProcessDefaultLayout wrong layout %x\n", layout );
hwnd = CreateWindowEx(WS_EX_APPWINDOW, "static", NULL, WS_POPUP,
0, 0, 100, 100, 0, 0, 0, NULL);
@ -6685,6 +6914,7 @@ START_TEST(win)
test_AdjustWindowRect();
test_window_styles();
test_dialog_styles();
test_redrawnow();
test_csparentdc();
test_SetWindowLong();