Nikolay Sivov : comctl32: When created with TCS_VERTICAL, TCS_MULTILINE is set automatically.

Alexandre Julliard julliard at winehq.org
Thu May 17 13:45:59 CDT 2012


Module: wine
Branch: master
Commit: 21727c416fa4fafc5a7351e95ef4fe369445b9a3
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=21727c416fa4fafc5a7351e95ef4fe369445b9a3

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Thu May 17 10:53:45 2012 +0400

comctl32: When created with TCS_VERTICAL, TCS_MULTILINE is set automatically.

---

 dlls/comctl32/tab.c       |   12 +++++++-----
 dlls/comctl32/tests/tab.c |   31 +++++++++++++++++++++++++++++++
 2 files changed, 38 insertions(+), 5 deletions(-)

diff --git a/dlls/comctl32/tab.c b/dlls/comctl32/tab.c
index f00ecd3..43d8cdf 100644
--- a/dlls/comctl32/tab.c
+++ b/dlls/comctl32/tab.c
@@ -3020,7 +3020,7 @@ static LRESULT TAB_Create (HWND hwnd, LPARAM lParam)
   TEXTMETRICW fontMetrics;
   HDC hdc;
   HFONT hOldFont;
-  DWORD dwStyle;
+  DWORD style;
 
   infoPtr = Alloc (sizeof(TAB_INFO));
 
@@ -3054,11 +3054,13 @@ static LRESULT TAB_Create (HWND hwnd, LPARAM lParam)
   /* The tab control always has the WS_CLIPSIBLINGS style. Even
      if you don't specify it in CreateWindow. This is necessary in
      order for paint to work correctly. This follows windows behaviour. */
-  dwStyle = GetWindowLongW(hwnd, GWL_STYLE);
-  SetWindowLongW(hwnd, GWL_STYLE, dwStyle|WS_CLIPSIBLINGS);
+  style = GetWindowLongW(hwnd, GWL_STYLE);
+  if (style & TCS_VERTICAL) style |= TCS_MULTILINE;
+  style |= WS_CLIPSIBLINGS;
+  SetWindowLongW(hwnd, GWL_STYLE, style);
 
-  infoPtr->dwStyle = dwStyle | WS_CLIPSIBLINGS;
-  infoPtr->exStyle = (dwStyle & TCS_FLATBUTTONS) ? TCS_EX_FLATSEPARATORS : 0;
+  infoPtr->dwStyle = style;
+  infoPtr->exStyle = (style & TCS_FLATBUTTONS) ? TCS_EX_FLATSEPARATORS : 0;
 
   if (infoPtr->dwStyle & TCS_TOOLTIPS) {
     /* Create tooltip control */
diff --git a/dlls/comctl32/tests/tab.c b/dlls/comctl32/tests/tab.c
index 36179dc..0166778 100644
--- a/dlls/comctl32/tests/tab.c
+++ b/dlls/comctl32/tests/tab.c
@@ -1428,6 +1428,36 @@ static void test_WM_CONTEXTMENU(void)
     DestroyWindow(hTab);
 }
 
+struct tabcreate_style {
+    DWORD style;
+    DWORD act_style;
+};
+
+static const struct tabcreate_style create_styles[] =
+{
+    { WS_CHILD|TCS_BOTTOM|TCS_VERTICAL, WS_CHILD|WS_CLIPSIBLINGS|TCS_BOTTOM|TCS_VERTICAL|TCS_MULTILINE },
+    { WS_CHILD|TCS_VERTICAL,            WS_CHILD|WS_CLIPSIBLINGS|TCS_VERTICAL|TCS_MULTILINE },
+    { 0 }
+};
+
+static void test_create(void)
+{
+    const struct tabcreate_style *ptr = create_styles;
+    DWORD style;
+    HWND hTab;
+
+    while (ptr->style)
+    {
+        hTab = CreateWindowA(WC_TABCONTROLA, "TestTab", ptr->style,
+            10, 10, 300, 100, parent_wnd, NULL, NULL, 0);
+        style = GetWindowLongA(hTab, GWL_STYLE);
+        ok(style == ptr->act_style, "expected style 0x%08x, got style 0x%08x\n", ptr->act_style, style);
+
+        DestroyWindow(hTab);
+        ptr++;
+    }
+}
+
 START_TEST(tab)
 {
     LOGFONTA logfont;
@@ -1465,6 +1495,7 @@ START_TEST(tab)
     test_TCM_SETITEMEXTRA();
     test_TCS_OWNERDRAWFIXED();
     test_WM_CONTEXTMENU();
+    test_create();
 
     DestroyWindow(parent_wnd);
 }




More information about the wine-cvs mailing list