mirror of
https://github.com/reactos/reactos.git
synced 2025-02-25 09:50:02 +00:00
Sync with wine-20040724
svn path=/trunk/; revision=10274
This commit is contained in:
parent
96364f9b04
commit
b4c02404fd
1 changed files with 155 additions and 175 deletions
|
@ -1,27 +1,40 @@
|
|||
/* $Id: static.c,v 1.13 2004/05/16 19:31:06 navaraf Exp $
|
||||
/*
|
||||
* Static control
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS User32
|
||||
* PURPOSE: Static control
|
||||
* FILE: lib/user32/controls/static.c
|
||||
* PROGRAMER: Ge van Geldorp (ge@gse.nl)
|
||||
* REVISION HISTORY: 2003/05/28 GvG Created
|
||||
* NOTES: Adapted from Wine
|
||||
* Copyright David W. Metcalfe, 1993
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include "windows.h"
|
||||
#include "user32/regcontrol.h"
|
||||
|
||||
#ifndef __REACTOS__
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(static);
|
||||
#endif
|
||||
|
||||
static void STATIC_PaintOwnerDrawfn( HWND hwnd, HDC hdc, DWORD style );
|
||||
static void STATIC_PaintTextfn( HWND hwnd, HDC hdc, DWORD style );
|
||||
static void STATIC_PaintRectfn( HWND hwnd, HDC hdc, DWORD style );
|
||||
static void STATIC_PaintIconfn( HWND hwnd, HDC hdc, DWORD style );
|
||||
static void STATIC_PaintBitmapfn( HWND hwnd, HDC hdc, DWORD style );
|
||||
static void STATIC_PaintEtchedfn( HWND hwnd, HDC hdc, DWORD style );
|
||||
static LRESULT CALLBACK StaticWndProcA( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
|
||||
static LRESULT CALLBACK StaticWndProcW( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
|
||||
static LRESULT WINAPI StaticWndProcA( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
|
||||
static LRESULT WINAPI StaticWndProcW( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
|
||||
|
||||
static COLORREF color_black, color_gray, color_white;
|
||||
static COLORREF color_windowframe, color_background, color_window;
|
||||
|
||||
/* offsets for GetWindowLong for static private information */
|
||||
#define HFONT_GWL_OFFSET 0
|
||||
|
@ -59,6 +72,7 @@ static pfPaint staticPaintFunc[SS_TYPEMASK+1] =
|
|||
*/
|
||||
const struct builtin_class_descr STATIC_builtin_class =
|
||||
{
|
||||
#ifdef __REACTOS__
|
||||
L"Static", /* name */
|
||||
CS_DBLCLKS | CS_PARENTDC, /* style */
|
||||
(WNDPROC) StaticWndProcW, /* procW */
|
||||
|
@ -66,6 +80,15 @@ const struct builtin_class_descr STATIC_builtin_class =
|
|||
STATIC_EXTRA_BYTES, /* extra */
|
||||
(LPCWSTR) IDC_ARROW, /* cursor */ /* FIXME Wine uses IDC_ARROWA */
|
||||
0 /* brush */
|
||||
#else
|
||||
"Static", /* name */
|
||||
CS_DBLCLKS | CS_PARENTDC, /* style */
|
||||
StaticWndProcA, /* procA */
|
||||
StaticWndProcW, /* procW */
|
||||
STATIC_EXTRA_BYTES, /* extra */
|
||||
IDC_ARROW, /* cursor */
|
||||
0 /* brush */
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
|
@ -76,24 +99,7 @@ const struct builtin_class_descr STATIC_builtin_class =
|
|||
*/
|
||||
static HICON STATIC_SetIcon( HWND hwnd, HICON hicon, DWORD style )
|
||||
{
|
||||
#if 0 /* FIXME */
|
||||
HICON prevIcon;
|
||||
CURSORICONINFO *info = hicon?(CURSORICONINFO *) GlobalLock16(HICON_16(hicon)):NULL;
|
||||
|
||||
if ((style & SS_TYPEMASK) != SS_ICON) return 0;
|
||||
if (hicon && !info) {
|
||||
ERR("huh? hicon!=0, but info=0???\n");
|
||||
return 0;
|
||||
}
|
||||
prevIcon = (HICON)SetWindowLongA( hwnd, HICON_GWL_OFFSET, (LONG)hicon );
|
||||
if (hicon)
|
||||
{
|
||||
SetWindowPos( hwnd, 0, 0, 0, info->nWidth, info->nHeight,
|
||||
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER );
|
||||
GlobalUnlock16(HICON_16(hicon));
|
||||
}
|
||||
return prevIcon;
|
||||
#else
|
||||
#ifdef __REACTOS__
|
||||
HICON prevIcon;
|
||||
|
||||
if ((style & SS_TYPEMASK) != SS_ICON) return 0;
|
||||
|
@ -115,6 +121,23 @@ static HICON STATIC_SetIcon( HWND hwnd, HICON hicon, DWORD style )
|
|||
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER );
|
||||
}
|
||||
return prevIcon;
|
||||
#else
|
||||
HICON prevIcon;
|
||||
CURSORICONINFO *info = hicon?(CURSORICONINFO *) GlobalLock16(HICON_16(hicon)):NULL;
|
||||
|
||||
if ((style & SS_TYPEMASK) != SS_ICON) return 0;
|
||||
if (hicon && !info) {
|
||||
ERR("huh? hicon!=0, but info=0???\n");
|
||||
return 0;
|
||||
}
|
||||
prevIcon = (HICON)SetWindowLongA( hwnd, HICON_GWL_OFFSET, (LONG)hicon );
|
||||
if (hicon)
|
||||
{
|
||||
SetWindowPos( hwnd, 0, 0, 0, info->nWidth, info->nHeight,
|
||||
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER );
|
||||
GlobalUnlock16(HICON_16(hicon));
|
||||
}
|
||||
return prevIcon;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -126,15 +149,18 @@ static HICON STATIC_SetIcon( HWND hwnd, HICON hicon, DWORD style )
|
|||
static HBITMAP STATIC_SetBitmap( HWND hwnd, HBITMAP hBitmap, DWORD style )
|
||||
{
|
||||
HBITMAP hOldBitmap;
|
||||
LONG full_style = GetWindowLongA( hwnd, GWL_STYLE );
|
||||
|
||||
if ((style & SS_TYPEMASK) != SS_BITMAP) return 0;
|
||||
if (hBitmap && GetObjectType(hBitmap) != OBJ_BITMAP) {
|
||||
OutputDebugStringA("huh? hBitmap!=0, but not bitmap\n");
|
||||
#ifdef __REACTOS__
|
||||
OutputDebugStringA("huh? hBitmap!=0, but not bitmap\n");
|
||||
#else
|
||||
ERR("huh? hBitmap!=0, but not bitmap\n");
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
hOldBitmap = (HBITMAP)SetWindowLongA( hwnd, HICON_GWL_OFFSET, (LONG)hBitmap );
|
||||
if (hBitmap && !(full_style & SS_REALSIZEIMAGE))
|
||||
if (hBitmap)
|
||||
{
|
||||
BITMAP bm;
|
||||
GetObjectW(hBitmap, sizeof(bm), &bm);
|
||||
|
@ -144,19 +170,6 @@ static HBITMAP STATIC_SetBitmap( HWND hwnd, HBITMAP hBitmap, DWORD style )
|
|||
return hOldBitmap;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* STATIC_LoadIconW
|
||||
*
|
||||
* Load the icon for an SS_ICON control.
|
||||
*/
|
||||
static HICON STATIC_LoadIconW( HWND hwnd, LPCWSTR name )
|
||||
{
|
||||
HINSTANCE hInstance = (HINSTANCE)GetWindowLongA( hwnd, GWL_HINSTANCE );
|
||||
HICON hicon = LoadIconW( hInstance, name );
|
||||
if (!hicon) hicon = LoadIconW( 0, name );
|
||||
return hicon;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* STATIC_LoadIconA
|
||||
*
|
||||
|
@ -171,17 +184,16 @@ static HICON STATIC_LoadIconA( HWND hwnd, LPCSTR name )
|
|||
}
|
||||
|
||||
/***********************************************************************
|
||||
* STATIC_LoadBitmapW
|
||||
* STATIC_LoadIconW
|
||||
*
|
||||
* Load the bitmap for an SS_BITMAP control.
|
||||
* Load the icon for an SS_ICON control.
|
||||
*/
|
||||
static HBITMAP STATIC_LoadBitmapW( HWND hwnd, LPCWSTR name )
|
||||
static HICON STATIC_LoadIconW( HWND hwnd, LPCWSTR name )
|
||||
{
|
||||
HINSTANCE hInstance = (HINSTANCE)GetWindowLongA( hwnd, GWL_HINSTANCE );
|
||||
HBITMAP hbitmap = LoadBitmapW( hInstance, name );
|
||||
if (!hbitmap) /* Try OEM icon (FIXME: is this right?) */
|
||||
hbitmap = LoadBitmapW( 0, name );
|
||||
return hbitmap;
|
||||
HICON hicon = LoadIconW( hInstance, name );
|
||||
if (!hicon) hicon = LoadIconW( 0, name );
|
||||
return hicon;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
|
@ -198,6 +210,20 @@ static HBITMAP STATIC_LoadBitmapA( HWND hwnd, LPCSTR name )
|
|||
return hbitmap;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* STATIC_LoadBitmapW
|
||||
*
|
||||
* Load the bitmap for an SS_BITMAP control.
|
||||
*/
|
||||
static HBITMAP STATIC_LoadBitmapW( HWND hwnd, LPCWSTR name )
|
||||
{
|
||||
HINSTANCE hInstance = (HINSTANCE)GetWindowLongA( hwnd, GWL_HINSTANCE );
|
||||
HBITMAP hbitmap = LoadBitmapW( hInstance, name );
|
||||
if (!hbitmap) /* Try OEM icon (FIXME: is this right?) */
|
||||
hbitmap = LoadBitmapW( 0, name );
|
||||
return hbitmap;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* STATIC_TryPaintFcn
|
||||
*
|
||||
|
@ -221,25 +247,29 @@ static VOID STATIC_TryPaintFcn(HWND hwnd, LONG full_style)
|
|||
/***********************************************************************
|
||||
* StaticWndProc_common
|
||||
*/
|
||||
static LRESULT CALLBACK StaticWndProc_common( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL unicode )
|
||||
static LRESULT StaticWndProc_common( HWND hwnd, UINT uMsg, WPARAM wParam,
|
||||
LPARAM lParam, BOOL unicode )
|
||||
{
|
||||
LRESULT lResult = 0;
|
||||
LONG full_style = GetWindowLongA( hwnd, GWL_STYLE );
|
||||
LONG style = full_style & SS_TYPEMASK;
|
||||
|
||||
if (!IsWindow( hwnd )) return 0;
|
||||
switch (uMsg)
|
||||
{
|
||||
case WM_CREATE:
|
||||
if (style < 0L || style > SS_TYPEMASK)
|
||||
{
|
||||
#ifdef __REACTOS__
|
||||
OutputDebugStringA("Unknown style\n");
|
||||
#else
|
||||
ERR("Unknown style 0x%02lx\n", style );
|
||||
#endif
|
||||
return -1;
|
||||
}
|
||||
/* initialise colours */
|
||||
color_black = GetSysColor(COLOR_3DDKSHADOW);
|
||||
color_gray = GetSysColor(COLOR_3DSHADOW);
|
||||
color_white = GetSysColor(COLOR_3DHILIGHT);
|
||||
color_windowframe = GetSysColor(COLOR_WINDOWFRAME);
|
||||
color_background = GetSysColor(COLOR_BACKGROUND);
|
||||
color_window = GetSysColor(COLOR_WINDOW);
|
||||
break;
|
||||
|
||||
case WM_NCDESTROY:
|
||||
|
@ -254,17 +284,16 @@ static LRESULT CALLBACK StaticWndProc_common( HWND hwnd, UINT uMsg, WPARAM wPara
|
|||
*/
|
||||
break;
|
||||
}
|
||||
else
|
||||
return unicode ? DefWindowProcW(hwnd, uMsg, wParam, lParam) :
|
||||
DefWindowProcA(hwnd, uMsg, wParam, lParam);
|
||||
else return unicode ? DefWindowProcW(hwnd, uMsg, wParam, lParam) :
|
||||
DefWindowProcA(hwnd, uMsg, wParam, lParam);
|
||||
|
||||
case WM_PAINT:
|
||||
{
|
||||
PAINTSTRUCT ps;
|
||||
BeginPaint(hwnd, &ps);
|
||||
HDC hdc = wParam ? (HDC)wParam : BeginPaint(hwnd, &ps);
|
||||
if (staticPaintFunc[style])
|
||||
(staticPaintFunc[style])( hwnd, ps.hdc, full_style );
|
||||
EndPaint(hwnd, &ps);
|
||||
(staticPaintFunc[style])( hwnd, hdc, full_style );
|
||||
if (!wParam) EndPaint(hwnd, &ps);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -273,9 +302,9 @@ static LRESULT CALLBACK StaticWndProc_common( HWND hwnd, UINT uMsg, WPARAM wPara
|
|||
break;
|
||||
|
||||
case WM_SYSCOLORCHANGE:
|
||||
color_black = GetSysColor(COLOR_3DDKSHADOW);
|
||||
color_gray = GetSysColor(COLOR_3DSHADOW);
|
||||
color_white = GetSysColor(COLOR_3DHILIGHT);
|
||||
color_windowframe = GetSysColor(COLOR_WINDOWFRAME);
|
||||
color_background = GetSysColor(COLOR_BACKGROUND);
|
||||
color_window = GetSysColor(COLOR_WINDOW);
|
||||
InvalidateRect(hwnd, NULL, TRUE);
|
||||
break;
|
||||
|
||||
|
@ -284,14 +313,17 @@ static LRESULT CALLBACK StaticWndProc_common( HWND hwnd, UINT uMsg, WPARAM wPara
|
|||
SetWindowLongA( hwnd, GWL_EXSTYLE,
|
||||
GetWindowLongA( hwnd, GWL_EXSTYLE ) | WS_EX_STATICEDGE );
|
||||
|
||||
lParam = (LPARAM)(((LPCREATESTRUCTW)lParam)->lpszName);
|
||||
if(unicode)
|
||||
lParam = (LPARAM)(((LPCREATESTRUCTW)lParam)->lpszName);
|
||||
else
|
||||
lParam = (LPARAM)(((LPCREATESTRUCTA)lParam)->lpszName);
|
||||
/* fall through */
|
||||
case WM_SETTEXT:
|
||||
switch (style) {
|
||||
case SS_ICON:
|
||||
{
|
||||
HICON hIcon;
|
||||
if (unicode)
|
||||
if(unicode)
|
||||
hIcon = STATIC_LoadIconW(hwnd, (LPCWSTR)lParam);
|
||||
else
|
||||
hIcon = STATIC_LoadIconA(hwnd, (LPCSTR)lParam);
|
||||
|
@ -302,7 +334,7 @@ static LRESULT CALLBACK StaticWndProc_common( HWND hwnd, UINT uMsg, WPARAM wPara
|
|||
case SS_BITMAP:
|
||||
{
|
||||
HBITMAP hBitmap;
|
||||
if (unicode)
|
||||
if(unicode)
|
||||
hBitmap = STATIC_LoadBitmapW(hwnd, (LPCWSTR)lParam);
|
||||
else
|
||||
hBitmap = STATIC_LoadBitmapA(hwnd, (LPCSTR)lParam);
|
||||
|
@ -317,8 +349,10 @@ static LRESULT CALLBACK StaticWndProc_common( HWND hwnd, UINT uMsg, WPARAM wPara
|
|||
{
|
||||
if (HIWORD(lParam))
|
||||
{
|
||||
lResult = unicode? DefWindowProcW(hwnd, WM_SETTEXT, wParam, lParam) :
|
||||
DefWindowProcA(hwnd, uMsg, wParam, lParam);
|
||||
if(unicode)
|
||||
lResult = DefWindowProcW( hwnd, WM_SETTEXT, wParam, lParam );
|
||||
else
|
||||
lResult = DefWindowProcA( hwnd, WM_SETTEXT, wParam, lParam );
|
||||
}
|
||||
if (uMsg == WM_SETTEXT)
|
||||
STATIC_TryPaintFcn( hwnd, full_style );
|
||||
|
@ -327,7 +361,10 @@ static LRESULT CALLBACK StaticWndProc_common( HWND hwnd, UINT uMsg, WPARAM wPara
|
|||
default:
|
||||
if (HIWORD(lParam))
|
||||
{
|
||||
lResult = DefWindowProcW( hwnd, WM_SETTEXT, wParam, lParam );
|
||||
if(unicode)
|
||||
lResult = DefWindowProcW( hwnd, WM_SETTEXT, wParam, lParam );
|
||||
else
|
||||
lResult = DefWindowProcA( hwnd, WM_SETTEXT, wParam, lParam );
|
||||
}
|
||||
if(uMsg == WM_SETTEXT)
|
||||
InvalidateRect(hwnd, NULL, TRUE);
|
||||
|
@ -354,26 +391,23 @@ static LRESULT CALLBACK StaticWndProc_common( HWND hwnd, UINT uMsg, WPARAM wPara
|
|||
return DLGC_STATIC;
|
||||
|
||||
case WM_LBUTTONDOWN:
|
||||
if (! (full_style & SS_NOTIFY)) return 0;
|
||||
if (unicode)
|
||||
SendMessageW(GetParent(hwnd), WM_COMMAND,
|
||||
MAKEWPARAM((WORD) GetWindowLongW(hwnd, GWL_ID), STN_CLICKED), (LPARAM) hwnd);
|
||||
else
|
||||
SendMessageA(GetParent(hwnd), WM_COMMAND,
|
||||
MAKEWPARAM((WORD) GetWindowLongA(hwnd, GWL_ID), STN_CLICKED), (LPARAM) hwnd);
|
||||
return 0;
|
||||
case WM_NCLBUTTONDOWN:
|
||||
if (full_style & SS_NOTIFY)
|
||||
SendMessageW( GetParent(hwnd), WM_COMMAND,
|
||||
MAKEWPARAM( GetWindowLongW(hwnd,GWL_ID), STN_CLICKED ), (LPARAM)hwnd);
|
||||
return 0;
|
||||
|
||||
case WM_LBUTTONDBLCLK:
|
||||
if (! (full_style & SS_NOTIFY)) return 0;
|
||||
if (unicode)
|
||||
SendMessageW(GetParent(hwnd), WM_COMMAND,
|
||||
MAKEWPARAM((WORD) GetWindowLongW(hwnd, GWL_ID), STN_DBLCLK), (LPARAM) hwnd);
|
||||
else
|
||||
SendMessageA(GetParent(hwnd), WM_COMMAND,
|
||||
MAKEWPARAM((WORD) GetWindowLongA(hwnd, GWL_ID), STN_DBLCLK), (LPARAM) hwnd);
|
||||
return 0;
|
||||
case WM_NCLBUTTONDBLCLK:
|
||||
if (full_style & SS_NOTIFY)
|
||||
SendMessageW( GetParent(hwnd), WM_COMMAND,
|
||||
MAKEWPARAM( GetWindowLongW(hwnd,GWL_ID), STN_DBLCLK ), (LPARAM)hwnd);
|
||||
return 0;
|
||||
|
||||
case STM_GETIMAGE:
|
||||
#ifndef __REACTOS__
|
||||
case STM_GETICON16:
|
||||
#endif
|
||||
case STM_GETICON:
|
||||
return GetWindowLongA( hwnd, HICON_GWL_OFFSET );
|
||||
|
||||
|
@ -386,42 +420,45 @@ static LRESULT CALLBACK StaticWndProc_common( HWND hwnd, UINT uMsg, WPARAM wPara
|
|||
lResult = (LRESULT)STATIC_SetIcon( hwnd, (HICON)lParam, style );
|
||||
break;
|
||||
default:
|
||||
OutputDebugStringA("STM_SETIMAGE: Unhandled type\n");
|
||||
#ifndef __REACTOS__
|
||||
FIXME("STM_SETIMAGE: Unhandled type %x\n", wParam);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
InvalidateRect( hwnd, NULL, TRUE );
|
||||
break;
|
||||
|
||||
#ifndef __REACTOS__
|
||||
case STM_SETICON16:
|
||||
#endif
|
||||
case STM_SETICON:
|
||||
lResult = (LRESULT)STATIC_SetIcon( hwnd, (HICON)wParam, style );
|
||||
InvalidateRect( hwnd, NULL, TRUE );
|
||||
break;
|
||||
|
||||
default:
|
||||
return unicode ? DefWindowProcW(hwnd, uMsg, wParam, lParam) :
|
||||
DefWindowProcA(hwnd, uMsg, wParam, lParam);
|
||||
return unicode ? DefWindowProcW(hwnd, uMsg, wParam, lParam) :
|
||||
DefWindowProcA(hwnd, uMsg, wParam, lParam);
|
||||
}
|
||||
|
||||
return lResult;
|
||||
}
|
||||
|
||||
|
||||
/*********************************************************************
|
||||
*
|
||||
* StaticWndProcW (USER32.@)
|
||||
/***********************************************************************
|
||||
* StaticWndProcA
|
||||
*/
|
||||
LRESULT CALLBACK StaticWndProcW(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
static LRESULT WINAPI StaticWndProcA( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
|
||||
{
|
||||
return StaticWndProc_common(hWnd, uMsg, wParam, lParam, TRUE);
|
||||
if (!IsWindow( hWnd )) return 0;
|
||||
return StaticWndProc_common(hWnd, uMsg, wParam, lParam, FALSE);
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
*
|
||||
* StaticWndProc (USER32.@)
|
||||
/***********************************************************************
|
||||
* StaticWndProcW
|
||||
*/
|
||||
LRESULT CALLBACK StaticWndProcA(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
static LRESULT WINAPI StaticWndProcW( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
|
||||
{
|
||||
return StaticWndProc_common(hWnd, uMsg, wParam, lParam, FALSE);
|
||||
if (!IsWindow( hWnd )) return 0;
|
||||
return StaticWndProc_common(hWnd, uMsg, wParam, lParam, TRUE);
|
||||
}
|
||||
|
||||
static void STATIC_PaintOwnerDrawfn( HWND hwnd, HDC hdc, DWORD style )
|
||||
|
@ -448,29 +485,28 @@ static void STATIC_PaintTextfn( HWND hwnd, HDC hdc, DWORD style )
|
|||
RECT rc;
|
||||
HBRUSH hBrush;
|
||||
HFONT hFont;
|
||||
UINT wFormat;
|
||||
WORD wFormat;
|
||||
INT len;
|
||||
WCHAR *text;
|
||||
HPEN ShadowPen, HighlightPen;
|
||||
|
||||
GetClientRect( hwnd, &rc);
|
||||
|
||||
switch (style & SS_TYPEMASK)
|
||||
{
|
||||
case SS_LEFT:
|
||||
wFormat = DT_LEFT | DT_EXPANDTABS | DT_WORDBREAK | DT_NOCLIP;
|
||||
wFormat = DT_LEFT | DT_EXPANDTABS | DT_WORDBREAK;
|
||||
break;
|
||||
|
||||
case SS_CENTER:
|
||||
wFormat = DT_CENTER | DT_EXPANDTABS | DT_WORDBREAK | DT_NOCLIP;
|
||||
wFormat = DT_CENTER | DT_EXPANDTABS | DT_WORDBREAK;
|
||||
break;
|
||||
|
||||
case SS_RIGHT:
|
||||
wFormat = DT_RIGHT | DT_EXPANDTABS | DT_WORDBREAK | DT_NOCLIP;
|
||||
wFormat = DT_RIGHT | DT_EXPANDTABS | DT_WORDBREAK;
|
||||
break;
|
||||
|
||||
case SS_SIMPLE:
|
||||
wFormat = DT_LEFT | DT_SINGLELINE | DT_VCENTER | DT_NOCLIP;
|
||||
wFormat = DT_LEFT | DT_SINGLELINE | DT_VCENTER;
|
||||
break;
|
||||
|
||||
case SS_LEFTNOWORDWRAP:
|
||||
|
@ -483,20 +519,6 @@ static void STATIC_PaintTextfn( HWND hwnd, HDC hdc, DWORD style )
|
|||
|
||||
if (style & SS_NOPREFIX)
|
||||
wFormat |= DT_NOPREFIX;
|
||||
switch(style & SS_ELLIPSISMASK)
|
||||
{
|
||||
case SS_WORDELLIPSIS:
|
||||
wFormat |= DT_WORD_ELLIPSIS | DT_SINGLELINE;
|
||||
break;
|
||||
case SS_ENDELLIPSIS:
|
||||
wFormat |= DT_END_ELLIPSIS;
|
||||
wFormat &= ~DT_WORDBREAK;
|
||||
break;
|
||||
case SS_PATHELLIPSIS:
|
||||
wFormat |= DT_PATH_ELLIPSIS;
|
||||
wFormat &= ~DT_WORDBREAK;
|
||||
break;
|
||||
}
|
||||
|
||||
if ((hFont = (HFONT)GetWindowLongA( hwnd, HFONT_GWL_OFFSET ))) SelectObject( hdc, hFont );
|
||||
|
||||
|
@ -510,27 +532,6 @@ static void STATIC_PaintTextfn( HWND hwnd, HDC hdc, DWORD style )
|
|||
FillRect( hdc, &rc, hBrush );
|
||||
}
|
||||
if (!IsWindowEnabled(hwnd)) SetTextColor(hdc, GetSysColor(COLOR_GRAYTEXT));
|
||||
SetBkMode(hdc, TRANSPARENT);
|
||||
|
||||
if (style & SS_SUNKEN)
|
||||
{
|
||||
ShadowPen = CreatePen(PS_SOLID, 1, GetSysColor(COLOR_BTNSHADOW));
|
||||
SelectObject(hdc, ShadowPen);
|
||||
MoveToEx(hdc, 0, rc.bottom - 2, NULL);
|
||||
LineTo(hdc, 0, 0);
|
||||
LineTo(hdc, rc.right - 1, 0);
|
||||
HighlightPen = CreatePen(PS_SOLID, 1, GetSysColor(COLOR_BTNHIGHLIGHT));
|
||||
SelectObject(hdc, HighlightPen);
|
||||
LineTo(hdc, rc.right - 1, rc.bottom - 1);
|
||||
LineTo(hdc, -1, rc.bottom - 1);
|
||||
SelectObject(hdc, GetStockObject(WHITE_PEN));
|
||||
DeleteObject(HighlightPen);
|
||||
DeleteObject(ShadowPen);
|
||||
rc.left++;
|
||||
rc.right--;
|
||||
rc.top++;
|
||||
rc.bottom--;
|
||||
}
|
||||
|
||||
if (!(len = SendMessageW( hwnd, WM_GETTEXTLENGTH, 0, 0 ))) return;
|
||||
if (!(text = HeapAlloc( GetProcessHeap(), 0, (len + 1) * sizeof(WCHAR) ))) return;
|
||||
|
@ -549,27 +550,27 @@ static void STATIC_PaintRectfn( HWND hwnd, HDC hdc, DWORD style )
|
|||
switch (style & SS_TYPEMASK)
|
||||
{
|
||||
case SS_BLACKRECT:
|
||||
hBrush = CreateSolidBrush(color_black);
|
||||
hBrush = CreateSolidBrush(color_windowframe);
|
||||
FillRect( hdc, &rc, hBrush );
|
||||
break;
|
||||
case SS_GRAYRECT:
|
||||
hBrush = CreateSolidBrush(color_gray);
|
||||
hBrush = CreateSolidBrush(color_background);
|
||||
FillRect( hdc, &rc, hBrush );
|
||||
break;
|
||||
case SS_WHITERECT:
|
||||
hBrush = CreateSolidBrush(color_white);
|
||||
hBrush = CreateSolidBrush(color_window);
|
||||
FillRect( hdc, &rc, hBrush );
|
||||
break;
|
||||
case SS_BLACKFRAME:
|
||||
hBrush = CreateSolidBrush(color_black);
|
||||
hBrush = CreateSolidBrush(color_windowframe);
|
||||
FrameRect( hdc, &rc, hBrush );
|
||||
break;
|
||||
case SS_GRAYFRAME:
|
||||
hBrush = CreateSolidBrush(color_gray);
|
||||
hBrush = CreateSolidBrush(color_background);
|
||||
FrameRect( hdc, &rc, hBrush );
|
||||
break;
|
||||
case SS_WHITEFRAME:
|
||||
hBrush = CreateSolidBrush(color_white);
|
||||
hBrush = CreateSolidBrush(color_window);
|
||||
FrameRect( hdc, &rc, hBrush );
|
||||
break;
|
||||
default:
|
||||
|
@ -595,16 +596,12 @@ static void STATIC_PaintIconfn( HWND hwnd, HDC hdc, DWORD style )
|
|||
|
||||
static void STATIC_PaintBitmapfn(HWND hwnd, HDC hdc, DWORD style )
|
||||
{
|
||||
RECT rc;
|
||||
HBRUSH hbrush;
|
||||
HDC hMemDC;
|
||||
HBITMAP hBitmap, oldbitmap;
|
||||
LONG full_style = GetWindowLongA( hwnd, GWL_STYLE );
|
||||
|
||||
GetClientRect( hwnd, &rc );
|
||||
hbrush = (HBRUSH)SendMessageW( GetParent(hwnd), WM_CTLCOLORSTATIC,
|
||||
/* message is still sent, even if the returned brush is not used */
|
||||
SendMessageW( GetParent(hwnd), WM_CTLCOLORSTATIC,
|
||||
(WPARAM)hdc, (LPARAM)hwnd );
|
||||
FillRect( hdc, &rc, hbrush );
|
||||
|
||||
if ((hBitmap = (HBITMAP)GetWindowLongA( hwnd, HICON_GWL_OFFSET )))
|
||||
{
|
||||
|
@ -614,17 +611,8 @@ static void STATIC_PaintBitmapfn(HWND hwnd, HDC hdc, DWORD style )
|
|||
if (!(hMemDC = CreateCompatibleDC( hdc ))) return;
|
||||
GetObjectW(hBitmap, sizeof(bm), &bm);
|
||||
oldbitmap = SelectObject(hMemDC, hBitmap);
|
||||
if (full_style & SS_CENTERIMAGE)
|
||||
{
|
||||
BitBlt(hdc, (rc.right - bm.bmWidth) >> 1,
|
||||
(rc.bottom - bm.bmHeight) >> 1,
|
||||
bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
|
||||
}
|
||||
else
|
||||
{
|
||||
BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0,
|
||||
SRCCOPY);
|
||||
}
|
||||
BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0,
|
||||
SRCCOPY);
|
||||
SelectObject(hMemDC, oldbitmap);
|
||||
DeleteDC(hMemDC);
|
||||
}
|
||||
|
@ -639,18 +627,10 @@ static void STATIC_PaintEtchedfn( HWND hwnd, HDC hdc, DWORD style )
|
|||
switch (style & SS_TYPEMASK)
|
||||
{
|
||||
case SS_ETCHEDHORZ:
|
||||
#if 0 /* This is what seems logical */
|
||||
DrawEdge(hdc,&rc,EDGE_ETCHED,BF_TOP|BF_BOTTOM);
|
||||
#else /* But this is what NT, Win2k and WinXP actually do */
|
||||
DrawEdge(hdc,&rc,EDGE_ETCHED,BF_TOP);
|
||||
#endif
|
||||
break;
|
||||
case SS_ETCHEDVERT:
|
||||
#if 0 /* This is what seems logical */
|
||||
DrawEdge(hdc,&rc,EDGE_ETCHED,BF_LEFT|BF_RIGHT);
|
||||
#else /* But this is what NT, Win2k and WinXP actually do */
|
||||
DrawEdge(hdc,&rc,EDGE_ETCHED,BF_LEFT);
|
||||
#endif
|
||||
break;
|
||||
case SS_ETCHEDFRAME:
|
||||
DrawEdge (hdc, &rc, EDGE_ETCHED, BF_RECT);
|
||||
|
|
Loading…
Reference in a new issue