/* GLOBALS *******************************************************************/
-static HBITMAP hbitmapClose;
-static HBITMAP hbitmapMinimize;
-static HBITMAP hbitmapMinimizeD;
-static HBITMAP hbitmapMaximize;
-static HBITMAP hbitmapMaximizeD;
-static HBITMAP hbitmapRestore;
-static HBITMAP hbitmapRestoreD;
-
+static HBITMAP hbSysMenu;
+/* TODO: widgets will be cached here.
+static HBITMAP hbClose;
+static HBITMAP hbCloseD;
+static HBITMAP hbMinimize;
+static HBITMAP hbMinimizeD;
+static HBITMAP hbRestore;
+static HBITMAP hbRestoreD;
+static HBITMAP hbMaximize;
+static HBITMAP hbScrUp;
+static HBITMAP hbScrDwn;
+static HBITMAP hbScrLeft;
+static HBITMAP hbScrRight;
+*/
static COLORREF SysColours[] =
{
RGB(224, 224, 224) /* COLOR_SCROLLBAR */,
- RGB(192, 192, 192) /* COLOR_BACKGROUND */,
- RGB(0, 64, 128) /* COLOR_ACTIVECAPTION */,
- RGB(255, 255, 255) /* COLOR_INACTIVECAPTION */,
- RGB(255, 255, 255) /* COLOR_MENU */,
- RGB(255, 255, 255) /* COLOR_WINDOW */,
- RGB(0, 0, 0) /* COLOR_WINDOWFRAME */,
+ RGB(58, 110, 165) /* COLOR_BACKGROUND */,
+ RGB(0, 0, 128) /* COLOR_ACTIVECAPTION */,
+ RGB(128, 128, 128) /* COLOR_INACTIVECAPTION */,
+ RGB(192, 192, 192) /* COLOR_MENU */,
+ RGB(192, 192, 192) /* COLOR_WINDOW */,
+ RGB(192, 192, 192) /* COLOR_WINDOWFRAME */,
RGB(0, 0, 0) /* COLOR_MENUTEXT */,
RGB(0, 0, 0) /* COLOR_WINDOWTEXT */,
RGB(255, 255, 255) /* COLOR_CAPTIONTEXT */,
RGB(255, 255, 255) /* COLOR_INACTIVEBORDER */,
RGB(255, 255, 232) /* COLOR_APPWORKSPACE */,
RGB(224, 224, 224) /* COLOR_HILIGHT */,
- RGB(0, 0, 0) /* COLOR_HILIGHTTEXT */,
+ RGB(0, 0, 128) /* COLOR_HILIGHTTEXT */,
RGB(192, 192, 192) /* COLOR_BTNFACE */,
RGB(128, 128, 128) /* COLOR_BTNSHADOW */,
RGB(192, 192, 192) /* COLOR_GRAYTEXT */,
RGB(0, 0, 0) /* COLOR_BTNTEXT */,
- RGB(0, 0, 0) /* COLOR_INACTIVECAPTIONTEXT */,
+ RGB(192, 192, 192) /* COLOR_INACTIVECAPTIONTEXT */,
RGB(255, 255, 255) /* COLOR_BTNHILIGHT */,
RGB(32, 32, 32) /* COLOR_3DDKSHADOW */,
RGB(192, 192, 192) /* COLOR_3DLIGHT */,
/* FUNCTIONS *****************************************************************/
+BOOL IsMaxBoxActive(HWND hWnd)
+{
+ ULONG uStyle = GetWindowLong( hWnd, GWL_STYLE );
+ return (uStyle & WS_MAXIMIZEBOX);
+}
+
+BOOL IsCloseBoxActive( HWND hWnd )
+{
+ ULONG uStyle = GetWindowLong(hWnd, GWL_STYLE );
+ return ( uStyle & WS_SYSMENU );
+}
+
+BOOL IsMinBoxActive( HWND hWnd )
+{
+ ULONG uStyle = GetWindowLong( hWnd, GWL_STYLE );
+ return (uStyle & WS_MINIMIZEBOX);
+}
+
+INT UIGetFrameSizeX( HWND hWnd )
+{
+ ULONG uStyle = GetWindowLong( hWnd, GWL_STYLE );
+
+ if ( uStyle & WS_THICKFRAME )
+ return GetSystemMetrics( SM_CXSIZEFRAME );
+ else
+ return GetSystemMetrics( SM_CXFRAME );
+}
+
+INT UIGetFrameSizeY( HWND hWnd )
+{
+ ULONG uStyle = GetWindowLong( hWnd, GWL_STYLE );
+
+ if ( uStyle & WS_THICKFRAME )
+ return GetSystemMetrics( SM_CYSIZEFRAME );
+ else
+ return GetSystemMetrics( SM_CYFRAME );
+}
+
VOID
-UserSetupInternalPos(VOID)
+UserSetupInternalPos( VOID )
{
LPSTR Str = "SysIP";
AtomInternalPos = GlobalAddAtomA(Str);
}
-/* ReactOS extension */
HPEN STDCALL
-GetSysColorPen(int nIndex)
+GetSysColorPen( int nIndex )
{
return(CreatePen(PS_SOLID, 1, SysColours[nIndex]));
}
HBRUSH STDCALL
-GetSysColorBrush(int nIndex)
+GetSysColorBrush( int nIndex )
{
return(CreateSolidBrush(SysColours[nIndex]));
}
LRESULT STDCALL
-DefFrameProcA(HWND hWnd,
+DefFrameProcA( HWND hWnd,
HWND hWndMDIClient,
UINT uMsg,
WPARAM wParam,
- LPARAM lParam)
+ LPARAM lParam )
{
return((LRESULT)0);
}
+/*
+static LRESULT WINAPI DefButtonWndProc( HWND hWnd, UINT uMsg,
+ WPARAM wParam, LPARAM lParam )
+{
+ return ((LRESULT)0);
+}
+
+
+static LRESULT WINAPI DefDesktopWndProc( HWND hWnd, UINT uMsg,
+ WPARAM wParam, LPARAM lParam )
+{
+ return ((LRESULT)0);
+}
+*/
LRESULT STDCALL
DefFrameProcW(HWND hWnd,
HWND hWndMDIClient,
(ExStyle & WS_EX_DLGMODALFRAME));
}
-void UserGetInsideRectNC( HWND hwnd, RECT *rect )
+INT GetFrameSize(HWND hWnd)
+{
+ ULONG uStyle;
+ ULONG uExStyle;
+
+ uStyle = GetWindowLong(hWnd, GWL_STYLE);
+ uExStyle = GetWindowLong(hWnd, GWL_EXSTYLE);
+
+ if (UserHasThinFrameStyle(uStyle, uExStyle))
+ {
+ return GetSystemMetrics( SM_CXBORDER );
+ }
+ else if (UserHasDlgFrameStyle(uStyle, uExStyle))
+ {
+ return GetSystemMetrics( SM_CXDLGFRAME );
+ }
+ return GetSystemMetrics( SM_CXFRAME );
+}
+
+void UserGetInsideRectNC( HWND hWnd, RECT *rect )
{
RECT WindowRect;
ULONG Style;
ULONG ExStyle;
- Style = GetWindowLong(hwnd, GWL_STYLE);
- ExStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
- GetWindowRect(hwnd, &WindowRect);
+ Style = GetWindowLong(hWnd, GWL_STYLE);
+ ExStyle = GetWindowLong(hWnd, GWL_EXSTYLE);
+ GetWindowRect(hWnd, &WindowRect);
rect->top = rect->left = 0;
rect->right = WindowRect.right - WindowRect.left;
rect->bottom = WindowRect.bottom - WindowRect.top;
}
}
-void UserDrawSysButton( HWND hwnd, HDC hdc, BOOL down )
+void UserDrawSysMenuButton( HWND hWnd, HDC hDC, BOOL down )
{
- RECT rect;
- HDC hdcMem;
- HBITMAP hbitmap;
- ULONG Style;
-
- Style = GetWindowLong(hwnd, GWL_STYLE);
- UserGetInsideRectNC( hwnd, &rect );
- hdcMem = CreateCompatibleDC( hdc );
- hbitmap = SelectObject( hdcMem, hbitmapClose );
- BitBlt(hdc, rect.left, rect.top, GetSystemMetrics(SM_CXSIZE),
- GetSystemMetrics(SM_CYSIZE), hdcMem,
- (Style & WS_CHILD) ? GetSystemMetrics(SM_CXSIZE) : 0, 0,
- down ? NOTSRCCOPY : SRCCOPY );
- SelectObject( hdcMem, hbitmap );
- DeleteDC( hdcMem );
+ RECT Rect;
+ HDC hDcMem;
+ HBITMAP hSavedBitmap;
+
+ hbSysMenu = LoadBitmap(0, MAKEINTRESOURCE(OBM_CLOSE));
+ UserGetInsideRectNC(hWnd, &Rect);
+ hDcMem = CreateCompatibleDC(hDC);
+ hSavedBitmap = SelectObject(hDcMem, hbSysMenu);
+ BitBlt(hDC, Rect.left + 2, Rect.top +
+ 2, 16, 16, hDcMem,
+ (GetWindowLong(hWnd, GWL_STYLE) & WS_CHILD) ?
+ GetSystemMetrics(SM_CXSIZE): 0, 0, SRCCOPY);
+ SelectObject(hDcMem, hSavedBitmap);
+ DeleteDC(hDcMem);
}
-static void UserDrawMaxButton( HWND hwnd, HDC hdc, BOOL down )
+/* FIXME: Cache bitmaps, then just bitblt instead of calling DFC() (and
+ wasting precious CPU cycles) every time */
+
+static void UserDrawCloseButton ( HWND hWnd, HDC hDC, BOOL bDown )
{
RECT rect;
- HDC hdcMem;
-
- UserGetInsideRectNC( hwnd, &rect );
- hdcMem = CreateCompatibleDC( hdc );
- SelectObject( hdcMem, (IsZoomed(hwnd)
- ? (down ? hbitmapRestoreD : hbitmapRestore)
- : (down ? hbitmapMaximizeD : hbitmapMaximize)) );
- BitBlt( hdc, rect.right - GetSystemMetrics(SM_CXSMSIZE) - 1, rect.top,
- GetSystemMetrics(SM_CXSMSIZE) + 1, GetSystemMetrics(SM_CYSMSIZE), hdcMem, 0, 0,
- SRCCOPY );
- DeleteDC( hdcMem );
-}
-
-static void UserDrawMinButton( HWND hwnd, HDC hdc, BOOL down)
-{
- RECT rect;
- HDC hdcMem;
-
- UserGetInsideRectNC(hwnd, &rect);
- hdcMem = CreateCompatibleDC(hdc);
- SelectObject(hdcMem, (down ? hbitmapMinimizeD : hbitmapMinimize));
- if (GetWindowLong(hwnd, GWL_STYLE) & WS_MAXIMIZEBOX)
+
+ BOOL bToolWindow = GetWindowLongA( hWnd, GWL_EXSTYLE ) & WS_EX_TOOLWINDOW;
+ INT iBmpWidth = (bToolWindow ? GetSystemMetrics(SM_CXSMSIZE) :
+ GetSystemMetrics(SM_CXSIZE)) - 2;
+ INT iBmpHeight = (bToolWindow ? GetSystemMetrics(SM_CYSMSIZE) :
+ GetSystemMetrics(SM_CYSIZE) - 4);
+ INT OffsetX = UIGetFrameSizeY( hWnd );
+ INT OffsetY = UIGetFrameSizeY( hWnd );
+
+
+ if(!(GetWindowLong( hWnd, GWL_STYLE ) & WS_SYSMENU))
{
- rect.right -= GetSystemMetrics(SM_CXSMSIZE)+1;
+ return;
}
- BitBlt( hdc, rect.right - GetSystemMetrics(SM_CXSMSIZE) - 1, rect.top,
- GetSystemMetrics(SM_CXSMSIZE) + 1, GetSystemMetrics(SM_CYSMSIZE),
- hdcMem, 0, 0,
- SRCCOPY );
- DeleteDC( hdcMem );
+ GetWindowRect( hWnd, &rect );
+
+ rect.right = rect.right - rect.left;
+ rect.bottom = rect.bottom - rect.top;
+ rect.left = rect.top = 0;
+ SetRect(&rect,
+ rect.right - OffsetX - iBmpWidth - 3,
+ OffsetY + 2,
+ rect.right - OffsetX - 3,
+ rect.top + iBmpHeight + OffsetY + 2 );
+
+ DrawFrameControl( hDC, &rect, DFC_CAPTION,
+ (DFCS_CAPTIONCLOSE |
+ (bDown ? DFCS_PUSHED : 0) |
+ (IsCloseBoxActive(hWnd) ? 0 : DFCS_INACTIVE)) );
}
-
-static void UserDrawCaptionNC( HDC hdc, RECT *rect, HWND hwnd,
- DWORD style, BOOL active )
+
+static void UserDrawMaxButton( HWND hWnd, HDC hDC, BOOL bDown )
{
- RECT r = *rect;
- char buffer[256];
- if (!hbitmapClose)
- {
- hbitmapClose = LoadBitmapW( 0, MAKEINTRESOURCE(OBM_CLOSE));
- hbitmapMinimize = LoadBitmapW( 0, MAKEINTRESOURCE(OBM_REDUCE) );
- hbitmapMinimizeD = LoadBitmapW( 0, MAKEINTRESOURCE(OBM_REDUCED) );
- hbitmapMaximize = LoadBitmapW( 0, MAKEINTRESOURCE(OBM_ZOOM) );
- hbitmapMaximizeD = LoadBitmapW( 0, MAKEINTRESOURCE(OBM_ZOOMD) );
- hbitmapRestore = LoadBitmapW( 0, MAKEINTRESOURCE(OBM_RESTORE) );
- hbitmapRestoreD = LoadBitmapW( 0, MAKEINTRESOURCE(OBM_RESTORED) );
- }
+ RECT rect;
+ INT iBmpWidth = GetSystemMetrics(SM_CXSIZE) - 2;
+ INT iBmpHeight = GetSystemMetrics(SM_CYSIZE) - 4;
+
+ INT OffsetX = UIGetFrameSizeY( hWnd );
+ INT OffsetY = UIGetFrameSizeY( hWnd );
+
+ GetWindowRect( hWnd, &rect );
+
+ if (!IsMinBoxActive(hWnd) && !IsMaxBoxActive(hWnd))
+ return;
+ if ((GetWindowLongA( hWnd, GWL_EXSTYLE ) & WS_EX_TOOLWINDOW) == TRUE)
+ return; /* ToolWindows don't have min/max buttons */
+
+ rect.right = rect.right - rect.left;
+ rect.bottom = rect.bottom - rect.top;
+ rect.left = rect.top = 0;
+ SetRect(&rect,
+ rect.right - OffsetX - (iBmpWidth*2) - 5,
+ OffsetY + 2,
+ rect.right - iBmpWidth - OffsetX - 5,
+ rect.top + iBmpHeight + OffsetY + 2 );
+
+ DrawFrameControl( hDC, &rect, DFC_CAPTION,
+ (IsZoomed(hWnd) ? DFCS_CAPTIONRESTORE : DFCS_CAPTIONMAX) |
+ (bDown ? DFCS_PUSHED : 0) |
+ (IsMaxBoxActive(hWnd) ? 0 : DFCS_INACTIVE) );
+
+}
- if (GetWindowLong(hwnd, GWL_EXSTYLE) & WS_EX_DLGMODALFRAME)
- {
- HBRUSH hbrushOld = SelectObject(hdc, GetSysColorBrush(COLOR_WINDOW) );
- PatBlt( hdc, r.left, r.top, 1, r.bottom-r.top+1,PATCOPY );
- PatBlt( hdc, r.right-1, r.top, 1, r.bottom-r.top+1, PATCOPY );
- PatBlt( hdc, r.left, r.top-1, r.right-r.left, 1, PATCOPY );
- r.left++;
- r.right--;
- SelectObject( hdc, hbrushOld );
- }
+static void UserDrawMinButton( HWND hWnd, HDC hDC, BOOL bDown )
+{
- MoveToEx( hdc, r.left, r.bottom, NULL );
- LineTo( hdc, r.right, r.bottom );
+ RECT rect;
+ INT iBmpWidth = GetSystemMetrics(SM_CXSIZE) - 2;
+ INT iBmpHeight = GetSystemMetrics(SM_CYSIZE) - 4;
+
+ INT OffsetX = UIGetFrameSizeX( hWnd );
+ INT OffsetY = UIGetFrameSizeY( hWnd );
+
+ GetWindowRect( hWnd, &rect );
+
+ if (!IsMinBoxActive(hWnd) && !IsMaxBoxActive(hWnd))
+ return;
+ if ((GetWindowLongA( hWnd, GWL_EXSTYLE ) & WS_EX_TOOLWINDOW) == TRUE)
+ return; /* ToolWindows don't have min/max buttons */
+
+ rect.right = rect.right - rect.left;
+ rect.bottom = rect.bottom - rect.top;
+ rect.left = rect.top = 0;
+ SetRect(&rect,
+ rect.right - OffsetX - (iBmpWidth*3) - 5,
+ OffsetY + 2,
+ rect.right - (iBmpWidth * 2) - OffsetX - 5,
+ rect.top + iBmpHeight + OffsetY + 2 );
+ DrawFrameControl( hDC, &rect, DFC_CAPTION,
+ DFCS_CAPTIONMIN | (bDown ? DFCS_PUSHED : 0) |
+ (IsMinBoxActive(hWnd) ? 0 : DFCS_INACTIVE) );
+}
- if (style & WS_SYSMENU)
- {
- UserDrawSysButton( hwnd, hdc, FALSE );
- r.left += GetSystemMetrics(SM_CXSIZE) + 1;
- MoveToEx( hdc, r.left - 1, r.top, NULL );
- LineTo( hdc, r.left - 1, r.bottom );
- }
- if (style & WS_MAXIMIZEBOX)
- {
- UserDrawMaxButton( hwnd, hdc, FALSE );
- r.right -= GetSystemMetrics(SM_CXSMSIZE) + 1;
- }
- if (style & WS_MINIMIZEBOX)
+static void UserDrawCaptionNC( HDC hDC, RECT *rect, HWND hWnd,
+ DWORD style, BOOL active )
+{
+ RECT r = *rect;
+ char buffer[256];
+ /* Implement and Use DrawCaption() */
+ SelectObject( hDC, GetSysColorBrush(active ? COLOR_ACTIVECAPTION : COLOR_INACTIVECAPTION) );
+ PatBlt(hDC,rect->left + GetSystemMetrics(SM_CXFRAME), rect->top +
+ GetSystemMetrics(SM_CYFRAME), rect->right - (GetSystemMetrics(SM_CXFRAME) * 2) - 1, rect->top +
+ GetSystemMetrics(SM_CYCAPTION) - 1, PATCOPY );
+
+ if (style & WS_SYSMENU)
{
- UserDrawMinButton( hwnd, hdc, FALSE );
- r.right -= GetSystemMetrics(SM_CXSMSIZE) + 1;
+ UserDrawSysMenuButton( hWnd, hDC, FALSE);
+ r.left += GetSystemMetrics(SM_CXSIZE) + 1;
+ UserDrawCloseButton( hWnd, hDC, FALSE);
+ r.right -= GetSystemMetrics(SM_CXSMSIZE) + 1;
+ UserDrawMinButton(hWnd, hDC, FALSE);
+ UserDrawMaxButton(hWnd, hDC, FALSE);
}
-
- FillRect( hdc, &r, GetSysColorBrush(active ? COLOR_ACTIVECAPTION :
- COLOR_INACTIVECAPTION) );
-
- if (GetWindowTextA( hwnd, buffer, sizeof(buffer) ))
+ if (GetWindowTextA( hWnd, buffer, sizeof(buffer) ))
{
- NONCLIENTMETRICS nclm;
- HFONT hFont, hOldFont;
-
- nclm.cbSize = sizeof(NONCLIENTMETRICS);
- SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, 0, &nclm, 0);
- if (style & WS_EX_TOOLWINDOW)
- hFont = CreateFontIndirectW(&nclm.lfSmCaptionFont);
- else
- hFont = CreateFontIndirectW(&nclm.lfCaptionFont);
- hOldFont = SelectObject(hdc, hFont);
-
- if (active) SetTextColor( hdc, GetSysColor( COLOR_CAPTIONTEXT ) );
- else SetTextColor( hdc, GetSysColor( COLOR_INACTIVECAPTIONTEXT ) );
- SetBkMode( hdc, TRANSPARENT );
- /*DrawTextA( hdc, buffer, -1, &r,
- DT_SINGLELINE | DT_CENTER | DT_VCENTER | DT_NOPREFIX );*/
- TextOutA(hdc, r.left+5, r.top+2, buffer, strlen(buffer));
- DeleteObject (SelectObject (hdc, hOldFont));
+ NONCLIENTMETRICS nclm;
+ HFONT hFont, hOldFont;
+
+ nclm.cbSize = sizeof(NONCLIENTMETRICS);
+ SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, 0, &nclm, 0);
+ SetTextColor(hDC, SysColours[ active ? COLOR_CAPTIONTEXT : COLOR_INACTIVECAPTIONTEXT]);
+ SetBkMode( hDC, TRANSPARENT );
+ if (style & WS_EX_TOOLWINDOW)
+ hFont = CreateFontIndirectW(&nclm.lfSmCaptionFont);
+ else
+ hFont = CreateFontIndirectW(&nclm.lfCaptionFont);
+ hOldFont = SelectObject(hDC, hFont);
+ TextOutA(hDC, r.left + (GetSystemMetrics(SM_CXDLGFRAME) * 2), (r.top / 2) + (((int) nclm.lfCaptionFont.lfHeight) / 2) + (GetSystemMetrics(SM_CXDLGFRAME) / 2), buffer, strlen(buffer));
+ DeleteObject (SelectObject (hDC, hOldFont));
}
}
VOID
-UserDrawFrameNC(HDC hdc, RECT* rect, BOOL dlgFrame, BOOL active)
+UserDrawFrameNC(HDC hDC, RECT* rect, BOOL dlgFrame, BOOL active)
{
- INT width, height;
-
- if (dlgFrame)
- {
- width = GetSystemMetrics(SM_CXDLGFRAME) - 1;
- height = GetSystemMetrics(SM_CYDLGFRAME) - 1;
- SelectObject( hdc, GetSysColorBrush(active ? COLOR_ACTIVECAPTION :
- COLOR_INACTIVECAPTION) );
- }
- else
- {
- width = GetSystemMetrics(SM_CXFRAME) - 2;
- height = GetSystemMetrics(SM_CYFRAME) - 2;
- 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 );
-
- if (dlgFrame)
- {
- InflateRect( rect, -width, -height );
- }
- else
- {
- INT decYOff = GetSystemMetrics(SM_CXFRAME) +
- GetSystemMetrics(SM_CXSIZE) - 1;
- INT decXOff = GetSystemMetrics(SM_CYFRAME) +
- GetSystemMetrics(SM_CYSIZE) - 1;
-
- /* Draw inner rectangle */
-
- SelectObject( hdc, GetStockObject(NULL_BRUSH) );
- Rectangle( hdc, rect->left + width, rect->top + height,
- rect->right - width , rect->bottom - height );
-
- /* Draw the decorations */
-
- MoveToEx( hdc, rect->left, rect->top + decYOff, NULL );
- LineTo( hdc, rect->left + width, rect->top + decYOff );
- MoveToEx( hdc, rect->right - 1, rect->top + decYOff, NULL );
- LineTo( hdc, rect->right - width - 1, rect->top + decYOff );
- MoveToEx( hdc, rect->left, rect->bottom - decYOff, NULL );
- LineTo( hdc, rect->left + width, rect->bottom - decYOff );
- MoveToEx( hdc, rect->right - 1, rect->bottom - decYOff, NULL );
- LineTo( hdc, rect->right - width - 1, rect->bottom - decYOff );
-
- MoveToEx( hdc, rect->left + decXOff, rect->top, NULL );
- LineTo( hdc, rect->left + decXOff, rect->top + height);
- MoveToEx( hdc, rect->left + decXOff, rect->bottom - 1, NULL );
- LineTo( hdc, rect->left + decXOff, rect->bottom - height - 1 );
- MoveToEx( hdc, rect->right - decXOff, rect->top, NULL );
- LineTo( hdc, rect->right - decXOff, rect->top + height );
- MoveToEx( hdc, rect->right - decXOff, rect->bottom - 1, NULL );
- LineTo( hdc, rect->right - decXOff, rect->bottom - height - 1 );
-
- InflateRect( rect, -width - 1, -height - 1 );
- }
+ SelectObject( hDC, GetSysColorBrush(COLOR_WINDOW) );
+ DrawEdge(hDC, rect,EDGE_RAISED, BF_RECT | BF_MIDDLE);
}
-void SCROLL_DrawScrollBar (HWND hwnd, HDC hdc, INT nBar, BOOL arrows, BOOL interior);
+void SCROLL_DrawScrollBar (HWND hWnd, HDC hDC, INT nBar, BOOL arrows, BOOL interior);
VOID
DefWndDoPaintNC(HWND hWnd, HRGN clip)
{
ULONG Active;
- HDC hDc;
+ HDC hDC;
RECT rect;
ULONG Style;
ULONG ExStyle;
-
Active = GetWindowLongW(hWnd, GWL_STYLE) & WIN_NCACTIVATED;
Style = GetWindowLong(hWnd, GWL_STYLE);
ExStyle = GetWindowLong(hWnd, GWL_EXSTYLE);
- hDc = GetDCEx(hWnd, (clip > (HRGN)1) ? clip : 0, DCX_USESTYLE | DCX_WINDOW |
+ hDC = GetDCEx(hWnd, (clip > (HRGN)1) ? clip : 0, DCX_USESTYLE | DCX_WINDOW |
((clip > (HRGN)1) ? (DCX_INTERSECTRGN | DCX_KEEPCLIPRGN) : 0));
- if (hDc == 0)
+ if (hDC == 0)
{
return;
}
rect.right = rect.right - rect.left;
rect.bottom = rect.bottom - rect.top;
rect.top = rect.left = 0;
-
- SelectObject(hDc, GetSysColorPen(COLOR_WINDOWFRAME));
- if (UserHasAnyFrameStyle(Style, ExStyle))
- {
- SelectObject(hDc, GetStockObject(NULL_BRUSH));
- Rectangle(hDc, 0, 0, rect.right, rect.bottom);
- InflateRect(&rect, -1, -1);
- }
-
+ SelectObject(hDC, GetSysColorPen(COLOR_WINDOWFRAME));
if (UserHasThickFrameStyle(Style, ExStyle))
{
- UserDrawFrameNC(hDc, &rect, FALSE, Active);
+ UserDrawFrameNC(hDC, &rect, FALSE, Active);
}
else if (UserHasDlgFrameStyle(Style, ExStyle))
{
- UserDrawFrameNC(hDc, &rect, TRUE, Active);
+ UserDrawFrameNC(hDC, &rect, TRUE, Active);
}
-
if (Style & WS_CAPTION)
{
RECT r = rect;
r.bottom = rect.top + GetSystemMetrics(SM_CYSIZE);
rect.top += GetSystemMetrics(SM_CYSIZE) +
GetSystemMetrics(SM_CYBORDER);
- UserDrawCaptionNC(hDc, &r, hWnd, Style, Active);
+ UserDrawCaptionNC(hDC, &r, hWnd, Style, Active);
}
- /* FIXME: Draw menu bar. */
+/* FIXME: Draw menu bar. */
-DbgPrint("drawing scrollbars..\n");
- /* Draw scrollbars */
+ DbgPrint("drawing scrollbars..\n");
+/* Draw scrollbars */
if (Style & WS_VSCROLL)
- SCROLL_DrawScrollBar(hWnd, hDc, SB_VERT, TRUE, TRUE);
+ SCROLL_DrawScrollBar(hWnd, hDC, SB_VERT, TRUE, TRUE);
if (Style & WS_HSCROLL)
- SCROLL_DrawScrollBar(hWnd, hDc, SB_HORZ, TRUE, TRUE);
+ SCROLL_DrawScrollBar(hWnd, hDC, SB_HORZ, TRUE, TRUE);
- /* FIXME: Draw size box. */
+ /* FIXME: Draw size box.*/
- ReleaseDC(hWnd, hDc);
+ ReleaseDC(hWnd, hDC);
+
}
LRESULT
ULONG ExStyle = GetWindowLong(hWnd, GWL_EXSTYLE);
GetWindowRect(hWnd, &WindowRect);
-
if (!PtInRect(&WindowRect, Point))
{
+
return(HTNOWHERE);
}
if (Style & WS_MINIMIZE)
if ((Style & WS_SYSMENU) && !(ExStyle & WS_EX_TOOLWINDOW))
{
WindowRect.left += GetSystemMetrics(SM_CXSIZE);
+ WindowRect.right -= GetSystemMetrics(SM_CXSIZE) + 1;
}
if (Point.x <= WindowRect.left)
{
return(HTSYSMENU);
}
+ if (WindowRect.right <= Point.x)
+ {
+ return(HTCLOSE);
+ }
- if (Style & WS_MAXIMIZEBOX)
+ if (Style & WS_MAXIMIZEBOX || Style & WS_MINIMIZEBOX)
{
- WindowRect.right -= GetSystemMetrics(SM_CXSMSIZE) + 1;
+ WindowRect.right -= GetSystemMetrics(SM_CXSIZE) - 2;
}
if (Point.x >= WindowRect.right)
{
if (Style & WS_MINIMIZEBOX)
{
- WindowRect.right -= GetSystemMetrics(SM_CXSMSIZE) + 1;
+ WindowRect.right -= GetSystemMetrics(SM_CXSIZE) - 2;
}
if (Point.x >= WindowRect.right)
{
}
VOID
-DefWndTrackMinMaxBox(HWND hWnd, WPARAM wParam)
-{
- HDC hDC = GetWindowDC(hWnd);
- BOOL Pressed = TRUE;
- MSG Msg;
-
- SetCapture(hWnd);
-
- if (wParam == HTMINBUTTON)
- {
- UserDrawMinButton(hWnd, hDC, TRUE);
- }
- else
- {
- UserDrawMaxButton(hWnd, hDC, TRUE);
- }
-
- for(;;)
- {
- BOOL OldState = Pressed;
-
- GetMessageA(hWnd, &Msg, 0, 0);
- if (Msg.message == WM_LBUTTONUP)
- {
- break;
- }
- if (Msg.message != WM_MOUSEMOVE)
- {
- continue;
- }
-
- Pressed = DefWndHitTestNC(hWnd, Msg.pt) == (LRESULT) wParam;
- if (Pressed != OldState)
- {
- if (wParam == HTMINBUTTON)
- {
- UserDrawMinButton(hWnd, hDC, Pressed);
- }
- else
- {
- UserDrawMaxButton(hWnd, hDC, Pressed);
- }
- }
- }
-
- if (Pressed)
- {
- if (wParam == HTMINBUTTON)
- {
- UserDrawMinButton(hWnd, hDC, FALSE);
- }
- else
- {
- UserDrawMaxButton(hWnd, hDC, FALSE);
- }
- }
-
- ReleaseCapture();
- ReleaseDC(hWnd, hDC);
-
- if (!Pressed)
- {
- return;
- }
-
- if (wParam == HTMINBUTTON)
- {
- SendMessageA(hWnd, WM_SYSCOMMAND, SC_MINIMIZE,
- MAKELONG(Msg.pt.x, Msg.pt.y));
- }
- else
- {
- SendMessageA(hWnd, WM_SYSCOMMAND,
- IsZoomed(hWnd) ? SC_RESTORE : SC_MAXIMIZE,
- MAKELONG(Msg.pt.x, Msg.pt.y));
- }
-}
-
-VOID
DefWndDrawSysButton(HWND hWnd, HDC hDC, BOOL Down)
{
- RECT Rect;
- HDC hDcMem;
- HBITMAP hSavedBitmap;
-
- UserGetInsideRectNC(hWnd, &Rect);
- hDcMem = CreateCompatibleDC(hDC);
- hSavedBitmap = SelectObject(hDcMem, hbitmapClose);
- BitBlt(hDC, Rect.left, Rect.top, GetSystemMetrics(SM_CXSIZE),
- GetSystemMetrics(SM_CYSIZE), hDcMem,
- (GetWindowLong(hWnd, GWL_STYLE) & WS_CHILD) ?
- GetSystemMetrics(SM_CXSIZE): 0, 0, Down ? NOTSRCCOPY : SRCCOPY);
- SelectObject(hDcMem, hSavedBitmap);
- DeleteDC(hDcMem);
}
LRESULT
DefWndHandleLButtonDownNC(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
- switch (wParam)
+ switch (wParam)
{
- case HTCAPTION:
- {
- HWND hTopWnd = GetAncestor(hWnd, GA_ROOT);
- if (SetActiveWindow(hTopWnd) || GetActiveWindow() == hTopWnd)
- {
- SendMessageA(hWnd, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, lParam);
- }
- break;
- }
- case HTSYSMENU:
- {
- if (GetWindowLong(hWnd, GWL_STYLE) & WS_SYSMENU)
- {
- if (!(GetWindowLong(hWnd, GWL_STYLE) & WS_MINIMIZE))
- {
- HDC hDC = GetWindowDC(hWnd);
- DefWndDrawSysButton(hWnd, hDC, TRUE);
- ReleaseDC(hWnd, hDC);
- }
- SendMessageA(hWnd, WM_SYSCOMMAND, SC_MOUSEMENU + HTSYSMENU,
- lParam);
- }
- break;
- }
-
- case HTMENU:
- SendMessageA(hWnd, WM_SYSCOMMAND, SC_MOUSEMENU, lParam);
- break;
-
- case HTHSCROLL:
- SendMessageA(hWnd, WM_SYSCOMMAND, SC_HSCROLL + HTHSCROLL, lParam);
- break;
-
- case HTVSCROLL:
- SendMessageA(hWnd, WM_SYSCOMMAND, SC_VSCROLL + HTVSCROLL, lParam);
- break;
-
- case HTMINBUTTON:
- case HTMAXBUTTON:
- DefWndTrackMinMaxBox(hWnd, wParam);
- break;
-
- case HTLEFT:
- case HTRIGHT:
- case HTTOP:
- case HTBOTTOM:
- case HTTOPLEFT:
- case HTTOPRIGHT:
- case HTBOTTOMLEFT:
- case HTBOTTOMRIGHT:
- SendMessageA(hWnd, WM_SYSCOMMAND, SC_SIZE + wParam - 2, lParam);
- break;
+ case HTCAPTION:
+ {
+ HWND hTopWnd = GetDesktopWindow(); //GetAncestor(hWnd, GA_ROOT); temp fix.
+ if (SetActiveWindow(hTopWnd) || GetActiveWindow() == hTopWnd)
+ {
+ SendMessageA(hWnd, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, lParam);
+ }
+ break;
+ }
+ case HTSYSMENU:
+ {
+ if (GetWindowLong(hWnd, GWL_STYLE) & WS_SYSMENU)
+ {
+ if (!(GetWindowLong(hWnd, GWL_STYLE) & WS_MINIMIZE))
+ {
+ HDC hDC = GetWindowDC(hWnd);
+ DefWndDrawSysButton(hWnd, hDC, TRUE);
+ ReleaseDC(hWnd, hDC);
+ }
+ SendMessageA(hWnd, WM_SYSCOMMAND, SC_MOUSEMENU + HTSYSMENU,
+ lParam);
+ }
+ break;
+ }
+ case HTMENU:
+ {
+ SendMessageA(hWnd, WM_SYSCOMMAND, SC_MOUSEMENU, lParam);
+ break;
+ }
+ case HTHSCROLL:
+ {
+ SendMessageA(hWnd, WM_SYSCOMMAND, SC_HSCROLL + HTHSCROLL, lParam);
+ break;
+ }
+ case HTVSCROLL:
+ {
+ SendMessageA(hWnd, WM_SYSCOMMAND, SC_VSCROLL + HTVSCROLL, lParam);
+ break;
+ }
+ case HTMINBUTTON:
+ {
+ UserDrawMinButton(hWnd, GetWindowDC(hWnd), IsMinBoxActive(hWnd) );
+ break;
+ }
+ case HTMAXBUTTON:
+ {
+ UserDrawMaxButton(hWnd,GetWindowDC(hWnd), IsMaxBoxActive(hWnd) );
+ break;
+ }
+ case HTCLOSE:
+ {
+ UserDrawCloseButton(hWnd,GetWindowDC(hWnd),TRUE);
+ break;
+ }
+ case HTLEFT:
+ case HTRIGHT:
+ case HTTOP:
+ case HTBOTTOM:
+ case HTTOPLEFT:
+ case HTTOPRIGHT:
+ case HTBOTTOMLEFT:
+ case HTBOTTOMRIGHT:
+ {
+ SendMessageA(hWnd, WM_SYSCOMMAND, SC_SIZE + wParam - 2, lParam);
+ break;
+ }
}
- return(0);
+ return(0);
}
LRESULT
DefWndHandleLButtonDblClkNC(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
- /* FIXME: Implement this. */
+ return(0);
+}
+
+LRESULT
+DefWndHandleLButtonUpNC(HWND hWnd, WPARAM wParam, LPARAM lParam)
+{
+ UserDrawMinButton(hWnd,GetWindowDC(hWnd),FALSE);
+ UserDrawMaxButton(hWnd,GetWindowDC(hWnd),FALSE);
+ UserDrawCloseButton(hWnd,GetWindowDC(hWnd),FALSE);
+ switch (wParam)
+ {
+ case HTMINBUTTON:
+ {
+ SendMessageA(hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0);
+ break;
+ }
+ case HTMAXBUTTON:
+ {
+ SendMessageA(hWnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
+ break;
+ }
+ case HTCLOSE:
+ {
+ SendMessageA(hWnd, WM_CLOSE, 0, 0);
+ SendMessageA(hWnd, WM_SYSCOMMAND, SC_CLOSE, 0);
+ break;
+ }
+ }
return(0);
}
LRESULT
DefWndHandleWindowPosChanging(HWND hWnd, WINDOWPOS* Pos)
{
- /* FIXME: Implement this. */
- return(0);
+ return 0;
}
LRESULT STDCALL
{
return(DefWndPaintNC(hWnd, (HRGN)wParam));
}
-
+ case WM_WINDOWPOSCHANGING:
+ {
+ DbgPrint("WM_WINDOWPOSCHANGING\n\n");
+ }
case WM_NCHITTEST:
{
POINT Point;
return(DefWndHandleLButtonDownNC(hWnd, wParam, lParam));
}
+ case WM_NCLBUTTONUP:
+ {
+ return(DefWndHandleLButtonUpNC(hWnd, wParam, lParam));
+ }
+
case WM_LBUTTONDBLCLK:
case WM_NCLBUTTONDBLCLK:
{
}
break;
}
-
+ case WM_LBUTTONUP:
+ {
+ break;
+ }
case WM_RBUTTONUP:
{
POINT Pt;
case WM_PAINT:
{
PAINTSTRUCT Ps;
- HDC hDc = BeginPaint(hWnd, &Ps);
- if (hDc)
+ HDC hDC = BeginPaint(hWnd, &Ps);
+ if (hDC)
{
+
HICON hIcon;
if (GetWindowLongW(hWnd, GWL_STYLE) & WS_MINIMIZE &&
(hIcon = (HICON)GetClassLongW(hWnd, GCL_HICON)) != NULL)
GetSystemMetrics(SM_CXICON)) / 2;
y = (WindowRect.bottom - WindowRect.top -
GetSystemMetrics(SM_CYICON)) / 2;
- DrawIcon(hDc, x, y, hIcon);
- }
+ DrawIcon(hDC, x, y, hIcon);
+ }
EndPaint(hWnd, &Ps);
}
return(0);
case WM_ERASEBKGND:
case WM_ICONERASEBKGND:
{
+
RECT Rect;
HBRUSH hBrush = (HBRUSH)GetClassLongW(hWnd, GCL_HBRBACKGROUND);
GetClipBox((HDC)wParam, &Rect);
{
return(0);
}
- /* FIXME: Check for a popup window. */
+ /* FIXME: Not done correctly */
if ((GetWindowLongW(hWnd, GWL_STYLE) & WS_VISIBLE && !wParam) ||
(!(GetWindowLongW(hWnd, GWL_STYLE) & WS_VISIBLE) && wParam))
{
return(0);
}
- ShowWindow(hWnd, wParam ? SW_SHOWNOACTIVATE : SW_HIDE);
+ ShowWindow(hWnd, wParam ? SW_SHOWNA : SW_HIDE);
break;
}
{
GlobalDeleteAtom((ATOM)(ULONG)WindowTextAtom);
}
- /* FIXME: Destroy scroll bars here as well. */
return(0);
}
{
GlobalDeleteAtom((ATOM)(DWORD)WindowTextAtom);
}
- /* FIXME: Destroy scroll bars here as well. */
+
return(0);
}