toolbar: unicodification

Dimitrie O. Paun dpaun at rogers.com
Wed Mar 23 00:00:20 CST 2005


ChangeLog
    Complete unicodification of the toolbar common control.
    Move a header comment for consistency with the other controls.
    Very small alignment fixes.

Index: dlls/comctl32/toolbar.c
===================================================================
RCS file: /var/cvs/wine/dlls/comctl32/toolbar.c,v
retrieving revision 1.208
diff -u -r1.208 toolbar.c
--- dlls/comctl32/toolbar.c	28 Jan 2005 17:19:29 -0000	1.208
+++ dlls/comctl32/toolbar.c	23 Mar 2005 05:47:44 -0000
@@ -21,15 +21,6 @@
  *
  * NOTES
  *
- *  Differences between MSDN and actual native control operation:
- *   1. MSDN says: "TBSTYLE_LIST: Creates a flat toolbar with button text
- *                  to the right of the bitmap. Otherwise, this style is
- *                  identical to TBSTYLE_FLAT."
- *      As implemented by both v4.71 and v5.80 of the native COMCTL32.DLL
- *      you can create a TBSTYLE_LIST without TBSTYLE_FLAT and the result
- *      is non-flat non-transparent buttons. Therefore TBSTYLE_LIST does
- *      *not* imply TBSTYLE_FLAT as documented.  (GA 8/2001)
- *
  * This code was audited for completeness against the documented features
  * of Comctl32.dll version 6.0 on Mar. 14, 2004, by Robert Shearman.
  * 
@@ -66,6 +57,16 @@
  *     setparnt.exe, setrows.exe, toolwnd.exe.
  *   - Microsoft's controlspy examples.
  *   - Charles Petzold's 'Programming Windows': gadgets.exe
+ *
+ *  Differences between MSDN and actual native control operation:
+ *   1. MSDN says: "TBSTYLE_LIST: Creates a flat toolbar with button text
+ *                  to the right of the bitmap. Otherwise, this style is
+ *                  identical to TBSTYLE_FLAT."
+ *      As implemented by both v4.71 and v5.80 of the native COMCTL32.DLL
+ *      you can create a TBSTYLE_LIST without TBSTYLE_FLAT and the result
+ *      is non-flat non-transparent buttons. Therefore TBSTYLE_LIST does
+ *      *not* imply TBSTYLE_FLAT as documented.  (GA 8/2001)
+ *
  */
 
 #include <stdarg.h>
@@ -116,9 +117,9 @@
 
 typedef struct
 {
-    DWORD      dwStructSize;   /* size of TBBUTTON struct */
-    INT      nHeight;        /* height of the toolbar */
-    INT      nWidth;         /* width of the toolbar */
+    DWORD    dwStructSize;    /* size of TBBUTTON struct */
+    INT      nHeight;         /* height of the toolbar */
+    INT      nWidth;          /* width of the toolbar */
     RECT     client_rect;
     RECT     rcBound;         /* bounding rectangle */
     INT      nButtonHeight;
@@ -145,7 +146,7 @@
     INT      iListGap;        /* default gap between text and image for toolbar with list style */
     HFONT    hDefaultFont;
     HFONT    hFont;           /* text font */
-    HIMAGELIST himlInt;         /* image list created internally */
+    HIMAGELIST himlInt;       /* image list created internally */
     PIMLENTRY *himlDef;       /* default image list array */
     INT       cimlDef;        /* default image list array count */
     PIMLENTRY *himlHot;       /* hot image list array */
@@ -162,9 +163,9 @@
     BOOL     bDragOutSent;    /* has TBN_DRAGOUT notification been sent for this drag? */
     BOOL     bUnicode;        /* Notifications are ASCII (FALSE) or Unicode (TRUE)? */
     BOOL     bCaptured;       /* mouse captured? */
-    DWORD      dwStyle;         /* regular toolbar style */
-    DWORD      dwExStyle;       /* extended toolbar style */
-    DWORD      dwDTFlags;       /* DrawText flags */
+    DWORD      dwStyle;       /* regular toolbar style */
+    DWORD      dwExStyle;     /* extended toolbar style */
+    DWORD      dwDTFlags;     /* DrawText flags */
 
     COLORREF   clrInsertMark;   /* insert mark color */
     COLORREF   clrBtnHighlight; /* color for Flat Separator */
@@ -489,7 +490,7 @@
     newcolor = (infoPtr->clrBtnShadow == CLR_DEFAULT) ?
 	        comctl32_color.clrBtnShadow : infoPtr->clrBtnShadow;
     oldcolor = SetBkColor (hdc, newcolor);
-    ExtTextOutA (hdc, 0, 0, ETO_OPAQUE, &myrect, 0, 0, 0);
+    ExtTextOutW (hdc, 0, 0, ETO_OPAQUE, &myrect, 0, 0, 0);
 
     myrect.left = myrect.right;
     myrect.right = myrect.left + 1;
@@ -497,7 +498,7 @@
     newcolor = (infoPtr->clrBtnHighlight == CLR_DEFAULT) ?
 	        comctl32_color.clrBtnHighlight : infoPtr->clrBtnHighlight;
     SetBkColor (hdc, newcolor);
-    ExtTextOutA (hdc, 0, 0, ETO_OPAQUE, &myrect, 0, 0, 0);
+    ExtTextOutW (hdc, 0, 0, ETO_OPAQUE, &myrect, 0, 0, 0);
 
     SetBkColor (hdc, oldcolor);
 }
