4 * Copyright (c) 2005 by Frank Richter
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
33 #include "wine/debug.h"
35 /**********************************************************************
36 * The dialog subclass window proc.
38 LRESULT CALLBACK
THEMING_DialogSubclassProc (HWND hWnd
, UINT msg
,
39 WPARAM wParam
, LPARAM lParam
,
42 HTHEME theme
= GetWindowTheme ( hWnd
);
43 static const WCHAR themeClass
[] = { 'W','i','n','d','o','w',0 };
44 BOOL themingActive
= IsThemeDialogTextureEnabled (hWnd
);
45 BOOL doTheming
= themingActive
&& (theme
!= NULL
);
51 result
= THEMING_CallOriginalClass (hWnd
, msg
, wParam
, lParam
);
52 theme
= OpenThemeData( hWnd
, themeClass
);
56 CloseThemeData ( theme
);
57 SetWindowTheme( hWnd
, NULL
, NULL
);
58 OpenThemeData( hWnd
, NULL
);
59 return THEMING_CallOriginalClass (hWnd
, msg
, wParam
, lParam
);
62 CloseThemeData ( theme
);
63 OpenThemeData( hWnd
, themeClass
);
64 InvalidateRect( hWnd
, NULL
, TRUE
);
67 case WM_SYSCOLORCHANGE
:
68 if (!doTheming
) return THEMING_CallOriginalClass (hWnd
, msg
, wParam
, lParam
);
69 /* Do nothing. When themed, a WM_THEMECHANGED will be received, too,
70 * which will do the repaint. */
74 if (!doTheming
) return THEMING_CallOriginalClass (hWnd
, msg
, wParam
, lParam
);
77 WNDPROC dlgp
= (WNDPROC
)GetWindowLongPtrW (hWnd
, DWLP_DLGPROC
);
78 if (!CallWindowProcW(dlgp
, hWnd
, msg
, wParam
, lParam
))
81 GetClientRect (hWnd
, &rc
);
82 if (IsThemePartDefined (theme
, WP_DIALOG
, 0))
83 /* Although there is a theme for the WINDOW class/DIALOG part,
84 * but I[res] haven't seen Windows using it yet... Even when
85 * dialog theming is activated, the good ol' BTNFACE
86 * background seems to be used. */
88 DrawThemeBackground (theme
, (HDC
)wParam
, WP_DIALOG
, 0, &rc
,
91 return THEMING_CallOriginalClass (hWnd
, msg
, wParam
, lParam
);
93 /* We might have gotten a TAB theme class, so check if we can
94 * draw as a tab page. */
95 if (IsThemePartDefined (theme
, TABP_BODY
, 0))
96 DrawThemeBackground (theme
, (HDC
)wParam
, TABP_BODY
, 0, &rc
,
99 return THEMING_CallOriginalClass (hWnd
, msg
, wParam
, lParam
);
104 case WM_CTLCOLORSTATIC
:
105 if (!doTheming
) return THEMING_CallOriginalClass (hWnd
, msg
, wParam
, lParam
);
107 WNDPROC dlgp
= (WNDPROC
)GetWindowLongPtrW (hWnd
, DWLP_DLGPROC
);
108 LRESULT result
= CallWindowProcW(dlgp
, hWnd
, msg
, wParam
, lParam
);
111 /* Override defaults with more suitable values when themed */
112 HDC controlDC
= (HDC
)wParam
;
113 HWND controlWnd
= (HWND
)lParam
;
114 WCHAR controlClass
[32];
117 GetClassNameW (controlWnd
, controlClass
,
118 sizeof(controlClass
) / sizeof(controlClass
[0]));
119 if (lstrcmpiW (controlClass
, WC_STATICW
) == 0)
121 /* Static control - draw parent background and set text to
122 * transparent, so it looks right on tab pages. */
123 GetClientRect (controlWnd
, &rc
);
124 DrawThemeParentBackground (controlWnd
, controlDC
, &rc
);
125 SetBkMode (controlDC
, TRANSPARENT
);
127 /* Return NULL brush since we painted the BG already */
128 return (LRESULT
)GetStockObject (NULL_BRUSH
);
131 return THEMING_CallOriginalClass (hWnd
, msg
, wParam
, lParam
);
139 return THEMING_CallOriginalClass (hWnd
, msg
, wParam
, lParam
);