comctl32: rebar: New conformance test for CCS_NORESIZE style.
[PATCH 1/2]
Misha Koshelev
mk144210 at bcm.tmc.edu
Fri Feb 16 23:37:14 CST 2007
This patch implements a conformance test for the CCS_NORESIZE style
which is currently unimplemented in wine for rebar.
Changelog:
* comctl32: rebar: New conformance test for CCS_NORESIZE style.
-------------- next part --------------
From 2648e183b1be4b00bd50d7635c6c167dabe7ce92 Mon Sep 17 00:00:00 2001
From: Misha Koshelev <mk144210 at bcm.tmc.edu>
Date: Fri, 16 Feb 2007 23:25:19 -0600
Subject: comctl32: rebar: New conformance test for CCS_NORESIZE style.
---
dlls/comctl32/tests/rebar.c | 62 +++++++++++++++++++++++++++++++++++++++++--
1 files changed, 59 insertions(+), 3 deletions(-)
diff --git a/dlls/comctl32/tests/rebar.c b/dlls/comctl32/tests/rebar.c
index 23497ef..5276199 100644
--- a/dlls/comctl32/tests/rebar.c
+++ b/dlls/comctl32/tests/rebar.c
@@ -31,12 +31,12 @@ static HWND hRebar;
#define expect_eq(expr, value, type, format) { type ret = expr; ok((value) == ret, #expr " expected " format " got " format "\n", (value), (ret)); }
-static void rebuild_rebar(HWND *hRebar)
+static void rebuild_rebar(HWND *hRebar, DWORD dwStyle)
{
if (*hRebar)
DestroyWindow(*hRebar);
- *hRebar = CreateWindow(REBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE, 0, 0, 0, 0,
+ *hRebar = CreateWindow(REBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | dwStyle, 0, 0, 0, 0,
hMainWnd, (HMENU)17, GetModuleHandle(NULL), NULL);
SendMessageA(*hRebar, WM_SETFONT, (WPARAM)GetStockObject(SYSTEM_FONT), 0);
}
@@ -89,7 +89,7 @@ static void bandinfo_test()
CHAR szABC[] = "ABC";
CHAR szABCD[] = "ABCD";
- rebuild_rebar(&hRebar);
+ rebuild_rebar(&hRebar, 0);
rb.cbSize = sizeof(REBARBANDINFO);
rb.fMask = 0;
ok(SendMessageA(hRebar, RB_INSERTBANDA, 0, (LPARAM)&rb), "RB_INSERTBAND failed\n");
@@ -137,6 +137,61 @@ static void bandinfo_test()
DestroyWindow(hRebar);
}
+/* MSDN 672579: "CCS_NORESIZE: Prevents the control from using the default width and height when setting its
+ * initial size or a new size. Instead, the control uses the width and height specified in the request for
+ * creation or sizing." This test checks both creation and sizing dimensions. */
+#define REBAR_RESIZE_BY 20
+static void ccs_noresize_test()
+{
+ REBARBANDINFOA rb;
+ RECT rectBeforeResize, rectAfterResize;
+ CHAR szABC[] = "ABC";
+
+ rebuild_rebar(&hRebar, CCS_NORESIZE);
+
+ /* Verify creation coordinates match (0,0,0,0) */
+ ok(GetWindowRect(hRebar, &rectBeforeResize), "GetWindowRect failed %d\n", GetLastError());
+ ok(ScreenToClient(hMainWnd, (LPPOINT)&rectBeforeResize), "ScreenToClient failed\n");
+ ok(ScreenToClient(hMainWnd, (LPPOINT)&rectBeforeResize.right), "ScreenToClient failed\n");
+ todo_wine ok(rectBeforeResize.left == 0 &&
+ rectBeforeResize.top == 0 &&
+ rectBeforeResize.right == 0 &&
+ rectBeforeResize.bottom == 0,
+ "Rebar position should be (0,0)-(0,0) not (%d,%d)-(%d,%d)\n",
+ rectBeforeResize.left, rectBeforeResize.top, rectBeforeResize.right, rectBeforeResize.bottom);
+
+ /* Resize rebar, insert a text band */
+ ok(MoveWindow(hRebar, 0, 0, 200, 200, TRUE), "MoveWindow failed %d\n", GetLastError());
+ rb.cbSize = sizeof(REBARBANDINFO);
+ rb.fMask = RBBIM_TEXT;
+ rb.lpText = szABC;
+ ok(SendMessageA(hRebar, RB_INSERTBANDA, -1, (LPARAM)&rb), "RB_INSERTBAND failed\n");
+
+ /* Get window rectangle of our created rebar in screen coordinates and convert to parent window
+ * client area coordinates for MoveWindow */
+ ok(GetWindowRect(hRebar, &rectBeforeResize), "GetWindowRect failed %d\n", GetLastError());
+ ok(ScreenToClient(hMainWnd, (LPPOINT)&rectBeforeResize), "ScreenToClient failed\n");
+ ok(ScreenToClient(hMainWnd, (LPPOINT)&rectBeforeResize.right), "ScreenToClient failed\n");
+
+ /* Resize rebar to specified size. With CCS_NORESIZE flag set, should be that exact size after resize. */
+ rectBeforeResize.right += REBAR_RESIZE_BY;
+ rectBeforeResize.bottom += REBAR_RESIZE_BY;
+ ok(MoveWindow(hRebar, rectBeforeResize.left, rectBeforeResize.top,
+ rectBeforeResize.right-rectBeforeResize.left,
+ rectBeforeResize.bottom-rectBeforeResize.top, TRUE), "MoveWindow failed %d\n", GetLastError());
+
+ /* Get the new window rectangle of our rebar in screen coordinates and convert to parent window client
+ * area coordinates for comparison */
+ ok(GetWindowRect(hRebar, &rectAfterResize), "GetClientRect failed %d\n", GetLastError());
+ ok(ScreenToClient(hMainWnd, (LPPOINT)&rectAfterResize), "ScreenToClient failed\n");
+ ok(ScreenToClient(hMainWnd, (LPPOINT)&rectAfterResize.right), "ScreenToClient failed\n");
+
+ /* Rebar should be exactly the same size as we requested */
+ todo_wine ok(EqualRect(&rectBeforeResize, &rectAfterResize), "Rebar position should be (%d,%d)-(%d,%d) not (%d,%d)-(%d,%d)\n", rectBeforeResize.left, rectBeforeResize.top, rectBeforeResize.right, rectBeforeResize.bottom, rectAfterResize.left, rectAfterResize.top, rectAfterResize.right, rectAfterResize.bottom);
+
+ DestroyWindow(hRebar);
+}
+
START_TEST(rebar)
{
INITCOMMONCONTROLSEX icc;
@@ -166,6 +221,7 @@ START_TEST(rebar)
ShowWindow(hMainWnd, SW_SHOW);
bandinfo_test();
+ ccs_noresize_test();
PostQuitMessage(0);
while(GetMessageA(&msg,0,0,0)) {
TranslateMessage(&msg);
--
1.4.1
More information about the wine-patches
mailing list