mirror of
https://github.com/reactos/reactos.git
synced 2025-02-25 01:39:30 +00:00
fixed bug in drawing the window caption
svn path=/trunk/; revision=6263
This commit is contained in:
parent
908cf73ea4
commit
8c2e8abc3d
1 changed files with 67 additions and 58 deletions
|
@ -1,4 +1,4 @@
|
|||
/* $Id: defwnd.c,v 1.94 2003/10/04 21:18:17 weiden Exp $
|
||||
/* $Id: defwnd.c,v 1.95 2003/10/07 15:42:37 weiden Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS user32.dll
|
||||
|
@ -432,12 +432,14 @@ DrawCaption(
|
|||
BOOL result = FALSE;
|
||||
RECT r = *lprc;
|
||||
UINT VCenter = 0, Padding = 0, Height;
|
||||
ULONG Style;
|
||||
WCHAR buffer[256];
|
||||
HFONT hFont = NULL;
|
||||
HFONT hOldFont = NULL;
|
||||
HBRUSH OldBrush = NULL;
|
||||
HDC MemDC = NULL;
|
||||
int ButtonWidth;
|
||||
COLORREF OldTextColor;
|
||||
|
||||
#ifdef DOUBLE_BUFFER_CAPTION
|
||||
HBITMAP MemBMP = NULL, OldBMP = NULL;
|
||||
|
@ -506,12 +508,16 @@ DrawCaption(
|
|||
|
||||
r.right = (lprc->right - lprc->left);
|
||||
ButtonWidth = GetSystemMetrics(SM_CXSIZE) - 2;
|
||||
if (GetWindowLongW(hWnd, GWL_STYLE) & WS_SYSMENU)
|
||||
Style = GetWindowLongW(hWnd, GWL_STYLE);
|
||||
if (Style & WS_SYSMENU)
|
||||
{
|
||||
r.right -= 3 + ButtonWidth;
|
||||
if (! (GetWindowLongW(hWnd, GWL_EXSTYLE) & WS_EX_TOOLWINDOW))
|
||||
{
|
||||
if(Style & (WS_MAXIMIZEBOX | WS_MINIMIZEBOX))
|
||||
r.right -= 2 + 2 * ButtonWidth;
|
||||
else
|
||||
r.right -= 2;
|
||||
}
|
||||
}
|
||||
r.right -= 2;
|
||||
|
@ -519,13 +525,8 @@ DrawCaption(
|
|||
nclm.cbSize = sizeof(nclm);
|
||||
if (! SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICSW), &nclm, 0)) goto cleanup;
|
||||
|
||||
if (uFlags & DC_INBUTTON)
|
||||
SetTextColor(MemDC, SysColours[ uFlags & DC_ACTIVE ? COLOR_BTNTEXT : COLOR_GRAYTEXT]);
|
||||
else
|
||||
SetTextColor(MemDC, SysColours[ uFlags & DC_ACTIVE ? COLOR_CAPTIONTEXT : COLOR_INACTIVECAPTIONTEXT]);
|
||||
|
||||
SetBkMode( MemDC, TRANSPARENT );
|
||||
if (GetWindowLongW(hWnd, GWL_STYLE) & WS_EX_TOOLWINDOW)
|
||||
if (Style & WS_EX_TOOLWINDOW)
|
||||
// if (uFlags & DC_SMALLCAP) // incorrect
|
||||
hFont = CreateFontIndirectW(&nclm.lfSmCaptionFont);
|
||||
else
|
||||
|
@ -536,9 +537,14 @@ DrawCaption(
|
|||
hOldFont = SelectObject(MemDC, hFont);
|
||||
if (! hOldFont) goto cleanup;
|
||||
|
||||
if (uFlags & DC_INBUTTON)
|
||||
OldTextColor = SetTextColor(MemDC, SysColours[ uFlags & DC_ACTIVE ? COLOR_BTNTEXT : COLOR_GRAYTEXT]);
|
||||
else
|
||||
OldTextColor = SetTextColor(MemDC, SysColours[ uFlags & DC_ACTIVE ? COLOR_CAPTIONTEXT : COLOR_INACTIVECAPTIONTEXT]);
|
||||
|
||||
DrawTextW(MemDC, buffer, wcslen(buffer), &r, DT_VCENTER | DT_END_ELLIPSIS);
|
||||
// Old method:
|
||||
// TextOutW(hDC, r.left + (GetSystemMetrics(SM_CXDLGFRAME) * 2), lprc->top + (nclm.lfCaptionFont.lfHeight / 2), buffer, wcslen(buffer));
|
||||
|
||||
SetTextColor(MemDC, OldTextColor);
|
||||
}
|
||||
|
||||
if (uFlags & DC_BUTTONS)
|
||||
|
@ -587,20 +593,19 @@ UserDrawCaptionNC (
|
|||
POINT OldPos;
|
||||
HPEN lPen, oPen;
|
||||
RECT r = *rect;
|
||||
ULONG Style, ExStyle;
|
||||
ULONG ExStyle;
|
||||
UINT capflags = 0;
|
||||
SIZE FrameSize;
|
||||
|
||||
Style = GetWindowLongW(hWnd, GWL_STYLE);
|
||||
ExStyle = GetWindowLongW(hWnd, GWL_EXSTYLE);
|
||||
|
||||
capflags = DC_ICON | DC_TEXT;
|
||||
capflags |= (active & DC_ACTIVE);
|
||||
|
||||
if(Style & WS_EX_TOOLWINDOW)
|
||||
if(style & WS_EX_TOOLWINDOW)
|
||||
capflags |= DC_SMALLCAP;
|
||||
|
||||
UserGetFrameSize(Style, ExStyle, &FrameSize);
|
||||
UserGetFrameSize(style, ExStyle, &FrameSize);
|
||||
|
||||
r.left += FrameSize.cx;
|
||||
r.top += FrameSize.cy;
|
||||
|
@ -623,7 +628,7 @@ UserDrawCaptionNC (
|
|||
r.left += GetSystemMetrics(SM_CXSIZE) + 1;
|
||||
UserDrawCaptionButton( hWnd, hDC, FALSE, DFCS_CAPTIONCLOSE);
|
||||
r.right -= GetSystemMetrics(SM_CXSMSIZE) + 1;
|
||||
if(Style & (WS_MAXIMIZEBOX | WS_MINIMIZEBOX))
|
||||
if((style & (WS_MAXIMIZEBOX | WS_MINIMIZEBOX)) && !(ExStyle & WS_EX_TOOLWINDOW))
|
||||
{
|
||||
UserDrawCaptionButton( hWnd, hDC, FALSE, DFCS_CAPTIONMIN);
|
||||
UserDrawCaptionButton( hWnd, hDC, FALSE, DFCS_CAPTIONMAX);
|
||||
|
@ -687,24 +692,27 @@ DefWndDoPaintNC(HWND hWnd, HRGN clip)
|
|||
{
|
||||
RECT r = rect;
|
||||
r.bottom = rect.top + GetSystemMetrics(SM_CYSIZE);
|
||||
rect.top += GetSystemMetrics(SM_CYSIZE) + FrameSize.cy;
|
||||
rect.top += GetSystemMetrics(SM_CYCAPTION) + FrameSize.cy;
|
||||
DbgPrint("1. rect.top == %d\n", rect.top);
|
||||
UserDrawCaptionNC(hDC, &r, hWnd, Style, Active);
|
||||
}
|
||||
|
||||
/* Draw menu bar. */
|
||||
if (UserHasMenu(hWnd, Style))
|
||||
{
|
||||
{DbgPrint("2. rect.top == %d\n", rect.top);
|
||||
RECT r = rect;
|
||||
r.bottom = rect.top + GetSystemMetrics(SM_CYMENU);
|
||||
r.left += FrameSize.cx;
|
||||
r.right -= FrameSize.cx;
|
||||
rect.top += MenuDrawMenuBar(hDC, &r, hWnd, FALSE);
|
||||
DbgPrint("3. rect.top == %d\n", rect.top);
|
||||
}
|
||||
|
||||
/* Draw scrollbars */
|
||||
if((Style & WS_VSCROLL) && (clientrect.right < rect.right - (2 * FrameSize.cx)))
|
||||
SCROLL_DrawScrollBar(hWnd, hDC, SB_VERT, TRUE, TRUE);
|
||||
if((Style & WS_HSCROLL) && (clientrect.bottom < rect.bottom - rect.top - (2 * FrameSize.cy)))
|
||||
DbgPrint("HSCROLL: %d < %d - %d - %d\n", clientrect.bottom, rect.bottom, rect.top, FrameSize.cy);
|
||||
if((Style & WS_HSCROLL) && (clientrect.bottom < rect.bottom - rect.top - FrameSize.cy))
|
||||
SCROLL_DrawScrollBar(hWnd, hDC, SB_HORZ, TRUE, TRUE);
|
||||
|
||||
/* FIXME: Draw size box.*/
|
||||
|
@ -927,7 +935,7 @@ VOID STATIC
|
|||
DefWndDoButton(HWND hWnd, WPARAM wParam)
|
||||
{
|
||||
MSG Msg;
|
||||
BOOL InBtn = TRUE, HasBtn = FALSE;
|
||||
BOOL InBtn, HasBtn = FALSE;
|
||||
ULONG Btn, Style;
|
||||
WPARAM SCMsg, CurBtn = wParam, OrigBtn = wParam;
|
||||
|
||||
|
@ -953,10 +961,11 @@ DefWndDoButton(HWND hWnd, WPARAM wParam)
|
|||
return;
|
||||
}
|
||||
|
||||
if(!HasBtn)
|
||||
return;
|
||||
InBtn = HasBtn;
|
||||
|
||||
SetCapture(hWnd);
|
||||
|
||||
if(HasBtn)
|
||||
UserDrawCaptionButton( hWnd, GetWindowDC(hWnd), HasBtn , Btn);
|
||||
|
||||
while(1)
|
||||
|
@ -975,12 +984,15 @@ DefWndDoButton(HWND hWnd, WPARAM wParam)
|
|||
}
|
||||
case WM_NCMOUSEMOVE:
|
||||
case WM_MOUSEMOVE:
|
||||
if(HasBtn)
|
||||
{
|
||||
CurBtn = DefWndHitTestNC(hWnd, Msg.pt);
|
||||
if(InBtn != (CurBtn == OrigBtn))
|
||||
{
|
||||
UserDrawCaptionButton( hWnd, GetWindowDC(hWnd), (CurBtn == OrigBtn) , Btn);
|
||||
}
|
||||
InBtn = CurBtn == OrigBtn;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1601,35 +1613,22 @@ DefWndHandleSysCommand(HWND hWnd, WPARAM wParam, POINT Pt)
|
|||
VOID
|
||||
DefWndAdjustRect(HWND hWnd, RECT* Rect, ULONG Style, BOOL Menu, ULONG ExStyle)
|
||||
{
|
||||
if (Style & WS_ICONIC)
|
||||
{
|
||||
return;
|
||||
}
|
||||
SIZE FrameSize;
|
||||
|
||||
if (UserHasThickFrameStyle(Style, ExStyle))
|
||||
{
|
||||
InflateRect(Rect, GetSystemMetrics(SM_CXFRAME),
|
||||
GetSystemMetrics(SM_CYFRAME));
|
||||
}
|
||||
else if (UserHasDlgFrameStyle(Style, ExStyle))
|
||||
{
|
||||
InflateRect(Rect, GetSystemMetrics(SM_CXDLGFRAME),
|
||||
GetSystemMetrics(SM_CYDLGFRAME));
|
||||
}
|
||||
else if (UserHasThinFrameStyle(Style, ExStyle))
|
||||
{
|
||||
InflateRect(Rect, GetSystemMetrics(SM_CXBORDER),
|
||||
GetSystemMetrics(SM_CYBORDER));
|
||||
}
|
||||
if (Style & WS_CAPTION)
|
||||
if(Style & WS_ICONIC)
|
||||
return;
|
||||
|
||||
UserGetFrameSize(Style, ExStyle, &FrameSize);
|
||||
|
||||
InflateRect(Rect, FrameSize.cx, FrameSize.cy);
|
||||
|
||||
if(Style & WS_CAPTION)
|
||||
{
|
||||
Rect->top -= GetSystemMetrics(SM_CYCAPTION);
|
||||
}
|
||||
if (Menu)
|
||||
if(Menu)
|
||||
{
|
||||
//Rect->top -= GetSystemMetrics(SM_CYMENU);
|
||||
Rect->top -= MenuGetMenuBarHeight(hWnd, Rect->right - Rect->left, -Rect->left, -Rect->top);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1638,6 +1637,7 @@ DefWndNCCalcSize(HWND hWnd, BOOL CalcSizeStruct, RECT* Rect)
|
|||
{
|
||||
LRESULT Result = 0;
|
||||
LONG ScrollXY;
|
||||
SIZE FrameSize;
|
||||
NCCALCSIZE_PARAMS *SizeStruct = (NCCALCSIZE_PARAMS *)Rect;
|
||||
RECT NewRect, TmpRect = {0, 0, 0, 0};
|
||||
ULONG ExStyle = GetWindowLongW(hWnd, GWL_EXSTYLE);
|
||||
|
@ -1656,7 +1656,13 @@ DefWndNCCalcSize(HWND hWnd, BOOL CalcSizeStruct, RECT* Rect)
|
|||
|
||||
if (!(Style & WS_MINIMIZE))
|
||||
{
|
||||
DefWndAdjustRect(hWnd, &TmpRect, Style, UserHasMenu(hWnd, Style), ExStyle);
|
||||
if(!(Style & WS_ICONIC))
|
||||
{
|
||||
UserGetFrameSize(Style, ExStyle, &FrameSize);
|
||||
InflateRect(&TmpRect, FrameSize.cx, FrameSize.cy);
|
||||
if(Style & WS_CAPTION)
|
||||
TmpRect.top -= GetSystemMetrics(SM_CYCAPTION);
|
||||
}
|
||||
|
||||
if(CalcSizeStruct)
|
||||
{
|
||||
|
@ -1676,6 +1682,9 @@ DefWndNCCalcSize(HWND hWnd, BOOL CalcSizeStruct, RECT* Rect)
|
|||
if(NewRect.left > NewRect.right)
|
||||
NewRect.right = NewRect.left;
|
||||
|
||||
if(UserHasMenu(hWnd, Style))
|
||||
NewRect.top += MenuGetMenuBarHeight(hWnd, NewRect.right - NewRect.left, NewRect.left, NewRect.top);
|
||||
|
||||
if (Style & WS_VSCROLL)
|
||||
{
|
||||
ScrollXY = GetSystemMetrics(SM_CXVSCROLL);
|
||||
|
|
Loading…
Reference in a new issue