mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-09-02 19:26:32 +00:00
[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 svn path=/trunk/; revision=70717
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user