From: Rémi Bernon <rbernon@codeweavers.com> --- dlls/user32/static.c | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/dlls/user32/static.c b/dlls/user32/static.c index 7cb138c0fd3..aeb8ecf91f4 100644 --- a/dlls/user32/static.c +++ b/dlls/user32/static.c @@ -78,6 +78,25 @@ static const pfPaint staticPaintFunc[SS_TYPEMASK+1] = STATIC_PaintEtchedfn, /* SS_ETCHEDFRAME */ }; +static HFONT get_control_font( HWND hwnd ) +{ + return (HFONT)NtUserGetPrivateData( hwnd, HFONT_GWL_OFFSET, sizeof(HFONT) ); +} + +static HFONT set_control_font( HWND hwnd, HFONT font ) +{ + return (HFONT)NtUserSetPrivateData( hwnd, HFONT_GWL_OFFSET, sizeof(font), (LONG_PTR)font ); +} + +static HANDLE get_control_icon( HWND hwnd ) +{ + return (HFONT)NtUserGetPrivateData( hwnd, HICON_GWL_OFFSET, sizeof(HICON) ); +} + +static HANDLE set_control_icon( HWND hwnd, HANDLE icon ) +{ + return (HANDLE)NtUserSetPrivateData( hwnd, HICON_GWL_OFFSET, sizeof(icon), (LONG_PTR)icon ); +} /*********************************************************************** * STATIC_SetIcon @@ -94,7 +113,7 @@ static HICON STATIC_SetIcon( HWND hwnd, HICON hicon, DWORD style ) WARN("hicon != 0, but invalid\n"); return 0; } - prevIcon = (HICON)NtUserSetPrivateData( hwnd, HICON_GWL_OFFSET, sizeof(hicon), (LONG_PTR)hicon ); + prevIcon = set_control_icon( hwnd, hicon ); if (hicon && !(style & SS_CENTERIMAGE) && !(style & SS_REALSIZECONTROL)) { /* Windows currently doesn't implement SS_RIGHTJUST */ @@ -127,7 +146,7 @@ static HBITMAP STATIC_SetBitmap( HWND hwnd, HBITMAP hBitmap, DWORD style ) WARN("hBitmap != 0, but it's not a bitmap\n"); return 0; } - hOldBitmap = (HBITMAP)NtUserSetPrivateData( hwnd, HICON_GWL_OFFSET, sizeof(hBitmap), (LONG_PTR)hBitmap ); + hOldBitmap = set_control_icon( hwnd, hBitmap ); if (hBitmap && !(style & SS_CENTERIMAGE) && !(style & SS_REALSIZECONTROL)) { BITMAP bm; @@ -162,8 +181,7 @@ static HENHMETAFILE STATIC_SetEnhMetaFile( HWND hwnd, HENHMETAFILE hEnhMetaFile, WARN("hEnhMetaFile != 0, but it's not an enhanced metafile\n"); return 0; } - return (HENHMETAFILE)NtUserSetPrivateData( hwnd, HICON_GWL_OFFSET, sizeof(hEnhMetaFile), - (LONG_PTR)hEnhMetaFile ); + return set_control_icon( hwnd, hEnhMetaFile ); } /*********************************************************************** @@ -189,7 +207,7 @@ static HANDLE STATIC_GetImage( HWND hwnd, WPARAM wParam, DWORD style ) default: return NULL; } - return (HANDLE)NtUserGetPrivateData( hwnd, HICON_GWL_OFFSET, sizeof(HANDLE) ); + return get_control_icon( hwnd ); } /*********************************************************************** @@ -486,7 +504,7 @@ LRESULT StaticWndProc_common( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam case WM_SETFONT: if (hasTextStyle( full_style )) { - NtUserSetPrivateData( hwnd, HFONT_GWL_OFFSET, sizeof(HFONT), wParam ); + set_control_font( hwnd, (HFONT)wParam ); if (LOWORD(lParam)) NtUserRedrawWindow( hwnd, NULL, 0, RDW_INVALIDATE | RDW_ERASE | RDW_UPDATENOW | RDW_ALLCHILDREN ); @@ -494,7 +512,7 @@ LRESULT StaticWndProc_common( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam break; case WM_GETFONT: - return NtUserGetPrivateData( hwnd, HFONT_GWL_OFFSET, sizeof(HFONT) ); + return (LRESULT)get_control_font( hwnd ); case WM_NCHITTEST: if (full_style & SS_NOTIFY) @@ -576,7 +594,7 @@ static void STATIC_PaintOwnerDrawfn( HWND hwnd, HDC hdc, HBRUSH hbrush, DWORD st dis.itemData = 0; GetClientRect( hwnd, &dis.rcItem ); - font = (HFONT)NtUserGetPrivateData( hwnd, HFONT_GWL_OFFSET, sizeof(HFONT) ); + font = get_control_font( hwnd ); if (font) oldFont = SelectObject( hdc, font ); SendMessageW( GetParent(hwnd), WM_DRAWITEM, id, (LPARAM)&dis ); if (font) SelectObject( hdc, oldFont ); @@ -638,7 +656,7 @@ static void STATIC_PaintTextfn( HWND hwnd, HDC hdc, HBRUSH hbrush, DWORD style ) format |= DT_SINGLELINE | DT_WORD_ELLIPSIS; } - if ((hFont = (HFONT)NtUserGetPrivateData( hwnd, HFONT_GWL_OFFSET, sizeof(HFONT) ))) + if ((hFont = get_control_font( hwnd ))) hOldFont = SelectObject( hdc, hFont ); if ((style & SS_TYPEMASK) != SS_SIMPLE) @@ -727,7 +745,7 @@ static void STATIC_PaintIconfn( HWND hwnd, HDC hdc, HBRUSH hbrush, DWORD style ) SIZE size; GetClientRect( hwnd, &rc ); - hIcon = (HICON)NtUserGetPrivateData( hwnd, HICON_GWL_OFFSET, sizeof(hIcon) ); + hIcon = get_control_icon( hwnd ); if (!hIcon || !get_icon_size( hIcon, &size )) { FillRect(hdc, &rc, hbrush); @@ -754,7 +772,7 @@ static void STATIC_PaintBitmapfn(HWND hwnd, HDC hdc, HBRUSH hbrush, DWORD style HDC hMemDC; HBITMAP hBitmap, oldbitmap; - if ((hBitmap = (HBITMAP)NtUserGetPrivateData( hwnd, HICON_GWL_OFFSET, sizeof(hBitmap) )) + if ((hBitmap = get_control_icon( hwnd )) && (GetObjectType(hBitmap) == OBJ_BITMAP) && (hMemDC = CreateCompatibleDC( hdc ))) { @@ -794,7 +812,7 @@ static void STATIC_PaintEnhMetafn(HWND hwnd, HDC hdc, HBRUSH hbrush, DWORD style GetClientRect(hwnd, &rc); FillRect(hdc, &rc, hbrush); - if ((hEnhMetaFile = (HENHMETAFILE)NtUserGetPrivateData( hwnd, HICON_GWL_OFFSET, sizeof(hEnhMetaFile) ))) + if ((hEnhMetaFile = get_control_icon( hwnd ))) { /* The control's current font is not selected into the device context! */ -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/11023