Author: hbelusca
Date: Fri Feb 12 19:07:29 2016
New Revision: 70717
URL:
http://svn.reactos.org/svn/reactos?rev=70717&view=rev
Log:
[UXTHEME]: Use a similar working logic to display (or not) the icon (or the default one)
to windows/dialogs, taking in particular their exstyle WS_EX_DLGMODALFRAME in particular.
Dedicated to Jared Smudde.
CORE-9635 #resolve #comment A better fix was committed in r70717 to match r70715
Modified:
trunk/reactos/dll/win32/uxtheme/nonclient.c
Modified: trunk/reactos/dll/win32/uxtheme/nonclient.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/uxtheme/nonclien…
==============================================================================
--- trunk/reactos/dll/win32/uxtheme/nonclient.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/uxtheme/nonclient.c [iso-8859-1] Fri Feb 12 19:07:29 2016
@@ -13,20 +13,19 @@
void InitMenuFont(VOID)
{
- NONCLIENTMETRICS ncm;
+ NONCLIENTMETRICS ncm;
ncm.cbSize = sizeof(NONCLIENTMETRICS);
- if(!SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, 0))
- {
- return ;
+ if (!SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, 0))
+ {
+ return;
}
hMenuFont = CreateFontIndirect(&ncm.lfMenuFont);
ncm.lfMenuFont.lfWeight = max(ncm.lfMenuFont.lfWeight + 300, 1000);
hMenuFontBold = CreateFontIndirect(&ncm.lfMenuFont);
-
}
static BOOL
@@ -64,26 +63,27 @@
return FALSE;
}
-HICON
-UserGetWindowIcon(HWND hwnd)
-{
- HICON hIcon = 0;
-
- SendMessageTimeout(hwnd, WM_GETICON, ICON_SMALL2, 0, SMTO_ABORTIFHUNG, 1000,
(PDWORD_PTR)&hIcon);
+static HICON
+UserGetWindowIcon(PDRAW_CONTEXT pcontext)
+{
+ HICON hIcon = NULL;
+
+ SendMessageTimeout(pcontext->hWnd, WM_GETICON, ICON_SMALL2, 0, SMTO_ABORTIFHUNG,
1000, (PDWORD_PTR)&hIcon);
if (!hIcon)
- SendMessageTimeout(hwnd, WM_GETICON, ICON_SMALL, 0, SMTO_ABORTIFHUNG, 1000,
(PDWORD_PTR)&hIcon);
+ SendMessageTimeout(pcontext->hWnd, WM_GETICON, ICON_SMALL, 0,
SMTO_ABORTIFHUNG, 1000, (PDWORD_PTR)&hIcon);
if (!hIcon)
- SendMessageTimeout(hwnd, WM_GETICON, ICON_BIG, 0, SMTO_ABORTIFHUNG, 1000,
(PDWORD_PTR)&hIcon);
+ SendMessageTimeout(pcontext->hWnd, WM_GETICON, ICON_BIG, 0, SMTO_ABORTIFHUNG,
1000, (PDWORD_PTR)&hIcon);
if (!hIcon)
- hIcon = (HICON)GetClassLong(hwnd, GCL_HICONSM);
+ hIcon = (HICON)GetClassLong(pcontext->hWnd, GCL_HICONSM);
if (!hIcon)
- hIcon = (HICON)GetClassLong(hwnd, GCL_HICON);
-
- if(!hIcon)
+ hIcon = (HICON)GetClassLong(pcontext->hWnd, GCL_HICON);
+
+ // See also win32ss/user/ntuser/nonclient.c!NC_IconForWindow
+ if (!hIcon && !(pcontext->wi.dwExStyle & WS_EX_DLGMODALFRAME))
hIcon = LoadIconW(NULL, (LPCWSTR)IDI_WINLOGO);
return hIcon;
@@ -306,7 +306,7 @@
ThemeGetButtonState(HTHELP, htHot, htDown,
pcontext->Active));
}
-/* Used from WM_NCPAINT and WM_NCACTIVATE handlers*/
+/* Used from WM_NCPAINT and WM_NCACTIVATE handlers */
static void
ThemeDrawCaption(PDRAW_CONTEXT pcontext, RECT* prcCurrent)
{
@@ -315,7 +315,13 @@
HICON hIcon;
WCHAR *CaptionText;
- hIcon = UserGetWindowIcon(pcontext->hWnd);
+ // See also win32ss/user/ntuser/nonclient.c!UserDrawCaptionBar
+ // and win32ss/user/ntuser/nonclient.c!UserDrawCaption
+ if ((pcontext->wi.dwStyle & WS_SYSMENU) && !(pcontext->wi.dwExStyle
& WS_EX_TOOLWINDOW))
+ hIcon = UserGetWindowIcon(pcontext);
+ else
+ hIcon = NULL;
+
CaptionText = UserGetWindowCaption(pcontext->hWnd);
/* Get the caption part and state id */
@@ -328,7 +334,7 @@
iState = pcontext->Active ? FS_ACTIVE : FS_INACTIVE;
- /* Draw the caption background*/
+ /* Draw the caption background */
rcPart = *prcCurrent;
rcPart.bottom = rcPart.top + pcontext->CaptionHeight;
prcCurrent->top = rcPart.bottom;
@@ -352,8 +358,7 @@
rcPart.top += 3 ;
/* Draw the icon */
- if(hIcon && !(pcontext->wi.dwExStyle & WS_EX_TOOLWINDOW)
- && !(pcontext->wi.dwExStyle & WS_EX_DLGMODALFRAME))
+ if (hIcon)
{
int IconHeight = GetSystemMetrics(SM_CYSMICON);
int IconWidth = GetSystemMetrics(SM_CXSMICON);
@@ -364,9 +369,9 @@
rcPart.right -= 4;
/* Draw the caption */
- if(CaptionText)
- {
- /*FIXME: Use DrawThemeTextEx*/
+ if (CaptionText)
+ {
+ /* FIXME: Use DrawThemeTextEx */
ThemeDrawCaptionText(pcontext->theme,
pcontext->hDC,
iPart,
@@ -375,7 +380,7 @@
lstrlenW(CaptionText),
DT_VCENTER | DT_SINGLELINE | DT_END_ELLIPSIS,
0,
- &rcPart ,
+ &rcPart,
pcontext->Active);
HeapFree(GetProcessHeap(), 0, CaptionText);
}
@@ -446,7 +451,7 @@
}
/* Now the other bit of the frame */
- if (context->wi.dwStyle & (WS_DLGFRAME | WS_BORDER) ||
context->wi.dwExStyle & WS_EX_DLGMODALFRAME)
+ if (context->wi.dwStyle & (WS_DLGFRAME | WS_BORDER) ||
(context->wi.dwExStyle & WS_EX_DLGMODALFRAME))
{
INT Width = GetSystemMetrics(SM_CXBORDER);
INT Height = GetSystemMetrics(SM_CYBORDER);
@@ -594,7 +599,7 @@
Rect = MenuBarInfo.rcBar;
OffsetRect(&Rect, -pcontext->wi.rcWindow.left,
-pcontext->wi.rcWindow.top);
- /* Draw a line under the menu*/
+ /* Draw a line under the menu */
oldPen = (HPEN)SelectObject(pcontext->hDC, GetStockObject(DC_PEN));
SetDCPenColor(pcontext->hDC, GetSysColor(COLOR_3DFACE));
MoveToEx(pcontext->hDC, Rect.left, Rect.bottom, NULL);
@@ -611,7 +616,7 @@
SelectObject(pcontext->hDC, FontOld);
- /* Fill the menu background area that isn't painted yet*/
+ /* Fill the menu background area that isn't painted yet */
FillRect(pcontext->hDC, &Rect, GetSysColorBrush(flat_menu ? COLOR_MENUBAR :
COLOR_MENU));
}
@@ -652,7 +657,7 @@
}
/*
- Message handlers
+ * Message handlers
*/
static LRESULT
@@ -937,7 +942,6 @@
if (!PtInRect(&WindowRect, Point))
{
-
INT ButtonWidth;
if (wi.dwExStyle & WS_EX_TOOLWINDOW)