@@ -533,7 +534,7 @@
     newcolor = (infoPtr->clrBtnShadow == CLR_DEFAULT) ?
 	        comctl32_color.clrBtnShadow : infoPtr->clrBtnShadow;
     oldcolor = SetBkColor (hdc, newcolor);
-    ExtTextOutA (hdc, 0, 0, ETO_OPAQUE, &myrect, 0, 0, 0);
+    ExtTextOutW (hdc, 0, 0, ETO_OPAQUE, &myrect, 0, 0, 0);
 
     myrect.top = myrect.bottom;
     myrect.bottom = myrect.top + 1;
@@ -541,7 +542,7 @@
     newcolor = (infoPtr->clrBtnHighlight == CLR_DEFAULT) ?
 	        comctl32_color.clrBtnHighlight : infoPtr->clrBtnHighlight;
     SetBkColor (hdc, newcolor);
-    ExtTextOutA (hdc, 0, 0, ETO_OPAQUE, &myrect, 0, 0, 0);
+    ExtTextOutW (hdc, 0, 0, ETO_OPAQUE, &myrect, 0, 0, 0);
 
     SetBkColor (hdc, oldcolor);
 }
@@ -990,9 +991,9 @@
             COLORREF oldclr;
 
             oldclr = SetBkColor(hdc, tbcd.clrHighlightHotTrack);
-            ExtTextOutA(hdc, 0, 0, ETO_OPAQUE, &rc, NULL, 0, 0);
+            ExtTextOutW(hdc, 0, 0, ETO_OPAQUE, &rc, NULL, 0, 0);
             if (hasDropDownArrow)
-                ExtTextOutA(hdc, 0, 0, ETO_OPAQUE, &rcArrow, NULL, 0, 0);
+                ExtTextOutW(hdc, 0, 0, ETO_OPAQUE, &rcArrow, NULL, 0, 0);
             SetBkColor(hdc, oldclr);
         }
     }
@@ -2531,7 +2532,7 @@
        /* copy the bitmap before adding it so that the user's bitmap
         * doesn't get modified.
         */
-       GetObjectA ((HBITMAP)lpAddBmp->nID, sizeof(BITMAP), (LPVOID)&bmp);
+       GetObjectW ((HBITMAP)lpAddBmp->nID, sizeof(BITMAP), (LPVOID)&bmp);
 
        hdcImage  = CreateCompatibleDC(0);
        hdcBitmap = CreateCompatibleDC(0);
