1993-09-04 12:09:32 +02:00
|
|
|
/*
|
|
|
|
* DC device-independent Get/SetXXX functions
|
|
|
|
*
|
|
|
|
* Copyright 1993 Alexandre Julliard
|
1994-12-10 14:02:28 +01:00
|
|
|
*
|
1996-07-12 21:02:39 +02:00
|
|
|
*/
|
|
|
|
|
1993-09-04 12:09:32 +02:00
|
|
|
#include "gdi.h"
|
1999-04-25 11:24:23 +02:00
|
|
|
#include "dc.h"
|
1993-09-04 12:09:32 +02:00
|
|
|
|
1996-12-22 19:27:48 +01:00
|
|
|
#define DC_GET_VAL_16( func_type, func_name, dc_field ) \
|
1997-08-24 18:00:30 +02:00
|
|
|
func_type WINAPI func_name( HDC16 hdc ) \
|
1993-09-04 12:09:32 +02:00
|
|
|
{ \
|
|
|
|
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); \
|
|
|
|
if (!dc) return 0; \
|
1996-12-22 19:27:48 +01:00
|
|
|
return dc->dc_field; \
|
|
|
|
}
|
|
|
|
|
|
|
|
#define DC_GET_VAL_32( func_type, func_name, dc_field ) \
|
1999-02-26 12:11:13 +01:00
|
|
|
func_type WINAPI func_name( HDC hdc ) \
|
1996-12-22 19:27:48 +01:00
|
|
|
{ \
|
|
|
|
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); \
|
|
|
|
if (!dc) return 0; \
|
|
|
|
return dc->dc_field; \
|
1993-09-04 12:09:32 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
#define DC_GET_X_Y( func_type, func_name, ret_x, ret_y ) \
|
1997-08-24 18:00:30 +02:00
|
|
|
func_type WINAPI func_name( HDC16 hdc ) \
|
1993-09-04 12:09:32 +02:00
|
|
|
{ \
|
|
|
|
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); \
|
|
|
|
if (!dc) return 0; \
|
1996-12-22 19:27:48 +01:00
|
|
|
return MAKELONG( dc->ret_x, dc->ret_y ); \
|
1993-09-04 12:09:32 +02:00
|
|
|
}
|
|
|
|
|
1998-10-28 11:47:09 +01:00
|
|
|
/* DC_GET_VAL_EX is used to define functions returning a POINT or a SIZE. It is
|
|
|
|
* important that the function has the right signature, for the implementation
|
|
|
|
* we can do whatever we want.
|
|
|
|
*/
|
|
|
|
#define DC_GET_VAL_EX( func_name, ret_x, ret_y, type ) \
|
|
|
|
BOOL16 WINAPI func_name##16( HDC16 hdc, LP##type##16 pt ) \
|
1993-09-04 12:09:32 +02:00
|
|
|
{ \
|
|
|
|
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); \
|
|
|
|
if (!dc) return FALSE; \
|
1998-10-28 11:47:09 +01:00
|
|
|
((LPPOINT16)pt)->x = dc->ret_x; \
|
|
|
|
((LPPOINT16)pt)->y = dc->ret_y; \
|
Release 960516
Thu May 16 13:35:31 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [*/*.c]
Renamed RECT, POINT and SIZE structures to RECT16, POINT16 and
SIZE16. Implemented Win32 version of most functions that take
these types as parameters.
* [configure]
Patched autoconf to attempt to correctly detect -lnsl and
-lsocket. Please check this out.
* [controls/button.c]
Added support for Win32 BM_* messages.
* [controls/menu.c]
Avoid sending extra WM_MENUSELECT messages. This avoids crashes
with Excel.
* [memory.heap.c] [include/heap.h]
Added support for SEGPTRs in Win32 heaps. Added a few macros to
make using SEGPTRs easier. They are a bit slower than MAKE_SEGPTR,
but they work with Win32.
* [memory/atom.c]
Implemented Win32 atom functions.
* [memory/local.c]
Fixed LocalReAlloc() changes to avoid copying the whole block twice.
* [win32/memory.c]
Use /dev/zero instead of MAP_ANON for VirtualAlloc().
* [windows/class.c]
Properly implemented the Win32 class functions.
* [windows/winproc.c] (New file)
New file handling the message translation between Win16 and Win32.
Mon May 13 18:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [windows/mdi.c] [windows/menu.c]
Improved WM_MDICREATE and WM_MDICASCADE handling.
* [windows/event.c] [objects/bitblt.c]
Handle GraphicsExpose event for BitBlt from screen to screen.
* [windows/event.c] [windows/win.c] [windows/nonclient.c]
Bunch of fixes for problems with -managed.
* [windows/win.c] [windows/winpos.c]
Changed conditions for WM_SIZE, WM_MOVE, and WM_GETMINMAXINFO
in CreateWindow.
* [windows/win.c] [windows/queue.c] [misc/user.c]
Do not send WM_PARENTNOTIFY when in AppExit and call WH_SHELL
on window creation/destruction.
* [objects/palette.c]
Crude RealizePalette(). At least something is visible in LviewPro.
Sun May 12 02:05:00 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/gdi32.spec]
Added Rectangle (use win16 version).
* [if1632/kernel32.spec]
Added GetWindowsDirectoryA (use win16 GetWindowsDirectory).
* [if1632/user32.spec]
Added GetSubMenu, MoveWindow, SetScrollPos, SetScrollRange (use win16
versions).
Added SetWindowsHookExA (empty stub for now).
* [include/handle32.h]
Changed #include <malloc.h> to #include <stdlib.h> to prevent
hate message from FreeBSD compiler.
* [win32/newfns.c]
Added new function SetWindowsHookEx32A (empty stub for now).
* [win32/user32.c]
Removed redundant debugging printf statement.
Sun May 12 01:24:57 1996 Huw D. M. Davies <h.davies1@physics.oxford.ac.uk>
* [memory/local.c]
Avoid creating adjacent free blocks.
Free the block in LocalReAlloc() before allocating a new one.
Fixed LocalReAlloc() for discarded blocks.
Fri May 10 23:05:12 1996 Jukka Iivonen <iivonen@cc.helsinki.fi>
* [resources/sysres_Fi.rc]
ChooseFont and ChooseColor dialogs updated.
Fri May 10 17:19:33 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/drive.c,if1632/kernel.spec]
GetCurrentDirectory(),SetCurrentDirectory() implemented.
* [if1632/advapi32.spec] [if1632/kernel.spec] [if1632/shell.spec]
[include/windows.h] [include/winreg.h] [loader/main.c]
[misc/main.c] [misc/shell.c] [misc/registry.c]
Registry fixes:
- loads win95 registry databases,
- save only updated keys on default,
- now adhers to the new function naming standard,
- minor cleanups.
Tue May 7 22:36:13 1996 Albrecht Kleine <kleine@ak.sax.de>
* [combo.c]
Added WM_COMMAND-handling for interaction between EDIT and COMBOLBOX
and synchronized mine with Greg Kreider's works.
* [commdlg.c]
Bugfix in ChooseFont: font size handling.
1996-05-16 20:21:06 +02:00
|
|
|
return TRUE; \
|
|
|
|
} \
|
|
|
|
\
|
1999-02-26 12:11:13 +01:00
|
|
|
BOOL WINAPI func_name( HDC hdc, LP##type pt ) \
|
Release 960516
Thu May 16 13:35:31 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [*/*.c]
Renamed RECT, POINT and SIZE structures to RECT16, POINT16 and
SIZE16. Implemented Win32 version of most functions that take
these types as parameters.
* [configure]
Patched autoconf to attempt to correctly detect -lnsl and
-lsocket. Please check this out.
* [controls/button.c]
Added support for Win32 BM_* messages.
* [controls/menu.c]
Avoid sending extra WM_MENUSELECT messages. This avoids crashes
with Excel.
* [memory.heap.c] [include/heap.h]
Added support for SEGPTRs in Win32 heaps. Added a few macros to
make using SEGPTRs easier. They are a bit slower than MAKE_SEGPTR,
but they work with Win32.
* [memory/atom.c]
Implemented Win32 atom functions.
* [memory/local.c]
Fixed LocalReAlloc() changes to avoid copying the whole block twice.
* [win32/memory.c]
Use /dev/zero instead of MAP_ANON for VirtualAlloc().
* [windows/class.c]
Properly implemented the Win32 class functions.
* [windows/winproc.c] (New file)
New file handling the message translation between Win16 and Win32.
Mon May 13 18:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [windows/mdi.c] [windows/menu.c]
Improved WM_MDICREATE and WM_MDICASCADE handling.
* [windows/event.c] [objects/bitblt.c]
Handle GraphicsExpose event for BitBlt from screen to screen.
* [windows/event.c] [windows/win.c] [windows/nonclient.c]
Bunch of fixes for problems with -managed.
* [windows/win.c] [windows/winpos.c]
Changed conditions for WM_SIZE, WM_MOVE, and WM_GETMINMAXINFO
in CreateWindow.
* [windows/win.c] [windows/queue.c] [misc/user.c]
Do not send WM_PARENTNOTIFY when in AppExit and call WH_SHELL
on window creation/destruction.
* [objects/palette.c]
Crude RealizePalette(). At least something is visible in LviewPro.
Sun May 12 02:05:00 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/gdi32.spec]
Added Rectangle (use win16 version).
* [if1632/kernel32.spec]
Added GetWindowsDirectoryA (use win16 GetWindowsDirectory).
* [if1632/user32.spec]
Added GetSubMenu, MoveWindow, SetScrollPos, SetScrollRange (use win16
versions).
Added SetWindowsHookExA (empty stub for now).
* [include/handle32.h]
Changed #include <malloc.h> to #include <stdlib.h> to prevent
hate message from FreeBSD compiler.
* [win32/newfns.c]
Added new function SetWindowsHookEx32A (empty stub for now).
* [win32/user32.c]
Removed redundant debugging printf statement.
Sun May 12 01:24:57 1996 Huw D. M. Davies <h.davies1@physics.oxford.ac.uk>
* [memory/local.c]
Avoid creating adjacent free blocks.
Free the block in LocalReAlloc() before allocating a new one.
Fixed LocalReAlloc() for discarded blocks.
Fri May 10 23:05:12 1996 Jukka Iivonen <iivonen@cc.helsinki.fi>
* [resources/sysres_Fi.rc]
ChooseFont and ChooseColor dialogs updated.
Fri May 10 17:19:33 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/drive.c,if1632/kernel.spec]
GetCurrentDirectory(),SetCurrentDirectory() implemented.
* [if1632/advapi32.spec] [if1632/kernel.spec] [if1632/shell.spec]
[include/windows.h] [include/winreg.h] [loader/main.c]
[misc/main.c] [misc/shell.c] [misc/registry.c]
Registry fixes:
- loads win95 registry databases,
- save only updated keys on default,
- now adhers to the new function naming standard,
- minor cleanups.
Tue May 7 22:36:13 1996 Albrecht Kleine <kleine@ak.sax.de>
* [combo.c]
Added WM_COMMAND-handling for interaction between EDIT and COMBOLBOX
and synchronized mine with Greg Kreider's works.
* [commdlg.c]
Bugfix in ChooseFont: font size handling.
1996-05-16 20:21:06 +02:00
|
|
|
{ \
|
|
|
|
DC * dc = (DC *) GDI_GetObjPtr( (HDC16)hdc, DC_MAGIC ); \
|
|
|
|
if (!dc) return FALSE; \
|
1999-02-26 12:11:13 +01:00
|
|
|
((LPPOINT)pt)->x = dc->ret_x; \
|
|
|
|
((LPPOINT)pt)->y = dc->ret_y; \
|
1993-09-04 12:09:32 +02:00
|
|
|
return TRUE; \
|
|
|
|
}
|
|
|
|
|
1999-04-25 11:24:23 +02:00
|
|
|
#define DC_SET_MODE( func_name, dc_field, min_val, max_val ) \
|
|
|
|
INT16 WINAPI func_name##16( HDC16 hdc, INT16 mode ) \
|
1996-12-22 19:27:48 +01:00
|
|
|
{ \
|
1999-04-25 11:24:23 +02:00
|
|
|
return func_name( hdc, mode ); \
|
|
|
|
} \
|
|
|
|
\
|
1999-02-26 12:11:13 +01:00
|
|
|
INT WINAPI func_name( HDC hdc, INT mode ) \
|
1993-09-04 12:09:32 +02:00
|
|
|
{ \
|
1999-02-26 12:11:13 +01:00
|
|
|
INT prevMode; \
|
1999-04-25 11:24:23 +02:00
|
|
|
DC *dc = DC_GetDCPtr( hdc ); \
|
|
|
|
if(!dc) return 0; \
|
1993-09-04 12:09:32 +02:00
|
|
|
if ((mode < min_val) || (mode > max_val)) return 0; \
|
1999-04-25 11:24:23 +02:00
|
|
|
if (dc->funcs->p##func_name) { \
|
|
|
|
prevMode = dc->funcs->p##func_name( dc, mode ); \
|
|
|
|
} else { \
|
|
|
|
prevMode = dc->dc_field; \
|
|
|
|
dc->dc_field = mode; \
|
1994-05-18 20:29:32 +02:00
|
|
|
} \
|
1999-04-25 11:24:23 +02:00
|
|
|
GDI_HEAP_UNLOCK( hdc ); \
|
1993-09-04 12:09:32 +02:00
|
|
|
return prevMode; \
|
|
|
|
}
|
|
|
|
|
1999-10-31 03:07:05 +01:00
|
|
|
/***********************************************************************
|
|
|
|
* SetBkMode (GDI.2) (GDI32.306)
|
|
|
|
*
|
|
|
|
*/
|
1999-04-25 11:24:23 +02:00
|
|
|
DC_SET_MODE( SetBkMode, w.backgroundMode, TRANSPARENT, OPAQUE )
|
|
|
|
|
1999-10-31 03:07:05 +01:00
|
|
|
/***********************************************************************
|
|
|
|
* SetROP2 (GDI.4) (GDI32.331)
|
|
|
|
*/
|
1999-04-25 11:24:23 +02:00
|
|
|
DC_SET_MODE( SetROP2, w.ROPmode, R2_BLACK, R2_WHITE )
|
|
|
|
|
1999-10-31 03:07:05 +01:00
|
|
|
/***********************************************************************
|
|
|
|
* SetRelAbs (GDI.5) (GDI32.333)
|
|
|
|
*/
|
1999-04-25 11:24:23 +02:00
|
|
|
DC_SET_MODE( SetRelAbs, w.relAbsMode, ABSOLUTE, RELATIVE )
|
|
|
|
|
1999-10-31 03:07:05 +01:00
|
|
|
/***********************************************************************
|
|
|
|
* SetPolyFillMode (GDI.6) (GDI32.330)
|
|
|
|
*/
|
1999-04-25 11:24:23 +02:00
|
|
|
DC_SET_MODE( SetPolyFillMode, w.polyFillMode, ALTERNATE, WINDING )
|
|
|
|
|
1999-10-31 03:07:05 +01:00
|
|
|
/***********************************************************************
|
|
|
|
* SetStretchBltMode (GDI.7) (GDI32.334)
|
|
|
|
*/
|
1999-04-25 11:24:23 +02:00
|
|
|
DC_SET_MODE( SetStretchBltMode, w.stretchBltMode, BLACKONWHITE, HALFTONE )
|
|
|
|
|
1999-10-31 03:07:05 +01:00
|
|
|
/***********************************************************************
|
|
|
|
* GetBkColor16 (GDI.75)
|
|
|
|
*/
|
|
|
|
DC_GET_VAL_16( COLORREF, GetBkColor16, w.backgroundColor )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetBkColor (GDI32.145)
|
|
|
|
*/
|
|
|
|
DC_GET_VAL_32( COLORREF, GetBkColor, w.backgroundColor )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetBkMode16 (GDI.76)
|
|
|
|
*/
|
|
|
|
DC_GET_VAL_16( INT16, GetBkMode16, w.backgroundMode )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetBkMode (GDI32.146)
|
|
|
|
*/
|
|
|
|
DC_GET_VAL_32( INT, GetBkMode, w.backgroundMode )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetCurrentPosition16 (GDI.78)
|
|
|
|
*/
|
|
|
|
DC_GET_X_Y( DWORD, GetCurrentPosition16, w.CursPosX, w.CursPosY )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetMapMode16 (GDI.81)
|
|
|
|
*/
|
|
|
|
DC_GET_VAL_16( INT16, GetMapMode16, w.MapMode )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetMapMode (GDI32.196)
|
|
|
|
*/
|
|
|
|
DC_GET_VAL_32( INT, GetMapMode, w.MapMode )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetPolyFillMode16 (GDI.84)
|
|
|
|
*/
|
|
|
|
DC_GET_VAL_16( INT16, GetPolyFillMode16, w.polyFillMode )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetPolyFillMode (GDI32.213)
|
|
|
|
*/
|
|
|
|
DC_GET_VAL_32( INT, GetPolyFillMode, w.polyFillMode )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetROP216 (GDI.85)
|
|
|
|
*/
|
|
|
|
DC_GET_VAL_16( INT16, GetROP216, w.ROPmode )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetROP2 (GDI32.214)
|
|
|
|
*/
|
|
|
|
DC_GET_VAL_32( INT, GetROP2, w.ROPmode )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetRelAbs16 (GDI.86)
|
|
|
|
*/
|
|
|
|
DC_GET_VAL_16( INT16, GetRelAbs16, w.relAbsMode )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetStretchBltMode16 (GDI.88)
|
|
|
|
*/
|
|
|
|
DC_GET_VAL_16( INT16, GetStretchBltMode16, w.stretchBltMode )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetStretchBltMode (GDI32.221)
|
|
|
|
*/
|
|
|
|
DC_GET_VAL_32( INT, GetStretchBltMode, w.stretchBltMode )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetTextColor16 (GDI.90)
|
|
|
|
*/
|
|
|
|
DC_GET_VAL_16( COLORREF, GetTextColor16, w.textColor )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetTextColor (GDI32.227)
|
|
|
|
*/
|
|
|
|
DC_GET_VAL_32( COLORREF, GetTextColor, w.textColor )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetViewportExt16 (GDI.94)
|
|
|
|
*/
|
|
|
|
DC_GET_X_Y( DWORD, GetViewportExt16, vportExtX, vportExtY )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetViewportOrg16 (GDI.95)
|
|
|
|
*/
|
|
|
|
DC_GET_X_Y( DWORD, GetViewportOrg16, vportOrgX, vportOrgY )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetWindowExt16 (GDI.96)
|
|
|
|
*/
|
|
|
|
DC_GET_X_Y( DWORD, GetWindowExt16, wndExtX, wndExtY )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetWindowOrg16 (GDI.97)
|
|
|
|
*/
|
|
|
|
DC_GET_X_Y( DWORD, GetWindowOrg16, wndOrgX, wndOrgY )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* InquireVisRgn16 (GDI.131)
|
|
|
|
*/
|
|
|
|
DC_GET_VAL_16( HRGN16, InquireVisRgn16, w.hVisRgn )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetClipRgn16 (GDI.173)
|
|
|
|
*/
|
|
|
|
DC_GET_VAL_16( HRGN16, GetClipRgn16, w.hClipRgn )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetBrushOrg16 (GDI.149)
|
|
|
|
*/
|
|
|
|
DC_GET_X_Y( DWORD, GetBrushOrg16, w.brushOrgX, w.brushOrgY )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetTextAlign16 (GDI.345)
|
|
|
|
*/
|
|
|
|
DC_GET_VAL_16( UINT16, GetTextAlign16, w.textAlign )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetTextAlign (GDI32.224)
|
|
|
|
*/
|
|
|
|
DC_GET_VAL_32( UINT, GetTextAlign, w.textAlign )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetCurLogFont16 (GDI.411)
|
|
|
|
*/
|
|
|
|
DC_GET_VAL_16( HFONT16, GetCurLogFont16, w.hFont )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetBrushOrgEx (GDI.469) (GDI32.148)
|
|
|
|
*/
|
|
|
|
DC_GET_VAL_EX( GetBrushOrgEx, w.brushOrgX, w.brushOrgY, POINT ) /* */
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetCurrentPositionEx (GDI.470) (GDI32.167)
|
|
|
|
*/
|
|
|
|
DC_GET_VAL_EX( GetCurrentPositionEx, w.CursPosX, w.CursPosY, POINT )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetViewportExtEx (GDI.472 GDI32.239)
|
|
|
|
*/
|
|
|
|
DC_GET_VAL_EX( GetViewportExtEx, vportExtX, vportExtY, SIZE )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetViewportOrgEx (GDI.473) (GDI32.240)
|
|
|
|
*/
|
|
|
|
DC_GET_VAL_EX( GetViewportOrgEx, vportOrgX, vportOrgY, POINT )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetWindowExtEx (GDI.474) (GDI32.242)
|
|
|
|
*/
|
|
|
|
DC_GET_VAL_EX( GetWindowExtEx, wndExtX, wndExtY, SIZE )
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetWindowOrgEx (GDI.475) (GDI32.243)
|
|
|
|
*/
|
|
|
|
DC_GET_VAL_EX( GetWindowOrgEx, wndOrgX, wndOrgY, POINT )
|