Add support for TB_GETMETRICS and TB_SETMETRICS messages

Dmitry Timoshkov dmitry at baikal.ru
Sun Mar 7 04:44:18 CST 2004


Hello,

Changelog:
    Dmitry Timoshkov <dmitry at codeweavers.com>
    Add support for TB_GETMETRICS and TB_SETMETRICS messages.

diff -u cvs/hq/wine/dlls/comctl32/toolbar.c wine/dlls/comctl32/toolbar.c
--- cvs/hq/wine/dlls/comctl32/toolbar.c	2004-03-07 17:24:46.000000000 +0800
+++ wine/dlls/comctl32/toolbar.c	2004-03-07 18:12:44.000000000 +0800
@@ -5871,6 +5871,60 @@ TOOLBAR_SysColorChange (HWND hwnd)
 }
 
 
+static LRESULT TOOLBAR_GetMetrics(HWND hwnd, LPTBMETRICS lpMetrics)
+{
+    TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr (hwnd);
+
+    if (lpMetrics->cbSize != sizeof(TBMETRICS))
+	return 0;
+
+    if (lpMetrics->dwMask & TBMF_PAD)
+    {
+	lpMetrics->cxPad = infoPtr->nButtonWidth;
+	lpMetrics->cyPad = infoPtr->nButtonHeight;
+    }
+    if (lpMetrics->dwMask & TBMF_BARPAD)
+    {
+	lpMetrics->cxBarPad = infoPtr->nWidth;
+	lpMetrics->cyBarPad = infoPtr->nHeight;
+    }
+    if (lpMetrics->dwMask & TBMF_BUTTONSPACING)
+    {
+	lpMetrics->cxButtonSpacing = infoPtr->szPadding.cx;
+	lpMetrics->cyButtonSpacing = infoPtr->szPadding.cy;
+    }
+    return 0;
+}
+
+
+static LRESULT TOOLBAR_SetMetrics(HWND hwnd, LPTBMETRICS lpMetrics)
+{
+    TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr (hwnd);
+
+    if (lpMetrics->cbSize != sizeof(TBMETRICS))
+	return 0;
+
+    if (lpMetrics->dwMask & TBMF_PAD)
+    {
+	infoPtr->nButtonWidth = lpMetrics->cxPad;
+	infoPtr->nButtonHeight = lpMetrics->cyPad;
+    }
+    if (lpMetrics->dwMask & TBMF_BARPAD)
+    {
+	infoPtr->nWidth = lpMetrics->cxBarPad;
+	infoPtr->nHeight = lpMetrics->cyBarPad;
+    }
+    if (lpMetrics->dwMask & TBMF_BUTTONSPACING)
+    {
+	infoPtr->szPadding.cx = lpMetrics->cxButtonSpacing;
+	infoPtr->szPadding.cy = lpMetrics->cyButtonSpacing;
+    }
+
+    TOOLBAR_CalcToolbar(hwnd);
+    InvalidateRect(hwnd, NULL, FALSE);
+    return 0;
+}
+
 
 static LRESULT WINAPI
 ToolbarWindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
@@ -5978,6 +6032,9 @@ ToolbarWindowProc (HWND hwnd, UINT uMsg,
 	case TB_GETMAXSIZE:
 	    return TOOLBAR_GetMaxSize (hwnd, wParam, lParam);
 
+	case TB_GETMETRICS:
+	    return TOOLBAR_GetMetrics(hwnd, (LPTBMETRICS)lParam);
+
 /*	case TB_GETOBJECT:			*/ /* 4.71 */
 
 	case TB_GETPADDING:
@@ -6116,6 +6173,9 @@ ToolbarWindowProc (HWND hwnd, UINT uMsg,
 	case TB_SETMAXTEXTROWS:
 	    return TOOLBAR_SetMaxTextRows (hwnd, wParam, lParam);
 
+	case TB_SETMETRICS:
+	    return TOOLBAR_SetMetrics(hwnd, (LPTBMETRICS)lParam);
+
 	case TB_SETPADDING:
 	    return TOOLBAR_SetPadding (hwnd, wParam, lParam);
 
diff -u cvs/hq/wine/include/commctrl.h wine/include/commctrl.h
--- cvs/hq/wine/include/commctrl.h	2004-02-18 20:48:15.000000000 +0800
+++ wine/include/commctrl.h	2004-03-07 18:12:44.000000000 +0800
@@ -1123,6 +1123,8 @@ static const WCHAR TOOLBARCLASSNAMEW[] =
 #define TB_UNKWN463              (WM_USER+99)
 #define TB_UNKWN464              (WM_USER+100)
 
+#define TB_GETMETRICS            (WM_USER+101)
+#define TB_SETMETRICS            (WM_USER+102)
 
 #define TBN_FIRST               (0U-700U)
 #define TBN_LAST                (0U-720U)
@@ -1427,6 +1429,22 @@ typedef struct
 #define TBIMHT_AFTER      0x00000001 /* TRUE = insert After iButton, otherwise before */
 #define TBIMHT_BACKGROUND 0x00000002 /* TRUE if and only if missed buttons completely */
 
+#define TBMF_PAD           0x00000001
+#define TBMF_BARPAD        0x00000002
+#define TBMF_BUTTONSPACING 0x00000004
+
+typedef struct
+{
+    UINT cbSize;
+    DWORD dwMask;
+    INT cxPad;
+    INT cyPad;
+    INT cxBarPad;
+    INT cyBarPad;
+    INT cxButtonSpacing;
+    INT cyButtonSpacing;
+} TBMETRICS, *LPTBMETRICS;
+
 HWND WINAPI
 CreateToolbar(HWND, DWORD, UINT, INT, HINSTANCE,
               UINT, LPCTBBUTTON, INT);






More information about the wine-patches mailing list