@@ -2559,48 +2560,48 @@
 	switch (lpAddBmp->nID)
     {
 	    case IDB_STD_SMALL_COLOR:
-		hbmLoad = LoadBitmapA (COMCTL32_hModule,
-				       MAKEINTRESOURCEA(IDB_STD_SMALL));
+		hbmLoad = LoadBitmapW (COMCTL32_hModule,
+				       MAKEINTRESOURCEW(IDB_STD_SMALL));
 		nIndex = ImageList_AddMasked (himlDef,
 					      hbmLoad, comctl32_color.clrBtnFace);
 		DeleteObject (hbmLoad);
 		break;
 
 	    case IDB_STD_LARGE_COLOR:
-		hbmLoad = LoadBitmapA (COMCTL32_hModule,
-				       MAKEINTRESOURCEA(IDB_STD_LARGE));
+		hbmLoad = LoadBitmapW (COMCTL32_hModule,
+				       MAKEINTRESOURCEW(IDB_STD_LARGE));
 		nIndex = ImageList_AddMasked (himlDef,
 					      hbmLoad, comctl32_color.clrBtnFace);
 		DeleteObject (hbmLoad);
 		break;
 
 	    case IDB_VIEW_SMALL_COLOR:
-		hbmLoad = LoadBitmapA (COMCTL32_hModule,
-				       MAKEINTRESOURCEA(IDB_VIEW_SMALL));
+		hbmLoad = LoadBitmapW (COMCTL32_hModule,
+				       MAKEINTRESOURCEW(IDB_VIEW_SMALL));
 		nIndex = ImageList_AddMasked (himlDef,
 					      hbmLoad, comctl32_color.clrBtnFace);
 		DeleteObject (hbmLoad);
 		break;
 
 	    case IDB_VIEW_LARGE_COLOR:
-		hbmLoad = LoadBitmapA (COMCTL32_hModule,
-				       MAKEINTRESOURCEA(IDB_VIEW_LARGE));
+		hbmLoad = LoadBitmapW (COMCTL32_hModule,
+				       MAKEINTRESOURCEW(IDB_VIEW_LARGE));
 		nIndex = ImageList_AddMasked (himlDef,
 					      hbmLoad, comctl32_color.clrBtnFace);
 		DeleteObject (hbmLoad);
 		break;
 
 	    case IDB_HIST_SMALL_COLOR:
-		hbmLoad = LoadBitmapA (COMCTL32_hModule,
-				       MAKEINTRESOURCEA(IDB_HIST_SMALL));
+		hbmLoad = LoadBitmapW (COMCTL32_hModule,
+				       MAKEINTRESOURCEW(IDB_HIST_SMALL));
 		nIndex = ImageList_AddMasked (himlDef,
 					      hbmLoad, comctl32_color.clrBtnFace);
 		DeleteObject (hbmLoad);
 		break;
 
 	    case IDB_HIST_LARGE_COLOR:
-		hbmLoad = LoadBitmapA (COMCTL32_hModule,
-				       MAKEINTRESOURCEA(IDB_HIST_LARGE));
+		hbmLoad = LoadBitmapW (COMCTL32_hModule,
+				       MAKEINTRESOURCEW(IDB_HIST_LARGE));
 		nIndex = ImageList_AddMasked (himlDef,
 					      hbmLoad, comctl32_color.clrBtnFace);
 		DeleteObject (hbmLoad);
@@ -2614,7 +2615,7 @@
     }
     else
     {
-	hbmLoad = LoadBitmapA (lpAddBmp->hInst, (LPSTR)lpAddBmp->nID);
+	hbmLoad = LoadBitmapW (lpAddBmp->hInst, (LPWSTR)lpAddBmp->nID);
 	nIndex = ImageList_AddMasked (himlDef, hbmLoad, comctl32_color.clrBtnFace);
 	DeleteObject (hbmLoad);
     }
@@ -2807,8 +2808,7 @@
 	INT len;
 	TRACE("adding string from resource!\n");
 
-	len = LoadStringA ((HINSTANCE)wParam, (UINT)lParam,
-			     szString, 256);
+	len = LoadStringA ((HINSTANCE)wParam, (UINT)lParam, szString, sizeof(szString));
 
 	TRACE("len=%d \"%s\"\n", len, szString);
 	nIndex = infoPtr->nNumStrings;
@@ -4331,7 +4331,7 @@
        /* copy the bitmap before adding it so that the user's bitmap
         * doesn't get modified.
         */
-       GetObjectA (hBitmap, sizeof(BITMAP), (LPVOID)&bmp);
+       GetObjectW (hBitmap, sizeof(BITMAP), (LPVOID)&bmp);
 
        hdcImage  = CreateCompatibleDC(0);
        hdcBitmap = CreateCompatibleDC(0);
