mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 17:34:57 +00:00
Initial nonclient code
svn path=/trunk/; revision=3432
This commit is contained in:
parent
444da66580
commit
bf5d7b47c9
2 changed files with 474 additions and 1 deletions
|
@ -1,4 +1,4 @@
|
||||||
# $Id: Makefile,v 1.1 2002/06/13 20:36:39 dwelch Exp $
|
# $Id: Makefile,v 1.2 2002/08/28 21:56:50 jfilby Exp $
|
||||||
|
|
||||||
PATH_TO_TOP = ../..
|
PATH_TO_TOP = ../..
|
||||||
|
|
||||||
|
@ -57,6 +57,7 @@ WINDOWS_OBJECTS = \
|
||||||
windows/mdi.o \
|
windows/mdi.o \
|
||||||
windows/menu.o \
|
windows/menu.o \
|
||||||
windows/messagebox.o \
|
windows/messagebox.o \
|
||||||
|
windows/nonclient.o \
|
||||||
windows/paint.o \
|
windows/paint.o \
|
||||||
windows/prop.o \
|
windows/prop.o \
|
||||||
windows/rect.o \
|
windows/rect.o \
|
||||||
|
|
472
reactos/lib/user32/windows/nonclient.c
Normal file
472
reactos/lib/user32/windows/nonclient.c
Normal file
|
@ -0,0 +1,472 @@
|
||||||
|
/*
|
||||||
|
* ReactOS kernel
|
||||||
|
* Copyright (C) 1998, 1999, 2000, 2001 ReactOS Team
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* INCLUDES ******************************************************************/
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
#include <user32.h>
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
|
/* DEFINES ******************************************************************/
|
||||||
|
|
||||||
|
#define HAS_DLGFRAME(style,exStyle) \
|
||||||
|
(((exStyle) & WS_EX_DLGMODALFRAME) || \
|
||||||
|
(((style) & WS_DLGFRAME) && !((style) & WS_THICKFRAME)))
|
||||||
|
|
||||||
|
#define HAS_THICKFRAME(style,exStyle) \
|
||||||
|
(((style) & WS_THICKFRAME) && \
|
||||||
|
!(((style) & (WS_DLGFRAME|WS_BORDER)) == WS_DLGFRAME))
|
||||||
|
|
||||||
|
#define HAS_THINFRAME(style) \
|
||||||
|
(((style) & WS_BORDER) || !((style) & (WS_CHILD | WS_POPUP)))
|
||||||
|
|
||||||
|
#define HAS_BIGFRAME(style,exStyle) \
|
||||||
|
(((style) & (WS_THICKFRAME | WS_DLGFRAME)) || \
|
||||||
|
((exStyle) & WS_EX_DLGMODALFRAME))
|
||||||
|
|
||||||
|
/* FUNCTIONS *****************************************************************/
|
||||||
|
|
||||||
|
/* Get the 'inside' rectangle of a window, i.e. the whole window rectangle
|
||||||
|
* but without the borders (if any).
|
||||||
|
* The rectangle is in window coordinates (for drawing with GetWindowDC()).
|
||||||
|
*/
|
||||||
|
void NC_GetInsideRect( HWND hwnd, RECT *rect )
|
||||||
|
{
|
||||||
|
DWORD Style, ExStyle;
|
||||||
|
|
||||||
|
GetWindowRect(hwnd, rect);
|
||||||
|
Style = GetWindowLong(hwnd, GWL_STYLE);
|
||||||
|
ExStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
|
||||||
|
|
||||||
|
rect->top = rect->left = 0;
|
||||||
|
rect->right = rect->right - rect->left;
|
||||||
|
rect->bottom = rect->bottom - rect->top;
|
||||||
|
|
||||||
|
/* if (wndPtr->dwStyle & WS_ICONIC) goto END; */
|
||||||
|
|
||||||
|
/* Remove frame from rectangle */
|
||||||
|
if (HAS_THICKFRAME(Style, ExStyle ))
|
||||||
|
{
|
||||||
|
InflateRect( rect, -GetSystemMetrics(SM_CXFRAME), -GetSystemMetrics(SM_CYFRAME) );
|
||||||
|
}
|
||||||
|
else if (HAS_DLGFRAME(Style, ExStyle ))
|
||||||
|
{
|
||||||
|
InflateRect( rect, -GetSystemMetrics(SM_CXDLGFRAME), -GetSystemMetrics(SM_CYDLGFRAME));
|
||||||
|
}
|
||||||
|
else if (HAS_THINFRAME( Style ))
|
||||||
|
{
|
||||||
|
InflateRect( rect, -GetSystemMetrics(SM_CXBORDER), -GetSystemMetrics(SM_CYBORDER) );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* We have additional border information if the window
|
||||||
|
* is a child (but not an MDI child) */
|
||||||
|
if ( (Style & WS_CHILD) &&
|
||||||
|
( (ExStyle & WS_EX_MDICHILD) == 0 ) )
|
||||||
|
{
|
||||||
|
if (ExStyle & WS_EX_CLIENTEDGE)
|
||||||
|
InflateRect (rect, -GetSystemMetrics(SM_CXEDGE), -GetSystemMetrics(SM_CYEDGE));
|
||||||
|
if (ExStyle & WS_EX_STATICEDGE)
|
||||||
|
InflateRect (rect, -GetSystemMetrics(SM_CXBORDER), -GetSystemMetrics(SM_CYBORDER));
|
||||||
|
}
|
||||||
|
|
||||||
|
END:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Draws the Win95 system icon. */
|
||||||
|
BOOL
|
||||||
|
NC_DrawSysButton95 (HWND hwnd, HDC hdc, BOOL down)
|
||||||
|
{
|
||||||
|
HICON hIcon = NC_IconForWindow( hwnd );
|
||||||
|
|
||||||
|
if (hIcon)
|
||||||
|
{
|
||||||
|
RECT rect;
|
||||||
|
NC_GetInsideRect( hwnd, &rect );
|
||||||
|
DrawIconEx (hdc, rect.left + 2, rect.top + 2, hIcon,
|
||||||
|
GetSystemMetrics(SM_CXSMICON),
|
||||||
|
GetSystemMetrics(SM_CYSMICON), 0, 0, DI_NORMAL);
|
||||||
|
}
|
||||||
|
return (hIcon != 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Draws the Win95 close button. */
|
||||||
|
static void NC_DrawCloseButton95 (HWND hwnd, HDC hdc, BOOL down, BOOL bGrayed)
|
||||||
|
{
|
||||||
|
RECT rect;
|
||||||
|
|
||||||
|
NC_GetInsideRect( hwnd, &rect );
|
||||||
|
|
||||||
|
/* A tool window has a smaller Close button */
|
||||||
|
if (GetWindowLongA( hwnd, GWL_EXSTYLE ) & WS_EX_TOOLWINDOW)
|
||||||
|
{
|
||||||
|
INT iBmpHeight = 11; /* Windows does not use SM_CXSMSIZE and SM_CYSMSIZE */
|
||||||
|
INT iBmpWidth = 11; /* it uses 11x11 for the close button in tool window */
|
||||||
|
INT iCaptionHeight = GetSystemMetrics(SM_CYSMCAPTION);
|
||||||
|
|
||||||
|
rect.top = rect.top + (iCaptionHeight - 1 - iBmpHeight) / 2;
|
||||||
|
rect.left = rect.right - (iCaptionHeight + 1 + iBmpWidth) / 2;
|
||||||
|
rect.bottom = rect.top + iBmpHeight;
|
||||||
|
rect.right = rect.left + iBmpWidth;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rect.left = rect.right - GetSystemMetrics(SM_CXSIZE) - 1;
|
||||||
|
rect.bottom = rect.top + GetSystemMetrics(SM_CYSIZE) - 1;
|
||||||
|
rect.top += 2;
|
||||||
|
rect.right -= 2;
|
||||||
|
}
|
||||||
|
DrawFrameControl( hdc, &rect, DFC_CAPTION,
|
||||||
|
(DFCS_CAPTIONCLOSE |
|
||||||
|
(down ? DFCS_PUSHED : 0) |
|
||||||
|
(bGrayed ? DFCS_INACTIVE : 0)) );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Draws the maximize button for Win95 style windows. */
|
||||||
|
static void NC_DrawMaxButton95(HWND hwnd,HDC hdc,BOOL down, BOOL bGrayed)
|
||||||
|
{
|
||||||
|
RECT rect;
|
||||||
|
UINT flags = IsZoomed(hwnd) ? DFCS_CAPTIONRESTORE : DFCS_CAPTIONMAX;
|
||||||
|
|
||||||
|
NC_GetInsideRect( hwnd, &rect );
|
||||||
|
if (GetWindowLongA( hwnd, GWL_STYLE) & WS_SYSMENU)
|
||||||
|
rect.right -= GetSystemMetrics(SM_CXSIZE) + 1;
|
||||||
|
rect.left = rect.right - GetSystemMetrics(SM_CXSIZE);
|
||||||
|
rect.bottom = rect.top + GetSystemMetrics(SM_CYSIZE) - 1;
|
||||||
|
rect.top += 2;
|
||||||
|
rect.right -= 2;
|
||||||
|
if (down) flags |= DFCS_PUSHED;
|
||||||
|
if (bGrayed) flags |= DFCS_INACTIVE;
|
||||||
|
DrawFrameControl( hdc, &rect, DFC_CAPTION, flags );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Draws the minimize button for Win95 style windows. */
|
||||||
|
static void NC_DrawMinButton95(HWND hwnd,HDC hdc,BOOL down, BOOL bGrayed)
|
||||||
|
{
|
||||||
|
RECT rect;
|
||||||
|
UINT flags = DFCS_CAPTIONMIN;
|
||||||
|
DWORD style = GetWindowLongA( hwnd, GWL_STYLE );
|
||||||
|
|
||||||
|
NC_GetInsideRect( hwnd, &rect );
|
||||||
|
if (style & WS_SYSMENU)
|
||||||
|
rect.right -= GetSystemMetrics(SM_CXSIZE) + 1;
|
||||||
|
if (style & (WS_MAXIMIZEBOX|WS_MINIMIZEBOX))
|
||||||
|
rect.right -= GetSystemMetrics(SM_CXSIZE) - 2;
|
||||||
|
rect.left = rect.right - GetSystemMetrics(SM_CXSIZE);
|
||||||
|
rect.bottom = rect.top + GetSystemMetrics(SM_CYSIZE) - 1;
|
||||||
|
rect.top += 2;
|
||||||
|
rect.right -= 2;
|
||||||
|
if (down) flags |= DFCS_PUSHED;
|
||||||
|
if (bGrayed) flags |= DFCS_INACTIVE;
|
||||||
|
DrawFrameControl( hdc, &rect, DFC_CAPTION, flags );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Draw a window frame inside the given rectangle, and update the rectangle. */
|
||||||
|
static void NC_DrawFrame95(
|
||||||
|
HDC hdc,
|
||||||
|
RECT *rect,
|
||||||
|
BOOL active,
|
||||||
|
DWORD style,
|
||||||
|
DWORD exStyle)
|
||||||
|
{
|
||||||
|
INT width, height;
|
||||||
|
|
||||||
|
/* Firstly the "thick" frame */
|
||||||
|
if (style & WS_THICKFRAME)
|
||||||
|
{
|
||||||
|
width = GetSystemMetrics(SM_CXFRAME) - GetSystemMetrics(SM_CXDLGFRAME);
|
||||||
|
height = GetSystemMetrics(SM_CYFRAME) - GetSystemMetrics(SM_CYDLGFRAME);
|
||||||
|
|
||||||
|
/* SelectObject( hdc, GetSysColorBrush(active ? COLOR_ACTIVEBORDER :
|
||||||
|
COLOR_INACTIVEBORDER) ); */
|
||||||
|
/* Draw frame */
|
||||||
|
PatBlt( hdc, rect->left, rect->top,
|
||||||
|
rect->right - rect->left, height, PATCOPY );
|
||||||
|
PatBlt( hdc, rect->left, rect->top,
|
||||||
|
width, rect->bottom - rect->top, PATCOPY );
|
||||||
|
PatBlt( hdc, rect->left, rect->bottom - 1,
|
||||||
|
rect->right - rect->left, -height, PATCOPY );
|
||||||
|
PatBlt( hdc, rect->right - 1, rect->top,
|
||||||
|
-width, rect->bottom - rect->top, PATCOPY );
|
||||||
|
|
||||||
|
InflateRect( rect, -width, -height );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Now the other bit of the frame */
|
||||||
|
if ((style & (WS_BORDER|WS_DLGFRAME)) ||
|
||||||
|
(exStyle & WS_EX_DLGMODALFRAME))
|
||||||
|
{
|
||||||
|
width = GetSystemMetrics(SM_CXDLGFRAME) - GetSystemMetrics(SM_CXEDGE);
|
||||||
|
height = GetSystemMetrics(SM_CYDLGFRAME) - GetSystemMetrics(SM_CYEDGE);
|
||||||
|
/* This should give a value of 1 that should also work for a border */
|
||||||
|
|
||||||
|
/* SelectObject( hdc, GetSysColorBrush(
|
||||||
|
(exStyle & (WS_EX_DLGMODALFRAME|WS_EX_CLIENTEDGE)) ?
|
||||||
|
COLOR_3DFACE :
|
||||||
|
(exStyle & WS_EX_STATICEDGE) ?
|
||||||
|
COLOR_WINDOWFRAME :
|
||||||
|
(style & (WS_DLGFRAME|WS_THICKFRAME)) ?
|
||||||
|
COLOR_3DFACE :
|
||||||
|
// else
|
||||||
|
COLOR_WINDOWFRAME)); */
|
||||||
|
|
||||||
|
/* Draw frame */
|
||||||
|
PatBlt( hdc, rect->left, rect->top,
|
||||||
|
rect->right - rect->left, height, PATCOPY );
|
||||||
|
PatBlt( hdc, rect->left, rect->top,
|
||||||
|
width, rect->bottom - rect->top, PATCOPY );
|
||||||
|
PatBlt( hdc, rect->left, rect->bottom - 1,
|
||||||
|
rect->right - rect->left, -height, PATCOPY );
|
||||||
|
PatBlt( hdc, rect->right - 1, rect->top,
|
||||||
|
-width, rect->bottom - rect->top, PATCOPY );
|
||||||
|
|
||||||
|
InflateRect( rect, -width, -height );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static HICON NC_IconForWindow( HWND hwnd )
|
||||||
|
{
|
||||||
|
HICON hIcon = (HICON) GetClassLongA( hwnd, GCL_HICONSM );
|
||||||
|
if (!hIcon) hIcon = (HICON) GetClassLongA( hwnd, GCL_HICON );
|
||||||
|
|
||||||
|
/* If there is no hIcon specified and this is a modal dialog,
|
||||||
|
* get the default one.
|
||||||
|
*/
|
||||||
|
/* if (!hIcon && (GetWindowLongA( hwnd, GWL_STYLE ) & DS_MODALFRAME))
|
||||||
|
hIcon = LoadImageA(0, IDI_WINLOGOA, IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR); */
|
||||||
|
return hIcon;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Draw the window caption for Win95 style windows. The correct pen for the window frame must be selected in the DC. */
|
||||||
|
static void NC_DrawCaption95(
|
||||||
|
HDC hdc,
|
||||||
|
RECT *rect,
|
||||||
|
HWND hwnd,
|
||||||
|
DWORD style,
|
||||||
|
DWORD exStyle,
|
||||||
|
BOOL active )
|
||||||
|
{
|
||||||
|
RECT r = *rect;
|
||||||
|
char buffer[256];
|
||||||
|
HPEN hPrevPen;
|
||||||
|
HMENU hSysMenu;
|
||||||
|
|
||||||
|
/* hPrevPen = SelectObject( hdc, SYSCOLOR_GetPen(
|
||||||
|
((exStyle & (WS_EX_STATICEDGE|WS_EX_CLIENTEDGE|
|
||||||
|
WS_EX_DLGMODALFRAME)) == WS_EX_STATICEDGE) ?
|
||||||
|
COLOR_WINDOWFRAME : COLOR_3DFACE) ); */
|
||||||
|
MoveToEx( hdc, r.left, r.bottom - 1, NULL );
|
||||||
|
LineTo( hdc, r.right, r.bottom - 1 );
|
||||||
|
SelectObject( hdc, hPrevPen );
|
||||||
|
r.bottom--;
|
||||||
|
|
||||||
|
/* FillRect( hdc, &r, GetSysColorBrush(active ? COLOR_ACTIVECAPTION :
|
||||||
|
COLOR_INACTIVECAPTION) ); */
|
||||||
|
|
||||||
|
if ((style & WS_SYSMENU) && !(exStyle & WS_EX_TOOLWINDOW)) {
|
||||||
|
if (NC_DrawSysButton95 (hwnd, hdc, FALSE))
|
||||||
|
r.left += GetSystemMetrics(SM_CYCAPTION) - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (style & WS_SYSMENU)
|
||||||
|
{
|
||||||
|
UINT state;
|
||||||
|
|
||||||
|
/* Go get the sysmenu */
|
||||||
|
hSysMenu = GetSystemMenu(hwnd, FALSE);
|
||||||
|
state = GetMenuState(hSysMenu, SC_CLOSE, MF_BYCOMMAND);
|
||||||
|
|
||||||
|
/* Draw a grayed close button if disabled and a normal one if SC_CLOSE is not there */
|
||||||
|
NC_DrawCloseButton95 (hwnd, hdc, FALSE,
|
||||||
|
((((state & MF_DISABLED) || (state & MF_GRAYED))) && (state != 0xFFFFFFFF)));
|
||||||
|
r.right -= GetSystemMetrics(SM_CYCAPTION) - 1;
|
||||||
|
|
||||||
|
if ((style & WS_MAXIMIZEBOX) || (style & WS_MINIMIZEBOX))
|
||||||
|
{
|
||||||
|
/* In win95 the two buttons are always there */
|
||||||
|
/* But if the menu item is not in the menu they're disabled*/
|
||||||
|
|
||||||
|
NC_DrawMaxButton95( hwnd, hdc, FALSE, (!(style & WS_MAXIMIZEBOX)));
|
||||||
|
r.right -= GetSystemMetrics(SM_CXSIZE) + 1;
|
||||||
|
|
||||||
|
NC_DrawMinButton95( hwnd, hdc, FALSE, (!(style & WS_MINIMIZEBOX)));
|
||||||
|
r.right -= GetSystemMetrics(SM_CXSIZE) + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GetWindowTextA( hwnd, buffer, sizeof(buffer) )) {
|
||||||
|
NONCLIENTMETRICS nclm;
|
||||||
|
HFONT hFont, hOldFont;
|
||||||
|
nclm.cbSize = sizeof(NONCLIENTMETRICS);
|
||||||
|
SystemParametersInfoA (SPI_GETNONCLIENTMETRICS, 0, &nclm, 0);
|
||||||
|
if (exStyle & WS_EX_TOOLWINDOW)
|
||||||
|
hFont = CreateFontIndirectA (&nclm.lfSmCaptionFont);
|
||||||
|
else
|
||||||
|
hFont = CreateFontIndirectA (&nclm.lfCaptionFont);
|
||||||
|
hOldFont = SelectObject (hdc, hFont);
|
||||||
|
/* if (active) SetTextColor( hdc, GetSysColor( COLOR_CAPTIONTEXT ) );
|
||||||
|
else SetTextColor( hdc, GetSysColor( COLOR_INACTIVECAPTIONTEXT ) ); */
|
||||||
|
SetBkMode( hdc, TRANSPARENT );
|
||||||
|
r.left += 2;
|
||||||
|
DrawTextA( hdc, buffer, -1, &r,
|
||||||
|
DT_SINGLELINE | DT_VCENTER | DT_NOPREFIX | DT_LEFT );
|
||||||
|
DeleteObject (SelectObject (hdc, hOldFont));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void NC_DoNCPaint95(
|
||||||
|
HWND hwnd,
|
||||||
|
HRGN clip,
|
||||||
|
BOOL suppress_menupaint)
|
||||||
|
{
|
||||||
|
HDC hdc;
|
||||||
|
RECT rfuzz, rect, rectClip;
|
||||||
|
BOOL active;
|
||||||
|
DWORD Style, ExStyle;
|
||||||
|
WORD Flags;
|
||||||
|
RECT ClientRect, WindowRect;
|
||||||
|
int has_menu;
|
||||||
|
|
||||||
|
/* FIXME: Determine has_menu */
|
||||||
|
Style = GetWindowLong(hwnd, GWL_STYLE);
|
||||||
|
ExStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
|
||||||
|
GetWindowRect(hwnd, &WindowRect);
|
||||||
|
GetClientRect(hwnd, &ClientRect);
|
||||||
|
|
||||||
|
/* Flags = wndPtr->flags; */
|
||||||
|
|
||||||
|
/* if (Style & WS_MINIMIZE ||
|
||||||
|
!WIN_IsWindowDrawable(hwnd, 0)) return; */ /* Nothing to do */
|
||||||
|
|
||||||
|
active = TRUE /* Flags & WIN_NCACTIVATED */;
|
||||||
|
|
||||||
|
DPRINT("%04x %d\n", hwnd, active);
|
||||||
|
|
||||||
|
/* MSDN docs are pretty idiotic here, they say app CAN use clipRgn in
|
||||||
|
the call to GetDCEx implying that it is allowed not to use it either.
|
||||||
|
However, the suggested GetDCEx( , DCX_WINDOW | DCX_INTERSECTRGN)
|
||||||
|
will cause clipRgn to be deleted after ReleaseDC().
|
||||||
|
Now, how is the "system" supposed to tell what happened?
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (!(hdc = GetDCEx(hwnd, (clip > 1) ? clip : 0, DCX_USESTYLE | DCX_WINDOW |
|
||||||
|
((clip > 1) ?(DCX_INTERSECTRGN | DCX_KEEPCLIPRGN) : 0)))) return;
|
||||||
|
|
||||||
|
|
||||||
|
/* if (ExcludeVisRect(hdc, ClientRect.left-WindowRect.left,
|
||||||
|
ClientRect.top-WindowRect.top,
|
||||||
|
ClientRect.right-WindowRect.left,
|
||||||
|
ClientRect.bottom-WindowRect.top)
|
||||||
|
== NULLREGION)
|
||||||
|
{
|
||||||
|
ReleaseDC(hwnd, hdc);
|
||||||
|
return;
|
||||||
|
} */
|
||||||
|
|
||||||
|
rect.top = rect.left = 0;
|
||||||
|
rect.right = WindowRect.right - WindowRect.left;
|
||||||
|
rect.bottom = WindowRect.bottom - WindowRect.top;
|
||||||
|
|
||||||
|
if(clip > 1)
|
||||||
|
GetRgnBox(clip, &rectClip);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
clip = 0;
|
||||||
|
rectClip = rect;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* SelectObject(hdc, SYSCOLOR_GetPen(COLOR_WINDOWFRAME)); */
|
||||||
|
|
||||||
|
/* if (HAS_STATICOUTERFRAME(Style, ExStyle)) {
|
||||||
|
DrawEdge (hdc, &rect, BDR_SUNKENOUTER, BF_RECT | BF_ADJUST);
|
||||||
|
}
|
||||||
|
else if (HAS_BIGFRAME(Style, ExStyle)) {
|
||||||
|
DrawEdge (hdc, &rect, EDGE_RAISED, BF_RECT | BF_ADJUST);
|
||||||
|
} */
|
||||||
|
|
||||||
|
NC_DrawFrame95(hdc, &rect, active, Style, ExStyle);
|
||||||
|
/*
|
||||||
|
if ((Style & WS_CAPTION) == WS_CAPTION)
|
||||||
|
{
|
||||||
|
RECT r = rect;
|
||||||
|
if (ExStyle & WS_EX_TOOLWINDOW) {
|
||||||
|
r.bottom = rect.top + GetSystemMetrics(SM_CYSMCAPTION);
|
||||||
|
rect.top += GetSystemMetrics(SM_CYSMCAPTION);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
r.bottom = rect.top + GetSystemMetrics(SM_CYCAPTION);
|
||||||
|
rect.top += GetSystemMetrics(SM_CYCAPTION);
|
||||||
|
}
|
||||||
|
if(!clip || IntersectRect(&rfuzz, &r, &rectClip))
|
||||||
|
NC_DrawCaption95 (hdc, &r, hwnd, Style,
|
||||||
|
ExStyle, active);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
/* if (has_menu)
|
||||||
|
{
|
||||||
|
RECT r = rect;
|
||||||
|
r.bottom = rect.top + GetSystemMetrics(SM_CYMENU);
|
||||||
|
|
||||||
|
DPRINT("Calling DrawMenuBar with rect (%d, %d)-(%d, %d)\n",
|
||||||
|
r.left, r.top, r.right, r.bottom);
|
||||||
|
|
||||||
|
rect.top += MENU_DrawMenuBar(hdc, &r, hwnd, suppress_menupaint) + 1;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
DPRINT("After MenuBar, rect is (%d, %d)-(%d, %d).\n",
|
||||||
|
rect.left, rect.top, rect.right, rect.bottom);
|
||||||
|
|
||||||
|
if (ExStyle & WS_EX_CLIENTEDGE)
|
||||||
|
DrawEdge (hdc, &rect, EDGE_SUNKEN, BF_RECT | BF_ADJUST);
|
||||||
|
|
||||||
|
/* Draw the scroll-bars */
|
||||||
|
/*
|
||||||
|
if (Style & WS_VSCROLL)
|
||||||
|
SCROLL_DrawScrollBar(hwnd, hdc, SB_VERT, TRUE, TRUE);
|
||||||
|
if (Style & WS_HSCROLL)
|
||||||
|
SCROLL_DrawScrollBar(hwnd, hdc, SB_HORZ, TRUE, TRUE);
|
||||||
|
*/
|
||||||
|
/* Draw the "size-box" */
|
||||||
|
if ((Style & WS_VSCROLL) && (Style & WS_HSCROLL))
|
||||||
|
{
|
||||||
|
RECT r = rect;
|
||||||
|
r.left = r.right - GetSystemMetrics(SM_CXVSCROLL) + 1;
|
||||||
|
r.top = r.bottom - GetSystemMetrics(SM_CYHSCROLL) + 1;
|
||||||
|
/* FillRect(hdc, &r, GetSysColorBrush(COLOR_SCROLLBAR)); */
|
||||||
|
}
|
||||||
|
|
||||||
|
ReleaseDC(hwnd, hdc);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Handle a WM_NCPAINT message. Called from DefWindowProc(). */
|
||||||
|
LONG NC_HandleNCPaint(HWND hwnd , HRGN clip)
|
||||||
|
{
|
||||||
|
DWORD Style = GetWindowLongW(hwnd, GWL_STYLE);
|
||||||
|
|
||||||
|
if(Style & WS_VISIBLE)
|
||||||
|
{
|
||||||
|
/* if(Style & WS_MINIMIZE)
|
||||||
|
WINPOS_RedrawIconTitle(hwnd); */
|
||||||
|
/* else if (TWEAK_WineLook == WIN31_LOOK)
|
||||||
|
NC_DoNCPaint(hwnd, clip, FALSE); */
|
||||||
|
/* else */
|
||||||
|
NC_DoNCPaint95(hwnd, clip, FALSE);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in a new issue