diff --git a/reactos/dll/win32/uxtheme/nonclient.c b/reactos/dll/win32/uxtheme/nonclient.c index f64717ff89e..927dddf2e5d 100644 --- a/reactos/dll/win32/uxtheme/nonclient.c +++ b/reactos/dll/win32/uxtheme/nonclient.c @@ -13,20 +13,19 @@ HFONT hMenuFontBold = NULL; void InitMenuFont(VOID) { - NONCLIENTMETRICS ncm; + NONCLIENTMETRICS ncm; ncm.cbSize = sizeof(NONCLIENTMETRICS); - if(!SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, 0)) + if (!SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, 0)) { - return ; + return; } hMenuFont = CreateFontIndirect(&ncm.lfMenuFont); ncm.lfMenuFont.lfWeight = max(ncm.lfMenuFont.lfWeight + 300, 1000); hMenuFontBold = CreateFontIndirect(&ncm.lfMenuFont); - } static BOOL @@ -64,26 +63,27 @@ UserHasWindowEdge(DWORD Style, DWORD ExStyle) return FALSE; } -HICON -UserGetWindowIcon(HWND hwnd) +static HICON +UserGetWindowIcon(PDRAW_CONTEXT pcontext) { - HICON hIcon = 0; + HICON hIcon = NULL; - SendMessageTimeout(hwnd, WM_GETICON, ICON_SMALL2, 0, SMTO_ABORTIFHUNG, 1000, (PDWORD_PTR)&hIcon); + 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); + hIcon = (HICON)GetClassLong(pcontext->hWnd, GCL_HICON); - if(!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 @@ ThemeDrawCaptionButtons(PDRAW_CONTEXT pcontext, DWORD htHot, DWORD htDown) 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 @@ ThemeDrawCaption(PDRAW_CONTEXT pcontext, RECT* prcCurrent) 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 @@ ThemeDrawCaption(PDRAW_CONTEXT pcontext, RECT* prcCurrent) 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 @@ ThemeDrawCaption(PDRAW_CONTEXT pcontext, RECT* prcCurrent) 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 @@ ThemeDrawCaption(PDRAW_CONTEXT pcontext, RECT* prcCurrent) rcPart.right -= 4; /* Draw the caption */ - if(CaptionText) + if (CaptionText) { - /*FIXME: Use DrawThemeTextEx*/ + /* FIXME: Use DrawThemeTextEx */ ThemeDrawCaptionText(pcontext->theme, pcontext->hDC, iPart, @@ -375,7 +380,7 @@ ThemeDrawCaption(PDRAW_CONTEXT pcontext, RECT* prcCurrent) lstrlenW(CaptionText), DT_VCENTER | DT_SINGLELINE | DT_END_ELLIPSIS, 0, - &rcPart , + &rcPart, pcontext->Active); HeapFree(GetProcessHeap(), 0, CaptionText); } @@ -446,7 +451,7 @@ DrawClassicFrame(PDRAW_CONTEXT context, RECT* prcCurrent) } /* 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 @@ ThemeDrawMenuBar(PDRAW_CONTEXT pcontext, PRECT prcCurrent) 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 @@ ThemeDrawMenuBar(PDRAW_CONTEXT pcontext, PRECT prcCurrent) 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 @@ ThemePaintWindow(PDRAW_CONTEXT pcontext, RECT* prcCurrent, BOOL bDoDoubleBufferi } /* - Message handlers + * Message handlers */ static LRESULT @@ -937,7 +942,6 @@ DefWndNCHitTest(HWND hWnd, POINT Point) if (!PtInRect(&WindowRect, Point)) { - INT ButtonWidth; if (wi.dwExStyle & WS_EX_TOOLWINDOW)