@@ -4542,6 +4542,7 @@
     SaveW.pszValueName = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
     MultiByteToWideChar(CP_ACP, 0, lpSave->pszValueName, -1, (LPWSTR)SaveW.pszValueName, len);
 
+    /* FIXME: shoudn't we free the HeapAlloc()ed memory? */
     return TOOLBAR_SaveRestoreW(hwnd, wParam, &SaveW);
 }
 
@@ -5442,7 +5443,7 @@
 {
     TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr (hwnd);
     DWORD dwStyle = GetWindowLongW (hwnd, GWL_STYLE);
-    LOGFONTA logFont;
+    LOGFONTW logFont;
 
     TRACE("hwnd = %p\n", hwnd);
 
@@ -5483,13 +5484,13 @@
     infoPtr->bUnicode = infoPtr->hwndNotify && 
         (NFR_UNICODE == SendMessageW(hwnd, WM_NOTIFYFORMAT, (WPARAM)hwnd, (LPARAM)NF_REQUERY));
 
-    SystemParametersInfoA (SPI_GETICONTITLELOGFONT, 0, &logFont, 0);
-    infoPtr->hFont = infoPtr->hDefaultFont = CreateFontIndirectA (&logFont);
+    SystemParametersInfoW (SPI_GETICONTITLELOGFONT, 0, &logFont, 0);
+    infoPtr->hFont = infoPtr->hDefaultFont = CreateFontIndirectW (&logFont);
 
     if (dwStyle & TBSTYLE_TOOLTIPS) {
 	/* Create tooltip control */
 	infoPtr->hwndToolTip =
-	    CreateWindowExA (0, TOOLTIPS_CLASSA, NULL, 0,
+	    CreateWindowExW (0, TOOLTIPS_CLASSW, NULL, 0,
 			       CW_USEDEFAULT, CW_USEDEFAULT,
 			       CW_USEDEFAULT, CW_USEDEFAULT,
 			       hwnd, 0, 0, 0);
@@ -5653,7 +5654,7 @@
 
     if (nHit >= 0)
         TOOLBAR_LButtonDown (hwnd, wParam, lParam);
-    else if (GetWindowLongA (hwnd, GWL_STYLE) & CCS_ADJUSTABLE)
+    else if (GetWindowLongW (hwnd, GWL_STYLE) & CCS_ADJUSTABLE)
 	TOOLBAR_Customize (hwnd);
 
     return 0;
@@ -6187,22 +6188,22 @@
     /* native control does:
      *    Get a lot of colors and brushes
      *    WM_NOTIFYFORMAT
-     *    SystemParametersInfoA(0x1f, 0x3c, adr1, 0)
-     *    CreateFontIndirectA(adr1)
+     *    SystemParametersInfoW(0x1f, 0x3c, adr1, 0)
+     *    CreateFontIndirectW(adr1)
      *    CreateBitmap(0x27, 0x24, 1, 1, 0)
      *    hdc = GetDC(toolbar)
      *    GetSystemMetrics(0x48)
-     *    fnt2=CreateFontA(0xe, 0, 0, 0, 0x190, 0, 0, 0, 0, 2,
+     *    fnt2=CreateFontW(0xe, 0, 0, 0, 0x190, 0, 0, 0, 0, 2,
      *                     0, 0, 0, 0, "MARLETT")
      *    oldfnt = SelectObject(hdc, fnt2)
-     *    GetCharWidthA(hdc, 0x36, 0x36, adr2)
-     *    GetTextMetricsA(hdc, adr3)
+     *    GetCharWidthW(hdc, 0x36, 0x36, adr2)
+     *    GetTextMetricsW(hdc, adr3)
      *    SelectObject(hdc, oldfnt)
      *    DeleteObject(fnt2)
      *    ReleaseDC(hdc)
      *    InvalidateRect(toolbar, 0, 1)
-     *    SetWindowLongA(toolbar, 0, addr)
-     *    SetWindowLongA(toolbar, -16, xxx)  **sometimes**
+     *    SetWindowLongW(toolbar, 0, addr)
+     *    SetWindowLongW(toolbar, -16, xxx)  **sometimes**
      *                                          WM_STYLECHANGING
      *                             CallWinEx   old         new
      *                       ie 1  0x56000a4c  0x46000a4c  0x56008a4d

-- 
Dimi.



More information about the wine-patches mailing list