mirror of
https://github.com/reactos/reactos.git
synced 2025-01-05 22:12:46 +00:00
[COMCTL32] -Reduce diff with user32 and move all data of the button in a single struct.
svn path=/trunk/; revision=73907
This commit is contained in:
parent
3774050bf3
commit
4227981b8b
3 changed files with 176 additions and 71 deletions
|
@ -155,7 +155,6 @@ const struct builtin_class_descr BUTTON_builtin_class =
|
||||||
IDC_ARROW, /* cursor */
|
IDC_ARROW, /* cursor */
|
||||||
0 /* brush */
|
0 /* brush */
|
||||||
};
|
};
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
static inline LONG get_button_state( HWND hwnd )
|
static inline LONG get_button_state( HWND hwnd )
|
||||||
|
@ -182,9 +181,41 @@ static __inline LONG get_ui_state( HWND hwnd )
|
||||||
|
|
||||||
#endif /* __REACTOS__ */
|
#endif /* __REACTOS__ */
|
||||||
|
|
||||||
#ifndef _USER32_
|
static inline HFONT get_button_font( HWND hwnd )
|
||||||
|
{
|
||||||
|
return (HFONT)GetWindowLongPtrW( hwnd, HFONT_GWL_OFFSET );
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void set_button_font( HWND hwnd, HFONT font )
|
||||||
|
{
|
||||||
|
SetWindowLongPtrW( hwnd, HFONT_GWL_OFFSET, (LONG_PTR)font );
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline UINT get_button_type( LONG window_style )
|
||||||
|
{
|
||||||
|
return (window_style & BS_TYPEMASK);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* paint a button of any type */
|
||||||
|
static inline void paint_button( HWND hwnd, LONG style, UINT action )
|
||||||
|
{
|
||||||
|
if (btnPaintFunc[style] && IsWindowVisible(hwnd))
|
||||||
|
{
|
||||||
|
HDC hdc = GetDC( hwnd );
|
||||||
|
btnPaintFunc[style]( hwnd, hdc, action );
|
||||||
|
ReleaseDC( hwnd, hdc );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
#define NtUserAlterWindowStyle SetWindowLongPtrW
|
#define NtUserAlterWindowStyle SetWindowLongPtrW
|
||||||
|
|
||||||
|
static inline void _SetButtonData(HWND hwnd, PBUTTON_DATA data)
|
||||||
|
{
|
||||||
|
SetWindowLongPtrW( hwnd, 0, (LONG)data );
|
||||||
|
}
|
||||||
|
|
||||||
HRGN set_control_clipping( HDC hdc, const RECT *rect )
|
HRGN set_control_clipping( HDC hdc, const RECT *rect )
|
||||||
{
|
{
|
||||||
RECT rc = *rect;
|
RECT rc = *rect;
|
||||||
|
@ -209,24 +240,45 @@ BOOL BUTTON_PaintWithTheme(HTHEME theme, HWND hwnd, HDC hParamDC, LPARAM prfFlag
|
||||||
|
|
||||||
static inline LONG_PTR get_button_image(HWND hwnd)
|
static inline LONG_PTR get_button_image(HWND hwnd)
|
||||||
{
|
{
|
||||||
return GetWindowLongPtrW( hwnd, HIMAGE_GWL_OFFSET );
|
return _GetButtonData(hwnd)->image;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline LONG_PTR set_button_image(HWND hwnd, LONG_PTR image)
|
static inline LONG_PTR set_button_image(HWND hwnd, LONG_PTR image)
|
||||||
{
|
{
|
||||||
return SetWindowLongPtrW( hwnd, HIMAGE_GWL_OFFSET, image );
|
PBUTTON_DATA data = _GetButtonData(hwnd);
|
||||||
|
LONG_PTR ret = data->image;
|
||||||
|
data->image = image;
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
static inline LONG get_button_state( HWND hwnd )
|
||||||
|
{
|
||||||
|
return _GetButtonData(hwnd)->state;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void set_button_state( HWND hwnd, LONG state )
|
||||||
|
{
|
||||||
|
_GetButtonData(hwnd)->state = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
static __inline void set_ui_state( HWND hwnd, LONG flags )
|
||||||
|
{
|
||||||
|
_GetButtonData(hwnd)->ui_state = flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
static __inline LONG get_ui_state( HWND hwnd )
|
||||||
|
{
|
||||||
|
return _GetButtonData(hwnd)->ui_state;
|
||||||
|
}
|
||||||
|
|
||||||
static inline HFONT get_button_font( HWND hwnd )
|
static inline HFONT get_button_font( HWND hwnd )
|
||||||
{
|
{
|
||||||
return (HFONT)GetWindowLongPtrW( hwnd, HFONT_GWL_OFFSET );
|
return (HFONT)_GetButtonData(hwnd)->font;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void set_button_font( HWND hwnd, HFONT font )
|
static inline void set_button_font( HWND hwnd, HFONT font )
|
||||||
{
|
{
|
||||||
SetWindowLongPtrW( hwnd, HFONT_GWL_OFFSET, (LONG_PTR)font );
|
_GetButtonData(hwnd)->font = font;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline UINT get_button_type( LONG window_style )
|
static inline UINT get_button_type( LONG window_style )
|
||||||
|
@ -237,7 +289,6 @@ static inline UINT get_button_type( LONG window_style )
|
||||||
/* paint a button of any type */
|
/* paint a button of any type */
|
||||||
static inline void paint_button( HWND hwnd, LONG style, UINT action )
|
static inline void paint_button( HWND hwnd, LONG style, UINT action )
|
||||||
{
|
{
|
||||||
#ifndef _USER32_
|
|
||||||
HTHEME theme = GetWindowTheme(hwnd);
|
HTHEME theme = GetWindowTheme(hwnd);
|
||||||
RECT rc;
|
RECT rc;
|
||||||
HDC hdc = GetDC( hwnd );
|
HDC hdc = GetDC( hwnd );
|
||||||
|
@ -254,16 +305,11 @@ static inline void paint_button( HWND hwnd, LONG style, UINT action )
|
||||||
btnPaintFunc[style]( hwnd, hdc, action );
|
btnPaintFunc[style]( hwnd, hdc, action );
|
||||||
}
|
}
|
||||||
ReleaseDC( hwnd, hdc );
|
ReleaseDC( hwnd, hdc );
|
||||||
#else
|
|
||||||
if (btnPaintFunc[style] && IsWindowVisible(hwnd))
|
|
||||||
{
|
|
||||||
HDC hdc = GetDC( hwnd );
|
|
||||||
btnPaintFunc[style]( hwnd, hdc, action );
|
|
||||||
ReleaseDC( hwnd, hdc );
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* retrieve the button text; returned buffer must be freed by caller */
|
/* retrieve the button text; returned buffer must be freed by caller */
|
||||||
static inline WCHAR *get_button_text( HWND hwnd )
|
static inline WCHAR *get_button_text( HWND hwnd )
|
||||||
{
|
{
|
||||||
|
@ -336,6 +382,83 @@ LRESULT WINAPI ButtonWndProc_common(HWND hWnd, UINT uMsg,
|
||||||
pt.x = (short)LOWORD(lParam);
|
pt.x = (short)LOWORD(lParam);
|
||||||
pt.y = (short)HIWORD(lParam);
|
pt.y = (short)HIWORD(lParam);
|
||||||
|
|
||||||
|
#ifndef _USER32_
|
||||||
|
switch (uMsg)
|
||||||
|
{
|
||||||
|
case WM_NCCREATE:
|
||||||
|
{
|
||||||
|
PBUTTON_DATA data = HeapAlloc( GetProcessHeap(), 0, sizeof(BUTTON_DATA) );
|
||||||
|
if (!data)
|
||||||
|
{
|
||||||
|
ERR("Failed to alloc internal button data\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(data, 0, sizeof(BUTTON_DATA));
|
||||||
|
_SetButtonData(hWnd, data);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case WM_NCDESTROY:
|
||||||
|
{
|
||||||
|
PBUTTON_DATA data = _GetButtonData(hWnd);
|
||||||
|
if (!data)
|
||||||
|
{
|
||||||
|
ERR("No data");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
HeapFree( GetProcessHeap(), 0, data );
|
||||||
|
_SetButtonData(hWnd, NULL);
|
||||||
|
}
|
||||||
|
case WM_CREATE:
|
||||||
|
OpenThemeData(hWnd, WC_BUTTONW);
|
||||||
|
break;
|
||||||
|
case WM_DESTROY:
|
||||||
|
CloseThemeData (GetWindowTheme(hWnd));
|
||||||
|
break;
|
||||||
|
case WM_THEMECHANGED:
|
||||||
|
CloseThemeData (GetWindowTheme(hWnd));
|
||||||
|
OpenThemeData(hWnd, WC_BUTTONW);
|
||||||
|
InvalidateRect(hWnd, NULL, FALSE);
|
||||||
|
break;
|
||||||
|
case WM_MOUSEHOVER:
|
||||||
|
{
|
||||||
|
int state = (int)SendMessageW(hWnd, BM_GETSTATE, 0, 0);
|
||||||
|
set_button_state(hWnd, state|BST_HOT);
|
||||||
|
InvalidateRect(hWnd, NULL, FALSE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case WM_MOUSELEAVE:
|
||||||
|
{
|
||||||
|
int state = (int)SendMessageW(hWnd, BM_GETSTATE, 0, 0);
|
||||||
|
set_button_state(hWnd, state&(~BST_HOT));
|
||||||
|
InvalidateRect(hWnd, NULL, FALSE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case WM_MOUSEMOVE:
|
||||||
|
{
|
||||||
|
TRACKMOUSEEVENT mouse_event;
|
||||||
|
mouse_event.cbSize = sizeof(TRACKMOUSEEVENT);
|
||||||
|
mouse_event.dwFlags = TME_QUERY;
|
||||||
|
if(!TrackMouseEvent(&mouse_event) || !(mouse_event.dwFlags&(TME_HOVER|TME_LEAVE)))
|
||||||
|
{
|
||||||
|
mouse_event.dwFlags = TME_HOVER|TME_LEAVE;
|
||||||
|
mouse_event.hwndTrack = hWnd;
|
||||||
|
mouse_event.dwHoverTime = 1;
|
||||||
|
TrackMouseEvent(&mouse_event);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_GetButtonData(hWnd))
|
||||||
|
{
|
||||||
|
ERR("no data!\n");
|
||||||
|
return unicode ? DefWindowProcW(hWnd, uMsg, wParam, lParam) :
|
||||||
|
DefWindowProcA(hWnd, uMsg, wParam, lParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
switch (uMsg)
|
switch (uMsg)
|
||||||
{
|
{
|
||||||
case WM_GETDLGCODE:
|
case WM_GETDLGCODE:
|
||||||
|
@ -371,9 +494,6 @@ LRESULT WINAPI ButtonWndProc_common(HWND hWnd, UINT uMsg,
|
||||||
set_button_state( hWnd, BST_UNCHECKED );
|
set_button_state( hWnd, BST_UNCHECKED );
|
||||||
#ifdef __REACTOS__
|
#ifdef __REACTOS__
|
||||||
button_update_uistate( hWnd, unicode );
|
button_update_uistate( hWnd, unicode );
|
||||||
#endif
|
|
||||||
#ifndef _USER32_
|
|
||||||
OpenThemeData(hWnd, WC_BUTTONW);
|
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -382,32 +502,6 @@ LRESULT WINAPI ButtonWndProc_common(HWND hWnd, UINT uMsg,
|
||||||
NtUserSetWindowFNID(hWnd, FNID_DESTROY);
|
NtUserSetWindowFNID(hWnd, FNID_DESTROY);
|
||||||
case WM_DESTROY:
|
case WM_DESTROY:
|
||||||
break;
|
break;
|
||||||
#endif
|
|
||||||
#ifndef _USER32_
|
|
||||||
case WM_DESTROY:
|
|
||||||
CloseThemeData (GetWindowTheme(hWnd));
|
|
||||||
break;
|
|
||||||
case WM_THEMECHANGED:
|
|
||||||
CloseThemeData (GetWindowTheme(hWnd));
|
|
||||||
OpenThemeData(hWnd, WC_BUTTONW);
|
|
||||||
InvalidateRect(hWnd, NULL, FALSE);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WM_MOUSEHOVER:
|
|
||||||
{
|
|
||||||
int state = (int)SendMessageW(hWnd, BM_GETSTATE, 0, 0);
|
|
||||||
SetWindowLongW(hWnd, 0, state|BST_HOT);
|
|
||||||
InvalidateRect(hWnd, NULL, FALSE);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case WM_MOUSELEAVE:
|
|
||||||
{
|
|
||||||
int state = (int)SendMessageW(hWnd, BM_GETSTATE, 0, 0);
|
|
||||||
SetWindowLongW(hWnd, 0, state&(~BST_HOT));
|
|
||||||
InvalidateRect(hWnd, NULL, FALSE);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
case WM_ERASEBKGND:
|
case WM_ERASEBKGND:
|
||||||
if (btn_type == BS_OWNERDRAW)
|
if (btn_type == BS_OWNERDRAW)
|
||||||
|
@ -545,21 +639,6 @@ LRESULT WINAPI ButtonWndProc_common(HWND hWnd, UINT uMsg,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_MOUSEMOVE:
|
case WM_MOUSEMOVE:
|
||||||
#ifndef _USER32_
|
|
||||||
{
|
|
||||||
TRACKMOUSEEVENT mouse_event;
|
|
||||||
mouse_event.cbSize = sizeof(TRACKMOUSEEVENT);
|
|
||||||
mouse_event.dwFlags = TME_QUERY;
|
|
||||||
if(!TrackMouseEvent(&mouse_event) || !(mouse_event.dwFlags&(TME_HOVER|TME_LEAVE)))
|
|
||||||
{
|
|
||||||
mouse_event.dwFlags = TME_HOVER|TME_LEAVE;
|
|
||||||
mouse_event.hwndTrack = hWnd;
|
|
||||||
mouse_event.dwHoverTime = 1;
|
|
||||||
TrackMouseEvent(&mouse_event);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if ((wParam & MK_LBUTTON) && GetCapture() == hWnd)
|
if ((wParam & MK_LBUTTON) && GetCapture() == hWnd)
|
||||||
{
|
{
|
||||||
GetClientRect( hWnd, &rect );
|
GetClientRect( hWnd, &rect );
|
||||||
|
@ -637,10 +716,12 @@ LRESULT WINAPI ButtonWndProc_common(HWND hWnd, UINT uMsg,
|
||||||
case WM_SETFOCUS:
|
case WM_SETFOCUS:
|
||||||
TRACE("WM_SETFOCUS %p\n",hWnd);
|
TRACE("WM_SETFOCUS %p\n",hWnd);
|
||||||
set_button_state( hWnd, get_button_state(hWnd) | BST_FOCUS );
|
set_button_state( hWnd, get_button_state(hWnd) | BST_FOCUS );
|
||||||
if (btn_type == BS_OWNERDRAW)
|
#ifndef _USER32_
|
||||||
paint_button( hWnd, btn_type, ODA_FOCUS );
|
if (btn_type != BS_OWNERDRAW)
|
||||||
else
|
|
||||||
InvalidateRect(hWnd, NULL, FALSE);
|
InvalidateRect(hWnd, NULL, FALSE);
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
paint_button( hWnd, btn_type, ODA_FOCUS );
|
||||||
if (style & BS_NOTIFY)
|
if (style & BS_NOTIFY)
|
||||||
BUTTON_NOTIFY_PARENT(hWnd, BN_SETFOCUS);
|
BUTTON_NOTIFY_PARENT(hWnd, BN_SETFOCUS);
|
||||||
break;
|
break;
|
||||||
|
@ -649,6 +730,9 @@ LRESULT WINAPI ButtonWndProc_common(HWND hWnd, UINT uMsg,
|
||||||
TRACE("WM_KILLFOCUS %p\n",hWnd);
|
TRACE("WM_KILLFOCUS %p\n",hWnd);
|
||||||
state = get_button_state( hWnd );
|
state = get_button_state( hWnd );
|
||||||
set_button_state( hWnd, state & ~BST_FOCUS );
|
set_button_state( hWnd, state & ~BST_FOCUS );
|
||||||
|
#ifdef _USER32_
|
||||||
|
paint_button( hWnd, btn_type, ODA_FOCUS );
|
||||||
|
#endif
|
||||||
|
|
||||||
if ((state & BUTTON_BTNPRESSED) && GetCapture() == hWnd)
|
if ((state & BUTTON_BTNPRESSED) && GetCapture() == hWnd)
|
||||||
ReleaseCapture();
|
ReleaseCapture();
|
||||||
|
@ -742,7 +826,11 @@ LRESULT WINAPI ButtonWndProc_common(HWND hWnd, UINT uMsg,
|
||||||
if ((state & 3) != wParam)
|
if ((state & 3) != wParam)
|
||||||
{
|
{
|
||||||
set_button_state( hWnd, (state & ~3) | wParam );
|
set_button_state( hWnd, (state & ~3) | wParam );
|
||||||
|
#ifdef _USER32
|
||||||
|
paint_button( hWnd, btn_type, ODA_SELECT );
|
||||||
|
#else
|
||||||
InvalidateRect(hWnd, NULL, FALSE);
|
InvalidateRect(hWnd, NULL, FALSE);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
if ((btn_type == BS_AUTORADIOBUTTON) && (wParam == BST_CHECKED) && (style & WS_CHILD))
|
if ((btn_type == BS_AUTORADIOBUTTON) && (wParam == BST_CHECKED) && (style & WS_CHILD))
|
||||||
BUTTON_CheckAutoRadioButton( hWnd );
|
BUTTON_CheckAutoRadioButton( hWnd );
|
||||||
|
@ -758,7 +846,11 @@ LRESULT WINAPI ButtonWndProc_common(HWND hWnd, UINT uMsg,
|
||||||
else
|
else
|
||||||
set_button_state( hWnd, state & ~BST_PUSHED );
|
set_button_state( hWnd, state & ~BST_PUSHED );
|
||||||
|
|
||||||
|
#ifdef _USER32_
|
||||||
|
paint_button( hWnd, btn_type, ODA_SELECT );
|
||||||
|
#else
|
||||||
InvalidateRect(hWnd, NULL, FALSE);
|
InvalidateRect(hWnd, NULL, FALSE);
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef __REACTOS__
|
#ifdef __REACTOS__
|
||||||
|
@ -1495,7 +1587,7 @@ void BUTTON_Register()
|
||||||
wndClass.style = CS_GLOBALCLASS | CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW | CS_PARENTDC;
|
wndClass.style = CS_GLOBALCLASS | CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW | CS_PARENTDC;
|
||||||
wndClass.lpfnWndProc = ButtonWndProcW;
|
wndClass.lpfnWndProc = ButtonWndProcW;
|
||||||
wndClass.cbClsExtra = 0;
|
wndClass.cbClsExtra = 0;
|
||||||
wndClass.cbWndExtra = NB_EXTRA_BYTES;
|
wndClass.cbWndExtra = sizeof(PBUTTON_DATA);
|
||||||
wndClass.hCursor = LoadCursorW(0, (LPCWSTR)IDC_ARROW);
|
wndClass.hCursor = LoadCursorW(0, (LPCWSTR)IDC_ARROW);
|
||||||
wndClass.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
|
wndClass.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
|
||||||
wndClass.lpszClassName = WC_BUTTONW;
|
wndClass.lpszClassName = WC_BUTTONW;
|
||||||
|
|
|
@ -76,6 +76,18 @@ typedef struct
|
||||||
|
|
||||||
extern COMCTL32_SysColor comctl32_color DECLSPEC_HIDDEN;
|
extern COMCTL32_SysColor comctl32_color DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
|
typedef struct _BUTTON_DATA {
|
||||||
|
LONG state;
|
||||||
|
HFONT font;
|
||||||
|
LONG_PTR image;
|
||||||
|
DWORD ui_state;
|
||||||
|
} BUTTON_DATA, *PBUTTON_DATA;
|
||||||
|
|
||||||
|
static inline PBUTTON_DATA _GetButtonData(HWND hwnd)
|
||||||
|
{
|
||||||
|
return (PBUTTON_DATA)GetWindowLongPtrW( hwnd, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
/* Internal function */
|
/* Internal function */
|
||||||
HWND COMCTL32_CreateToolTip (HWND) DECLSPEC_HIDDEN;
|
HWND COMCTL32_CreateToolTip (HWND) DECLSPEC_HIDDEN;
|
||||||
VOID COMCTL32_RefreshSysColors(void) DECLSPEC_HIDDEN;
|
VOID COMCTL32_RefreshSysColors(void) DECLSPEC_HIDDEN;
|
||||||
|
|
|
@ -36,18 +36,19 @@ typedef enum
|
||||||
|
|
||||||
typedef void (*pfThemedPaint)(HTHEME theme, HWND hwnd, HDC hdc, ButtonState drawState, UINT dtFlags, BOOL focused, LPARAM prfFlag);
|
typedef void (*pfThemedPaint)(HTHEME theme, HWND hwnd, HDC hdc, ButtonState drawState, UINT dtFlags, BOOL focused, LPARAM prfFlag);
|
||||||
|
|
||||||
#define STATE_GWL_OFFSET 0
|
|
||||||
#define HFONT_GWL_OFFSET (sizeof(LONG))
|
|
||||||
#define HIMAGE_GWL_OFFSET (HFONT_GWL_OFFSET+sizeof(HFONT))
|
|
||||||
|
|
||||||
static inline LONG get_button_state( HWND hwnd )
|
static inline LONG get_button_state( HWND hwnd )
|
||||||
{
|
{
|
||||||
return GetWindowLongPtrW( hwnd, STATE_GWL_OFFSET );
|
return _GetButtonData(hwnd)->state;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline HFONT get_button_font( HWND hwnd )
|
static inline HFONT get_button_font( HWND hwnd )
|
||||||
{
|
{
|
||||||
return (HFONT)GetWindowLongPtrW( hwnd, HFONT_GWL_OFFSET );
|
return (HFONT)_GetButtonData(hwnd)->font;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline LONG_PTR get_button_image(HWND hwnd)
|
||||||
|
{
|
||||||
|
return _GetButtonData(hwnd)->image;
|
||||||
}
|
}
|
||||||
|
|
||||||
static UINT get_drawtext_flags(DWORD style, DWORD ex_style)
|
static UINT get_drawtext_flags(DWORD style, DWORD ex_style)
|
||||||
|
@ -333,7 +334,7 @@ BOOL BUTTON_PaintWithTheme(HTHEME theme, HWND hwnd, HDC hParamDC, LPARAM prfFlag
|
||||||
if (!paint)
|
if (!paint)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (GetWindowLongPtrW( hwnd, HIMAGE_GWL_OFFSET) != 0)
|
if (get_button_image(hwnd) != 0)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
dwStyleEx = GetWindowLongW(hwnd, GWL_EXSTYLE);
|
dwStyleEx = GetWindowLongW(hwnd, GWL_EXSTYLE);
|
||||||
|
|
Loading…
Reference in a new issue