Commit 8e517b5c authored by Eric Kohl's avatar Eric Kohl Committed by Alexandre Julliard

Added DrawCaption[16/32] and DrawCaptionTemp[16/32A/32W].

Fixed handling of WS_EX_TOOLWINDOW.
parent 98dfbe15
...@@ -498,10 +498,10 @@ file user.exe ...@@ -498,10 +498,10 @@ file user.exe
654 stub UnloadKeyboardLayout 654 stub UnloadKeyboardLayout
655 stub PostPostedMessages 655 stub PostPostedMessages
656 pascal16 DrawFrameControl(word ptr word word) DrawFrameControl16 656 pascal16 DrawFrameControl(word ptr word word) DrawFrameControl16
657 stub DrawCaptionTemp 657 pascal16 DrawCaptionTemp(word word ptr word word ptr word) DrawCaptionTemp16
658 stub DispatchInput 658 stub DispatchInput
659 pascal16 DrawEdge(word ptr word word) DrawEdge16 659 pascal16 DrawEdge(word ptr word word) DrawEdge16
660 stub DrawCaption 660 pascal16 DrawCaption(word word ptr word) DrawCaption16
661 stub SetSysColorsTemp 661 stub SetSysColorsTemp
662 stub DrawMenubarTemp 662 stub DrawMenubarTemp
663 stub GetMenuDefaultItem 663 stub GetMenuDefaultItem
......
...@@ -3565,6 +3565,13 @@ DECL_WINELIB_TYPE_AW(LPMENUITEMINFO) ...@@ -3565,6 +3565,13 @@ DECL_WINELIB_TYPE_AW(LPMENUITEMINFO)
#define DT_NOPREFIX 2048 #define DT_NOPREFIX 2048
#define DT_INTERNAL 4096 #define DT_INTERNAL 4096
/* DrawCaption()/DrawCaptionTemp() flags */
#define DC_ACTIVE 0x0001
#define DC_SMALLCAP 0x0002
#define DC_ICON 0x0004
#define DC_TEXT 0x0008
#define DC_INBUTTON 0x0010
/* DrawEdge() flags */ /* DrawEdge() flags */
#define BDR_RAISEDOUTER 0x0001 #define BDR_RAISEDOUTER 0x0001
#define BDR_SUNKENOUTER 0x0002 #define BDR_SUNKENOUTER 0x0002
...@@ -7450,6 +7457,13 @@ BOOL32 WINAPI DragDetect32(HWND32,POINT32); ...@@ -7450,6 +7457,13 @@ BOOL32 WINAPI DragDetect32(HWND32,POINT32);
DWORD WINAPI DragObject16(HWND16,HWND16,UINT16,HANDLE16,WORD,HCURSOR16); DWORD WINAPI DragObject16(HWND16,HWND16,UINT16,HANDLE16,WORD,HCURSOR16);
DWORD WINAPI DragObject32(HWND32,HWND32,UINT32,DWORD,HCURSOR32); DWORD WINAPI DragObject32(HWND32,HWND32,UINT32,DWORD,HCURSOR32);
#define DragObject WINELIB_NAME(DragObject) #define DragObject WINELIB_NAME(DragObject)
BOOL16 WINAPI DrawCaption16(HWND16,HDC16,const RECT16*,UINT16);
BOOL32 WINAPI DrawCaption32(HWND32,HDC32,const RECT32*,UINT32);
#define DrawCaption WINELIB_NAME(DrawCaption)
BOOL16 WINAPI DrawCaptionTemp16(HWND16,HDC16, const RECT16*,HFONT16,HICON16,LPCSTR,UINT16);
BOOL32 WINAPI DrawCaptionTemp32A(HWND32,HDC32,const RECT32*,HFONT32,HICON32,LPCSTR,UINT32);
BOOL32 WINAPI DrawCaptionTemp32W(HWND32,HDC32,const RECT32*,HFONT32,HICON32,LPCWSTR,UINT32);
#define DrawCaptionTemp WINELIB_NAME_AW(DrawCaptionTemp)
BOOL16 WINAPI DrawEdge16(HDC16,LPRECT16,UINT16,UINT16); BOOL16 WINAPI DrawEdge16(HDC16,LPRECT16,UINT16,UINT16);
BOOL32 WINAPI DrawEdge32(HDC32,LPRECT32,UINT32,UINT32); BOOL32 WINAPI DrawEdge32(HDC32,LPRECT32,UINT32,UINT32);
#define DrawEdge WINELIB_NAME(DrawEdge) #define DrawEdge WINELIB_NAME(DrawEdge)
......
...@@ -154,7 +154,7 @@ type win32 ...@@ -154,7 +154,7 @@ type win32
151 stdcall DragDetect(long long long) DragDetect32 151 stdcall DragDetect(long long long) DragDetect32
152 stub DragObject 152 stub DragObject
153 stdcall DrawAnimatedRects(long long ptr ptr) DrawAnimatedRects32 153 stdcall DrawAnimatedRects(long long ptr ptr) DrawAnimatedRects32
154 stub DrawCaption 154 stdcall DrawCaption(long long ptr long) DrawCaption32
155 stdcall DrawEdge(long ptr long long) DrawEdge32 155 stdcall DrawEdge(long ptr long long) DrawEdge32
156 stdcall DrawFocusRect(long ptr) DrawFocusRect32 156 stdcall DrawFocusRect(long ptr) DrawFocusRect32
157 stub DrawFrame 157 stub DrawFrame
...@@ -603,7 +603,7 @@ type win32 ...@@ -603,7 +603,7 @@ type win32
599 stdcall DrawCaptionTempA(long long ptr long long str long) DrawCaptionTemp32A 599 stdcall DrawCaptionTempA(long long ptr long long str long) DrawCaptionTemp32A
600 stub RegisterNetworkCapabilities 600 stub RegisterNetworkCapabilities
601 stub WNDPROC_CALLBACK 601 stub WNDPROC_CALLBACK
602 stub DrawCaptionTempW 602 stdcall DrawCaptionTempW(long long ptr long long wstr long) DrawCaptionTemp32W
603 stub IsHungAppWindow 603 stub IsHungAppWindow
604 stub ChangeDisplaySettingsA 604 stub ChangeDisplaySettingsA
605 stub ChangeDisplaySettingsW 605 stub ChangeDisplaySettingsW
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
#include "tweak.h" #include "tweak.h"
#include "debug.h" #include "debug.h"
#include "options.h" #include "options.h"
#include "cache.h"
static HBITMAP16 hbitmapClose = 0; static HBITMAP16 hbitmapClose = 0;
static HBITMAP16 hbitmapCloseD = 0; static HBITMAP16 hbitmapCloseD = 0;
...@@ -217,21 +217,187 @@ NC_AdjustRectInner95 (LPRECT16 rect, DWORD style, DWORD exStyle) ...@@ -217,21 +217,187 @@ NC_AdjustRectInner95 (LPRECT16 rect, DWORD style, DWORD exStyle)
/*********************************************************************** /***********************************************************************
* DrawCaptionTempA [USER32.599] * DrawCaption16 [USER.660] Draws a caption bar
*
* PARAMS
* hwnd [I]
* hdc [I]
* lpRect [I]
* uFlags [I]
*
*/
BOOL16 WINAPI
DrawCaption16 (HWND16 hwnd, HDC16 hdc, const RECT16 *lpRect, UINT16 uFlags)
{
FIXME (nonclient, " stub!\n");
// return DrawCaptionTemp32A (hwnd, hdc, lpRect, 0, 0, NULL, uFlags & 0x1F);
return 0;
}
/***********************************************************************
* DrawCaption32 [USER32.154] Draws a caption bar
*
* PARAMS
* hwnd [I]
* hdc [I]
* lpRect [I]
* uFlags [I]
*
*/
BOOL32 WINAPI
DrawCaption32 (HWND32 hwnd, HDC32 hdc, const RECT32 *lpRect, UINT32 uFlags)
{
return DrawCaptionTemp32A (hwnd, hdc, lpRect, 0, 0, NULL, uFlags & 0x1F);
}
/***********************************************************************
* DrawCaptionTemp16 [USER.657]
* *
*/ */
DWORD WINAPI
DrawCaptionTemp32A (HWND32 hwnd, HDC32 hdc, LPRECT32 rect, BOOL16 WINAPI
HFONT32 hfont,DWORD x1,LPCSTR str,DWORD x2) DrawCaptionTemp16 (HWND16 hwnd, HDC16 hdc, const RECT16 *rect, HFONT16 hFont,
HICON16 hIcon, LPCSTR str, UINT16 uFlags)
{ {
FIXME (nonclient, "(%08x,%08x,%p,%08x,%08x,\"%s\",%08x): stub\n", FIXME (nonclient, " stub!\n");
hwnd, hdc, rect, hfont, x1, str, x2);
// return DrawCaptionTemp32A (hwnd, hdc, lpRect, 0, 0, NULL, uFlags & 0x1F);
return 0; return 0;
} }
/*********************************************************************** /***********************************************************************
* DrawCaptionTemp32A [USER32.599]
*
*/
BOOL32 WINAPI
DrawCaptionTemp32A (HWND32 hwnd, HDC32 hdc, const RECT32 *rect, HFONT32 hFont,
HICON32 hIcon, LPCSTR str, UINT32 uFlags)
{
RECT32 rc = *rect;
TRACE (nonclient, "(%08x,%08x,%p,%08x,%08x,\"%s\",%08x)\n",
hwnd, hdc, rect, hFont, hIcon, str, uFlags);
/* drawing background */
if (uFlags & DC_INBUTTON) {
FillRect32 (hdc, &rc, GetSysColorBrush32 (COLOR_3DFACE));
if (uFlags & DC_ACTIVE) {
HBRUSH32 hbr = SelectObject32 (hdc, CACHE_GetPattern55AABrush ());
PatBlt32 (hdc, rc.left, rc.top,
rc.right-rc.left, rc.bottom-rc.top, 0xFA0089);
SelectObject32 (hdc, hbr);
}
}
else {
FillRect32 (hdc, &rc, GetSysColorBrush32 ((uFlags & DC_ACTIVE) ?
COLOR_ACTIVECAPTION : COLOR_INACTIVECAPTION));
}
/* drawing icon */
if ((uFlags & DC_ICON) && !(uFlags & DC_SMALLCAP)) {
POINT32 pt;
pt.x = rc.left + 2;
pt.y = (rc.bottom + rc.top - sysMetrics[SM_CYSMICON]) / 2;
if (hIcon) {
DrawIconEx32 (hdc, pt.x, pt.y, hIcon, sysMetrics[SM_CXSMICON],
sysMetrics[SM_CYSMICON], 0, 0, DI_NORMAL);
}
else {
WND *wndPtr = WIN_FindWndPtr(hwnd);
HICON32 hAppIcon = 0;
if (wndPtr->class->hIconSm)
hAppIcon = wndPtr->class->hIconSm;
else if (wndPtr->class->hIcon)
hAppIcon = wndPtr->class->hIcon;
DrawIconEx32 (hdc, pt.x, pt.y, hAppIcon, sysMetrics[SM_CXSMICON],
sysMetrics[SM_CYSMICON], 0, 0, DI_NORMAL);
}
rc.left += (rc.bottom - rc.top);
}
/* drawing text */
if (uFlags & DC_TEXT) {
HFONT32 hOldFont;
if (uFlags & DC_INBUTTON)
SetTextColor32 (hdc, GetSysColor32 (COLOR_BTNTEXT));
else if (uFlags & DC_ACTIVE)
SetTextColor32 (hdc, GetSysColor32 (COLOR_CAPTIONTEXT));
else
SetTextColor32 (hdc, GetSysColor32 (COLOR_INACTIVECAPTIONTEXT));
SetBkMode32 (hdc, TRANSPARENT);
if (hFont)
hOldFont = SelectObject32 (hdc, hFont);
else {
NONCLIENTMETRICS32A nclm;
HFONT32 hNewFont;
nclm.cbSize = sizeof(NONCLIENTMETRICS32A);
SystemParametersInfo32A (SPI_GETNONCLIENTMETRICS, 0, &nclm, 0);
hNewFont = CreateFontIndirect32A ((uFlags & DC_SMALLCAP) ?
&nclm.lfSmCaptionFont : &nclm.lfCaptionFont);
hOldFont = SelectObject32 (hdc, hNewFont);
}
if (str)
DrawText32A (hdc, str, -1, &rc,
DT_SINGLELINE | DT_VCENTER | DT_NOPREFIX | DT_LEFT);
else {
CHAR szText[128];
INT32 nLen;
nLen = GetWindowText32A (hwnd, szText, 128);
DrawText32A (hdc, szText, nLen, &rc,
DT_SINGLELINE | DT_VCENTER | DT_NOPREFIX | DT_LEFT);
}
if (hFont)
SelectObject32 (hdc, hOldFont);
else
DeleteObject32 (SelectObject32 (hdc, hOldFont));
}
/* drawing focus ??? */
if (uFlags & 0x2000)
FIXME (nonclient, "undocumented flag (0x2000)!\n");
return 0;
}
/***********************************************************************
* DrawCaptionTemp32W [USER32.602]
*
*/
BOOL32 WINAPI
DrawCaptionTemp32W (HWND32 hwnd, HDC32 hdc, const RECT32 *rect, HFONT32 hFont,
HICON32 hIcon, LPCWSTR str, UINT32 uFlags)
{
LPSTR p = HEAP_strdupWtoA (GetProcessHeap (), 0, str);
BOOL32 res = DrawCaptionTemp32A (hwnd, hdc, rect, hFont, hIcon, p, uFlags);
HeapFree (GetProcessHeap (), 0, p);
return res;
}
/***********************************************************************
* AdjustWindowRect16 (USER.102) * AdjustWindowRect16 (USER.102)
*/ */
BOOL16 WINAPI AdjustWindowRect16( LPRECT16 rect, DWORD style, BOOL16 menu ) BOOL16 WINAPI AdjustWindowRect16( LPRECT16 rect, DWORD style, BOOL16 menu )
...@@ -1252,10 +1418,11 @@ static void NC_DrawCaption( HDC32 hdc, RECT32 *rect, HWND32 hwnd, ...@@ -1252,10 +1418,11 @@ static void NC_DrawCaption( HDC32 hdc, RECT32 *rect, HWND32 hwnd,
static void NC_DrawCaption95( static void NC_DrawCaption95(
HDC32 hdc, HDC32 hdc,
RECT32 *rect, RECT32 *rect,
HWND32 hwnd, HWND32 hwnd,
DWORD style, DWORD style,
BOOL32 active ) DWORD exStyle,
BOOL32 active )
{ {
RECT32 r = *rect; RECT32 r = *rect;
WND *wndPtr = WIN_FindWndPtr( hwnd ); WND *wndPtr = WIN_FindWndPtr( hwnd );
...@@ -1282,9 +1449,11 @@ static void NC_DrawCaption95( ...@@ -1282,9 +1449,11 @@ static void NC_DrawCaption95(
hbitmapRestoreD = LoadBitmap16( 0, MAKEINTRESOURCE16(OBM_RESTORED) ); hbitmapRestoreD = LoadBitmap16( 0, MAKEINTRESOURCE16(OBM_RESTORED) );
} }
if (style & WS_SYSMENU) { if ((style & WS_SYSMENU) && !(exStyle & WS_EX_TOOLWINDOW)) {
if (NC_DrawSysButton95 (hwnd, hdc, FALSE)) if (NC_DrawSysButton95 (hwnd, hdc, FALSE))
r.left += sysMetrics[SM_CYCAPTION] - 1; r.left += sysMetrics[SM_CYCAPTION] - 1;
}
if (style & WS_SYSMENU) {
NC_DrawCloseButton95 (hwnd, hdc, FALSE); NC_DrawCloseButton95 (hwnd, hdc, FALSE);
r.right -= sysMetrics[SM_CYCAPTION] - 1; r.right -= sysMetrics[SM_CYCAPTION] - 1;
} }
...@@ -1302,7 +1471,10 @@ static void NC_DrawCaption95( ...@@ -1302,7 +1471,10 @@ static void NC_DrawCaption95(
HFONT32 hFont, hOldFont; HFONT32 hFont, hOldFont;
nclm.cbSize = sizeof(NONCLIENTMETRICS32A); nclm.cbSize = sizeof(NONCLIENTMETRICS32A);
SystemParametersInfo32A (SPI_GETNONCLIENTMETRICS, 0, &nclm, 0); SystemParametersInfo32A (SPI_GETNONCLIENTMETRICS, 0, &nclm, 0);
hFont = CreateFontIndirect32A (&nclm.lfCaptionFont); if (exStyle & WS_EX_TOOLWINDOW)
hFont = CreateFontIndirect32A (&nclm.lfSmCaptionFont);
else
hFont = CreateFontIndirect32A (&nclm.lfCaptionFont);
hOldFont = SelectObject32 (hdc, hFont); hOldFont = SelectObject32 (hdc, hFont);
if (active) SetTextColor32( hdc, GetSysColor32( COLOR_CAPTIONTEXT ) ); if (active) SetTextColor32( hdc, GetSysColor32( COLOR_CAPTIONTEXT ) );
else SetTextColor32( hdc, GetSysColor32( COLOR_INACTIVECAPTIONTEXT ) ); else SetTextColor32( hdc, GetSysColor32( COLOR_INACTIVECAPTIONTEXT ) );
...@@ -1488,7 +1660,8 @@ void NC_DoNCPaint95( ...@@ -1488,7 +1660,8 @@ void NC_DoNCPaint95(
r.bottom = rect.top + sysMetrics[SM_CYCAPTION]; r.bottom = rect.top + sysMetrics[SM_CYCAPTION];
rect.top += sysMetrics[SM_CYCAPTION]; rect.top += sysMetrics[SM_CYCAPTION];
} }
NC_DrawCaption95( hdc, &r, hwnd, wndPtr->dwStyle, active ); NC_DrawCaption95( hdc, &r, hwnd, wndPtr->dwStyle,
wndPtr->dwExStyle,active );
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment