2698 lines
85 KiB
C
2698 lines
85 KiB
C
/***************************************************************************/
|
|
/* */
|
|
/* USER.H - */
|
|
/* */
|
|
/* User's main include file. */
|
|
/* */
|
|
/***************************************************************************/
|
|
|
|
#ifdef WOW
|
|
#define NO_LOCALOBJ_TAGS
|
|
#endif
|
|
|
|
// If #defined, only 16 bits of the window extended style will be stored
|
|
// in the window instance.
|
|
//
|
|
//#define WORDEXSTYLE
|
|
|
|
|
|
// This magic definition ensures that HWND is declared as a near
|
|
// pointer to our internal window data structure. See
|
|
// the DECLARE_HANDLE macro in windows.h.
|
|
//
|
|
#define tagWND HWND__
|
|
|
|
// substitute API names with the "I" internal names
|
|
//
|
|
#ifndef DEBUG
|
|
#include "iuser.h"
|
|
#endif
|
|
|
|
#ifdef DEBUG
|
|
#ifndef NO_REDEF_SENDMESSAGE
|
|
#define SendMessage RevalSendMessage
|
|
#endif
|
|
#endif
|
|
|
|
//***** Include standard headers...
|
|
|
|
#define NOSOUND
|
|
#define NOFONT
|
|
#define NOKANJI
|
|
#define LSTRING
|
|
#define LFILEIO
|
|
#define WIN31
|
|
|
|
#define STRICT
|
|
|
|
#include <windows.h>
|
|
|
|
/* Structure types that occupy the USER Data Segment */
|
|
#define ST_CLASS 1
|
|
#define ST_WND 2
|
|
#define ST_STRING 3
|
|
#define ST_MENU 4
|
|
#define ST_CLIP 5
|
|
#define ST_CBOX 6
|
|
#define ST_PALETTE 7
|
|
#define ST_ED 8
|
|
#define ST_BWL 9
|
|
#define ST_OWNERDRAWMENU 10
|
|
#define ST_SPB 11
|
|
#define ST_CHECKPOINT 12
|
|
#define ST_DCE 13
|
|
#define ST_MWP 14
|
|
#define ST_PROP 15
|
|
#define ST_LBIV 16
|
|
#define ST_MISC 17
|
|
#define ST_ATOMS 18
|
|
#define ST_LOCKINPUTSTATE 19
|
|
#define ST_HOOKNODE 20
|
|
#define ST_USERSEEUSERDOALLOC 21
|
|
#define ST_HOTKEYLIST 22
|
|
#define ST_POPUPMENU 23
|
|
#define ST_HANDLETABLE 32 /* Defined by Kernel; We have no control */
|
|
#define ST_FREE 0xFF
|
|
|
|
#define CODESEG _based(_segname("_CODE"))
|
|
#define INTDSSEG _based(_segname("_INTDS"))
|
|
|
|
// Returns TRUE if currently executing app is 3.10 compatible
|
|
//
|
|
#define Is310Compat(hInstance) (LOWORD(GetExpWinVer(hInstance)) >= 0x30a)
|
|
#define Is300Compat(hInstance) (LOWORD(GetExpWinVer(hInstance)) >= 0x300)
|
|
|
|
#define VER 0x0300
|
|
#define VER31 0x0310
|
|
#define VER30 0x0300
|
|
#define VER20 0x0201
|
|
|
|
#define CR_CHAR 13
|
|
#define ESC_CHAR 27
|
|
#define SPACE_CHAR 32
|
|
|
|
typedef HANDLE HQ;
|
|
|
|
struct tagDCE;
|
|
|
|
/* Window class structure */
|
|
typedef struct tagCLS
|
|
{
|
|
/* NOTE: The order of the following fields is assumed. */
|
|
struct tagCLS* pclsNext;
|
|
WORD clsMagic;
|
|
ATOM atomClassName;
|
|
struct tagDCE* pdce; /* DCE * to DC associated with class */
|
|
int cWndReferenceCount; /* The number of windows registered
|
|
with this class */
|
|
WORD style;
|
|
WNDPROC lpfnWndProc;
|
|
int cbclsExtra;
|
|
int cbwndExtra;
|
|
HMODULE hModule;
|
|
HICON hIcon;
|
|
HCURSOR hCursor;
|
|
HBRUSH hbrBackground;
|
|
LPSTR lpszMenuName;
|
|
LPSTR lpszClassName;
|
|
} CLS;
|
|
typedef CLS *PCLS;
|
|
typedef CLS far *LPCLS;
|
|
typedef PCLS *PPCLS;
|
|
|
|
#define CLS_MAGIC ('N' | ('K' << 8))
|
|
|
|
struct tagPROPTABLE;
|
|
|
|
/* Window instance structure */
|
|
typedef struct tagWND
|
|
{
|
|
struct tagWND* hwndNext; /* 0x0000 Handle to the next window */
|
|
struct tagWND* hwndChild; /* 0x0002 Handle to child */
|
|
struct tagWND* hwndParent; /* 0x0004 Backpointer to the parent window. */
|
|
struct tagWND* hwndOwner; /* 0x0006 Popup window owner field */
|
|
RECT rcWindow; /* 0x0008 Window outer rectangle */
|
|
RECT rcClient; /* 0x0010 Client rectangle */
|
|
HQ hq; /* 0x0018 Queue handle */
|
|
HRGN hrgnUpdate; /* 0x001a Accumulated paint region */
|
|
struct tagCLS* pcls; /* 0x001c Pointer to window class */
|
|
HINSTANCE hInstance; /* 0x001e Handle to module instance data. */
|
|
WNDPROC lpfnWndProc; /* 0x0020 Far pointer to window proc. */
|
|
DWORD state; /* 0x0024 Internal state flags */
|
|
DWORD style; /* 0x0028 Style flags */
|
|
#ifdef WORDEXSTYLE
|
|
WORD dwExStyle; /* 0x002c Extended Style (ONLY LOW 16 BITS STORED) */
|
|
#else
|
|
DWORD dwExStyle; /* 0x002c Extended Style */
|
|
#endif
|
|
HMENU hMenu; /* 0x0030 Menu handle or ID */
|
|
HLOCAL hName; /* 0x0032 Alt DS handle of the window text */
|
|
int* rgwScroll; /* 0x0034 Words used for scroll bar state */
|
|
struct tagPROPTABLE* pproptab; /* 0x0036 Handle to the start of the property list */
|
|
struct tagWND* hwndLastActive; /* 0x0038 Last active in owner/ownee list */
|
|
HMENU hSysMenu; /* 0x003a Handle to system menu */
|
|
} WND;
|
|
|
|
#undef API
|
|
#define API _loadds _far _pascal
|
|
|
|
#undef CALLBACK
|
|
#define CALLBACK _loadds _far _pascal
|
|
|
|
#ifndef MSDWP
|
|
|
|
#include <winexp.h>
|
|
#include "strtable.h"
|
|
#include "wmsyserr.h"
|
|
|
|
#endif /* MSDWP */
|
|
|
|
/*** AWESOME HACK ALERT!
|
|
*
|
|
* Window Style and State Masks -
|
|
*
|
|
* High byte of word is byte index from the start of the state field
|
|
* in the WND structure, low byte is the mask to use on the byte.
|
|
* These masks assume the order of the state and style fields of a
|
|
* window instance structure.
|
|
*/
|
|
|
|
// hwnd->state flags (offset 0, 1, 2, 3)
|
|
#define WFMPRESENT 0x0001
|
|
#define WFVPRESENT 0x0002
|
|
#define WFHPRESENT 0x0004
|
|
#define WFCPRESENT 0x0008
|
|
#define WFSENDSIZEMOVE 0x0010
|
|
#define WFNOPAINT 0x0020
|
|
#define WFFRAMEON 0x0040
|
|
#define WFHASSPB 0x0080
|
|
#define WFNONCPAINT 0x0101
|
|
#define WFSENDERASEBKGND 0x0102
|
|
#define WFERASEBKGND 0x0104
|
|
#define WFSENDNCPAINT 0x0108
|
|
#define WFINTERNALPAINT 0x0110 // Internal paint required flag
|
|
#define WFUPDATEDIRTY 0x0120
|
|
#define WFHIDDENPOPUP 0x0140
|
|
#define WFMENUDRAW 0x0180
|
|
|
|
#define WFHASPALETTE 0x0201
|
|
#define WFPAINTNOTPROCESSED 0x0202 // WM_PAINT message not processed
|
|
#define WFWIN31COMPAT 0x0204 // Win 3.1 compatible window
|
|
#define WFALWAYSSENDNCPAINT 0x0208 // Always send WM_NCPAINT to children
|
|
#define WFPIXIEHACK 0x0210 // Send (HRGN)1 to WM_NCPAINT (see PixieHack)
|
|
#define WFTOGGLETOPMOST 0x0220 // Toggle the WS_EX_TOPMOST bit ChangeStates
|
|
|
|
// hwnd->style style bits (offsets 4, 5, 6, 7)
|
|
#define WFTYPEMASK 0x07C0
|
|
#define WFTILED 0x0700
|
|
#define WFICONICPOPUP 0x07C0
|
|
#define WFPOPUP 0x0780
|
|
#define WFCHILD 0x0740
|
|
#define WFMINIMIZED 0x0720
|
|
#define WFVISIBLE 0x0710
|
|
#define WFDISABLED 0x0708
|
|
#define WFDISABLE WFDISABLED
|
|
#define WFCLIPSIBLINGS 0x0704
|
|
#define WFCLIPCHILDREN 0x0702
|
|
#define WFMAXIMIZED 0x0701
|
|
#define WFICONIC WFMINIMIZED
|
|
|
|
#define WFMINBOX 0x0602
|
|
#define WFMAXBOX 0x0601
|
|
|
|
#define WFBORDERMASK 0x06C0
|
|
#define WFBORDER 0x0680
|
|
#define WFCAPTION 0x06C0
|
|
#define WFDLGFRAME 0x0640
|
|
#define WFTOPLEVEL 0x0640
|
|
|
|
#define WFVSCROLL 0x0620
|
|
#define WFHSCROLL 0x0610
|
|
#define WFSYSMENU 0x0608
|
|
#define WFSIZEBOX 0x0604
|
|
#define WFGROUP 0x0602
|
|
#define WFTABSTOP 0x0601
|
|
|
|
// If this dlg bit is set, WM_ENTERIDLE message will not be sent
|
|
#define WFNOIDLEMSG 0x0501
|
|
|
|
// hwnd->dwExStyle extended style bits (offsets 8, 9)
|
|
#define WEFDLGMODALFRAME 0x0801
|
|
#define WEFDRAGOBJECT 0x0802
|
|
#define WEFNOPARENTNOTIFY 0x0804
|
|
#define WEFTOPMOST 0x0808
|
|
#define WEFACCEPTFILES 0x0810
|
|
#define WEFTRANSPARENT 0x0820 // "Transparent" child window
|
|
|
|
// Class styles
|
|
#define CFVREDRAW 0x0001
|
|
#define CFHREDRAW 0x0002
|
|
#define CFKANJIWINDOW 0x0004
|
|
#define CFDBLCLKS 0x0008
|
|
#define CFOEMCHARS 0x0010
|
|
#define CFOWNDC 0x0020
|
|
#define CFCLASSDC 0x0040
|
|
#define CFPARENTDC 0x0080
|
|
#define CFNOKEYCVT 0x0101
|
|
#define CFNOCLOSE 0x0102
|
|
#define CFLVB 0x0104
|
|
#define CFCLSDC CFCLASSDC
|
|
#define CFSAVEBITS 0x0108
|
|
#define CFSAVEPOPUPBITS CFSAVEBITS
|
|
#define CFBYTEALIGNCLIENT 0x0110
|
|
#define CFBYTEALIGNWINDOW 0x0120
|
|
|
|
|
|
/*** AWESOME HACK ALERT!!!
|
|
*
|
|
* The low byte of the WF?PRESENT state flags must NOT be the
|
|
* same as the low byte of the WFBORDER and WFCAPTION flags,
|
|
* since these are used as paint hint masks. The masks are calculated
|
|
* with the MaskWF macro below.
|
|
*
|
|
* The magnitute of this hack compares favorably with that of the national debt.
|
|
*/
|
|
#define TestWF(hwnd, flag) ((BYTE)*((BYTE *)(&(hwnd)->state) + HIBYTE(flag)) & (BYTE)LOBYTE(flag))
|
|
#define SetWF(hwnd, flag) ((BYTE)*((BYTE *)(&(hwnd)->state) + HIBYTE(flag)) |= (BYTE)LOBYTE(flag))
|
|
#define ClrWF(hwnd, flag) ((BYTE)*((BYTE *)(&(hwnd)->state) + HIBYTE(flag)) &= ~(BYTE)LOBYTE(flag))
|
|
#define MaskWF(flag) ((WORD)( (HIBYTE(flag) & 1) ? LOBYTE(flag) << 8 : LOBYTE(flag)) )
|
|
|
|
#define TestCF(hwnd, flag) (*((BYTE *)(&(hwnd)->pcls->style) + HIBYTE(flag)) & LOBYTE(flag))
|
|
#define SetCF(hwnd, flag) (*((BYTE *)(&(hwnd)->pcls->style) + HIBYTE(flag)) |= LOBYTE(flag))
|
|
#define ClrCF(hwnd, flag) (*((BYTE *)(&(hwnd)->pcls->style) + HIBYTE(flag)) &= ~LOBYTE(flag))
|
|
#define TestCF2(pcls, flag) (*((BYTE *)(&pcls->style) + HIBYTE(flag)) & LOBYTE(flag))
|
|
#define SetCF2(pcls, flag) (*((BYTE *)(&pcls->style) + HIBYTE(flag)) |= LOBYTE(flag))
|
|
#define ClrCF2(pcls, flag) (*((BYTE *)(&pcls->style) + HIBYTE(flag)) &= ~LOBYTE(flag))
|
|
|
|
#define TestwndChild(hwnd) (TestWF(hwnd, WFTYPEMASK) == (BYTE)LOBYTE(WFCHILD))
|
|
#define TestwndTiled(hwnd) (TestWF(hwnd, WFTYPEMASK) == (BYTE)LOBYTE(WFTILED))
|
|
#define TestwndIPopup(hwnd) (TestWF(hwnd, WFTYPEMASK) == (BYTE)LOBYTE(WFICONICPOPUP))
|
|
#define TestwndNIPopup(hwnd) (TestWF(hwnd, WFTYPEMASK) == (BYTE)LOBYTE(WFPOPUP))
|
|
#define TestwndPopup(hwnd) (TestwndNIPopup(hwnd) || TestwndIPopup(hwnd))
|
|
#define TestwndHI(hwnd) (TestwndTiled(hwnd) || TestwndIPopup(hwnd))
|
|
|
|
/* Special macro to test if WM_PAINT is needed */
|
|
|
|
#define NEEDSPAINT(hwnd) (hwnd->hrgnUpdate != NULL || TestWF(hwnd, WFINTERNALPAINT))
|
|
|
|
/* Areas to be painted during activation and inactivation */
|
|
#define NC_DRAWNONE 0x00
|
|
#define NC_DRAWCAPTION 0x01
|
|
#define NC_DRAWFRAME 0x02
|
|
#define NC_DRAWBOTH (NC_DRAWCAPTION | NC_DRAWFRAME)
|
|
|
|
void FAR DrawCaption(HWND hwnd, HDC hdc, WORD flags, BOOL fActive);
|
|
|
|
/* ActivateWindow() commands */
|
|
#define AW_USE 1
|
|
#define AW_TRY 2
|
|
#define AW_SKIP 3
|
|
#define AW_TRY2 4
|
|
#define AW_SKIP2 5 /* used internally in ActivateWindow() */
|
|
#define AW_USE2 6 /* nc mouse activation added by craigc */
|
|
|
|
/* These numbers serve as indices into the atomSysClass[] array
|
|
* so that we can get the atoms for the various classes.
|
|
* The order of the control classes is assumed to be
|
|
* the same as the class XXXCODE constants defined in dlgmgr.h.
|
|
*/
|
|
#define ICLS_BUTTON 0
|
|
#define ICLS_EDIT 1
|
|
#define ICLS_STATIC 2
|
|
#define ICLS_LISTBOX 3
|
|
#define ICLS_SCROLLBAR 4
|
|
#define ICLS_COMBOBOX 5 // End of special dlgmgr indices
|
|
|
|
#define ICLS_CTL_MAX 6 // Number of public control classes
|
|
|
|
#define ICLS_DESKTOP 6
|
|
#define ICLS_DIALOG 7
|
|
#define ICLS_MENU 8
|
|
#define ICLS_SWITCH 9
|
|
#define ICLS_ICONTITLE 10
|
|
#define ICLS_MDICLIENT 11
|
|
#define ICLS_COMBOLISTBOX 12
|
|
|
|
#define ICLS_MAX 13 // Number of system classes
|
|
|
|
// The following are the atom values for the atom-named public classes
|
|
// NOTE: DIALOGCLASS at least should be in windows.h
|
|
//
|
|
#define MENUCLASS 0x8000 /* Public Knowledge */
|
|
#define DESKTOPCLASS 0x8001
|
|
#define DIALOGCLASS 0x8002
|
|
#define SWITCHWNDCLASS 0x8003
|
|
#define ICONTITLECLASS 0x8004
|
|
|
|
/* Z Ordering() return values */
|
|
#define ZO_ERROR (-1)
|
|
#define ZO_EQUAL 0
|
|
#define ZO_DISJOINT 1
|
|
#define ZO_ABOVE 2
|
|
#define ZO_BELOW 3
|
|
|
|
#ifdef DEBUG
|
|
#ifndef NO_LOCALOBJ_TAGS
|
|
HANDLE FAR UserLocalAlloc(WORD, WORD, WORD);
|
|
HANDLE FAR UserLocalFree(HANDLE);
|
|
char* FAR UserLocalLock(HANDLE);
|
|
BOOL FAR UserLocalUnlock(HANDLE);
|
|
HANDLE FAR UserLocalReAlloc(HANDLE, WORD, WORD);
|
|
WORD FAR UserLocalSize(HANDLE);
|
|
|
|
#define LocalAlloc(A,B) UserLocalAlloc(ST_MISC,A,B)
|
|
#define LocalFree UserLocalFree
|
|
#define LocalLock UserLocalLock
|
|
#define LocalUnlock UserLocalUnlock
|
|
#define LocalReAlloc UserLocalReAlloc
|
|
#define LocalSize UserLocalSize
|
|
#endif
|
|
#endif
|
|
|
|
#ifndef DEBUG
|
|
#define UserLocalAlloc(TagType,MemType,Size) LocalAlloc(MemType,Size)
|
|
#else
|
|
#ifdef NO_LOCALOBJ_TAGS
|
|
#define UserLocalAlloc(TagType,MemType,Size) LocalAlloc(MemType,Size)
|
|
#endif
|
|
#endif
|
|
|
|
#define XCOORD(l) ((int)LOWORD(l))
|
|
#define YCOORD(l) ((int)HIWORD(l))
|
|
#define abs(A) ((A < 0)? -A : A)
|
|
|
|
/* CheckPoint structure */
|
|
typedef struct tagCHECKPOINT
|
|
{
|
|
RECT rcNormal;
|
|
POINT ptMin;
|
|
POINT ptMax;
|
|
HWND hwndTitle;
|
|
WORD fDragged:1;
|
|
WORD fWasMaximizedBeforeMinimized:1;
|
|
WORD fWasMinimizedBeforeMaximized:1;
|
|
WORD fParkAtTop:1;
|
|
} CHECKPOINT;
|
|
|
|
// Internal property name definitions
|
|
|
|
#define CHECKPOINT_PROP_NAME "SysCP"
|
|
extern ATOM atomCheckpointProp;
|
|
#define WINDOWLIST_PROP_NAME "SysBW"
|
|
extern ATOM atomBwlProp;
|
|
|
|
#define InternalSetProp(hwnd, key, value, fInternal) SetProp(hwnd, key, value)
|
|
#define InternalGetProp(hwnd, key, fInternal) GetProp(hwnd, key)
|
|
#define InternalRemoveProp(hwnd, key, fInternal) RemoveProp(hwnd, key)
|
|
#define InternalEnumProps(hwnd, pfn, fInternal) EnumProps(hwnd, pfn)
|
|
|
|
/* Window List Structure */
|
|
typedef struct tagBWL
|
|
{
|
|
struct tagBWL *pbwlNext;
|
|
HWND *phwndMax;
|
|
HWND rghwnd[1];
|
|
} BWL;
|
|
typedef BWL *PBWL;
|
|
|
|
#define CHWND_BWLCREATE 32 // Initial BWL size
|
|
#define CHWND_BWLGROW 16 // Amt to grow BWL by when it needs to grow.
|
|
|
|
// BuildHwndList() commands
|
|
#define BWL_ENUMCHILDREN 1
|
|
#define BWL_ENUMLIST 2
|
|
|
|
|
|
/* DOS Semaphore Structure */
|
|
typedef struct tagSEMAPHORE
|
|
{
|
|
DWORD semaphore;
|
|
HQ hqOwner;
|
|
BYTE cBusy;
|
|
BYTE bOrder;
|
|
} SEMAPHORE;
|
|
typedef SEMAPHORE FAR *LPSEM;
|
|
|
|
#define CheckHwnd(hwnd) TRUE
|
|
#define CheckHwndNull(hwnd) TRUE
|
|
#define ValidateWindow(hwnd) TRUE
|
|
#define ValidateWindowNull(hwnd) TRUE
|
|
|
|
#define AllocP(wType,cb) UserLocalAlloc(wType,LPTR, cb)
|
|
#define FreeP(h) LocalFree(h)
|
|
|
|
#ifndef DEBUG
|
|
#define LMHtoP(handle) (*((char**)(handle)))
|
|
#else
|
|
#ifdef NO_LOCALOBJ_TAGS
|
|
#define LMHtoP(handle) (*((char**)(handle)))
|
|
#else
|
|
#define LMHtoP(handle) (*((char**)(handle))+sizeof(long))
|
|
#endif
|
|
#endif
|
|
|
|
/* Evil nasty macros to work with movable local objects */
|
|
#define LLock(handle) ((*(((BYTE *)(handle))+3))++)
|
|
#define LUnlock(handle) ((*(((BYTE *)(handle))+3))--)
|
|
|
|
|
|
#define dpHorzRes HORZRES
|
|
#define dpVertRes VERTRES
|
|
|
|
|
|
HWND WindowHitTest(HWND hwnd, POINT pt, int FAR* ppart);
|
|
|
|
/*
|
|
* If the handle for CF_TEXT/CF_OEMTEXT is a dummy handle then this implies
|
|
* that data is available in the other format (as CF_OEMTEXT/CF_TEXT)
|
|
*/
|
|
#define DUMMY_TEXT_HANDLE ((HANDLE)0xFFFF)
|
|
#define DATA_NOT_BANKED ((HANDLE)0xFFFF)
|
|
|
|
typedef struct tagCLIP
|
|
{
|
|
WORD fmt;
|
|
HANDLE hData;
|
|
} CLIP;
|
|
typedef CLIP *PCLIP;
|
|
|
|
extern CLIP* pClipboard;
|
|
|
|
typedef struct tagSYSMSG
|
|
{
|
|
WORD message;
|
|
WORD paramL;
|
|
WORD paramH;
|
|
DWORD time;
|
|
} SYSMSG;
|
|
|
|
typedef struct tagINTERNALSYSMSG
|
|
{
|
|
DWORD ismExtraInfo; /* Additional Info */
|
|
SYSMSG ismOldMsg; /* External System Msg structure */
|
|
} INTERNALSYSMSG;
|
|
|
|
typedef struct tagINTERNALMSG
|
|
{
|
|
DWORD imExtraInfo; /* Additional Info */
|
|
MSG imOldMsg; /* External App Msg structure */
|
|
} INTERNALMSG;
|
|
|
|
|
|
typedef struct tagTIMERINFO
|
|
{
|
|
LONG resolution;
|
|
} TIMERINFO;
|
|
|
|
|
|
typedef struct tagKBINFO
|
|
{
|
|
BYTE Begin_First_range; /* Values used for Far East systems */
|
|
BYTE End_First_range;
|
|
BYTE Begin_Second_range;
|
|
BYTE End_Second_range;
|
|
int stateSize; /* size of ToAscii()'s state block */
|
|
} KBINFO;
|
|
|
|
|
|
typedef struct tagMOUSEINFO
|
|
{
|
|
char fExist;
|
|
char fRelative;
|
|
int cButton;
|
|
int cmsRate;
|
|
int xThreshold;
|
|
int yThreshold;
|
|
int cxResolution; /* resolution needed for absolute mouse coordinate */
|
|
int cyResolution;
|
|
int mouseCommPort; /* comm port # to reserve since mouse is using it */
|
|
} MOUSEINFO;
|
|
|
|
|
|
typedef struct tagCURSORINFO
|
|
{
|
|
int csXRate;
|
|
int csYRate;
|
|
} CURSORINFO;
|
|
|
|
|
|
typedef struct tagCURSORSHAPE
|
|
{
|
|
int xHotSpot;
|
|
int yHotSpot;
|
|
int cx;
|
|
int cy;
|
|
int cbWidth; /* Bytes per row, accounting for word alignment. */
|
|
BYTE Planes;
|
|
BYTE BitsPixel;
|
|
} CURSORSHAPE;
|
|
typedef CURSORSHAPE *PCURSORSHAPE;
|
|
typedef CURSORSHAPE FAR * LPCURSORSHAPE;
|
|
|
|
// Standard ICON dimensions;
|
|
#define STD_ICONWIDTH 32
|
|
#define STD_ICONHEIGHT 32
|
|
#define STD_CURSORWIDTH 32
|
|
#define STD_CURSORHEIGHT 32
|
|
|
|
typedef struct tagICONINFO
|
|
{
|
|
int iIconCurrent;
|
|
int fHeightChange;
|
|
int crw; /* current nunber of rows. */
|
|
int cIconInRow; /* maximum icons in a row. */
|
|
int cIcon;
|
|
int wEvent;
|
|
} ICONINFO;
|
|
|
|
|
|
/* Height and Width of the desktop pattern bitmap. */
|
|
#define CXYDESKPATTERN 16
|
|
|
|
/* System object colors. */
|
|
#define CSYSCOLORS 21
|
|
|
|
typedef struct tagSYSCLROBJECTS
|
|
{
|
|
HBRUSH hbrScrollbar;
|
|
HBRUSH hbrDesktop;
|
|
HBRUSH hbrActiveCaption;
|
|
HBRUSH hbrInactiveCaption;
|
|
HBRUSH hbrMenu;
|
|
HBRUSH hbrWindow;
|
|
HBRUSH hbrWindowFrame;
|
|
HBRUSH hbrMenuText;
|
|
HBRUSH hbrWindowText;
|
|
HBRUSH hbrCaptionText;
|
|
HBRUSH hbrActiveBorder;
|
|
HBRUSH hbrInactiveBorder;
|
|
HBRUSH hbrAppWorkspace;
|
|
HBRUSH hbrHiliteBk;
|
|
HBRUSH hbrHiliteText;
|
|
HBRUSH hbrBtnFace;
|
|
HBRUSH hbrBtnShadow;
|
|
HBRUSH hbrGrayText;
|
|
HBRUSH hbrBtnText;
|
|
HBRUSH hbrInactiveCaptionText;
|
|
HBRUSH hbrBtnHilite;
|
|
} SYSCLROBJECTS;
|
|
|
|
typedef struct tagSYSCOLORS
|
|
{
|
|
LONG clrScrollbar;
|
|
LONG clrDesktop;
|
|
LONG clrActiveCaption;
|
|
LONG clrInactiveCaption;
|
|
LONG clrMenu;
|
|
LONG clrWindow;
|
|
LONG clrWindowFrame;
|
|
LONG clrMenuText;
|
|
LONG clrWindowText;
|
|
LONG clrCaptionText;
|
|
LONG clrActiveBorder;
|
|
LONG clrInactiveBorder;
|
|
LONG clrAppWorkspace;
|
|
LONG clrHiliteBk;
|
|
LONG clrHiliteText;
|
|
LONG clrBtnFace;
|
|
LONG clrBtnShadow;
|
|
LONG clrGrayText;
|
|
LONG clrBtnText;
|
|
LONG clrInactiveCaptionText;
|
|
LONG clrBtnHilite;
|
|
} SYSCOLORS;
|
|
|
|
typedef struct tagCARET
|
|
{
|
|
HWND hwnd;
|
|
BOOL fVisible;
|
|
BOOL fOn;
|
|
int iHideLevel;
|
|
int x;
|
|
int y;
|
|
int cy;
|
|
int cx;
|
|
HBITMAP hBitmap;
|
|
WORD cmsBlink; /* Blink time in milliseconds. */
|
|
WORD hTimer;
|
|
} CARET;
|
|
|
|
/* Resource ID of system menus. */
|
|
#define ID_SYSMENU MAKEINTRESOURCE(1)
|
|
#define ID_CLOSEMENU MAKEINTRESOURCE(2)
|
|
|
|
/* Menu Item Structure */
|
|
typedef struct tagITEM
|
|
{
|
|
WORD fFlags; /* Item Flags. Must be first in this
|
|
* structure.
|
|
*/
|
|
HMENU cmdMenu; /* Handle to a popup */
|
|
int xItem;
|
|
int yItem;
|
|
int cxItem;
|
|
int cyItem;
|
|
int dxTab;
|
|
HBITMAP hbmpCheckMarkOn; /* Bitmap for an on check */
|
|
HBITMAP hbmpCheckMarkOff; /* Bitmap for an off check */
|
|
HBITMAP hItem; /* Handle to a bitmap or string */
|
|
int ulX; /* String: Underline start */
|
|
int ulWidth; /* String: underline width */
|
|
int cch; /* String: character count */
|
|
} ITEM;
|
|
typedef ITEM *PITEM;
|
|
typedef ITEM FAR *LPITEM;
|
|
|
|
#define SIG_MENU ('M' | ('U' << 8))
|
|
|
|
/* Menu Structure */
|
|
typedef struct tagMENU
|
|
{
|
|
struct tagMENU* pMenuNext;
|
|
WORD fFlags; /* Menu Flags.*/
|
|
WORD signature; // signature
|
|
HQ hqOwner; // owner queue
|
|
int cxMenu;
|
|
int cyMenu;
|
|
int cItems; /* Number of items in rgItems */
|
|
HWND hwndNotify; /* The owner hwnd of this menu */
|
|
ITEM* rgItems; /* The list of items in this menu */
|
|
#ifdef JAPAN
|
|
int MenuMode; /* Kanji menu mode flag */
|
|
#endif
|
|
} MENU;
|
|
typedef MENU *PMENU;
|
|
|
|
// Layout of first part of menu heap structure.
|
|
//
|
|
typedef struct
|
|
{
|
|
WORD rgwReserved[8]; // reserve 8 words for standard DS stuff.
|
|
MENU* pMenuList;
|
|
} MENUHEAPHEADER;
|
|
|
|
// Head of menu list (USE ONLY WITH DS == MENUHEAP)
|
|
#define PMENULIST (((MENUHEAPHEADER*)NULL)->pMenuList)
|
|
|
|
void FAR SetMenuDS(void);
|
|
void FAR SetMenuStringDS(void);
|
|
|
|
#define MENUSYSMENU SPACE_CHAR /* Space character */
|
|
#define MENUCHILDSYSMENU '-' /* Hyphen */
|
|
|
|
|
|
/* Defines for the fVirt field of the Accelerator table structure. */
|
|
#define FVIRTKEY TRUE /* Assumed to be == TRUE */
|
|
#define FLASTKEY 0x80 /* Indicates last key in the table */
|
|
#define FNOINVERT 0x02
|
|
#define FSHIFT 0x04
|
|
#define FCONTROL 0x08
|
|
#define FALT 0x10
|
|
|
|
/* Accelerator Table structure */
|
|
typedef struct tagACCEL
|
|
{
|
|
BYTE fVirt; /* Also called the flags field */
|
|
WORD key;
|
|
WORD cmd;
|
|
} ACCEL;
|
|
typedef ACCEL FAR *LPACCEL;
|
|
|
|
/* OEM Bitmap Information Structure */
|
|
typedef struct tagOEMBITMAPINFO
|
|
{
|
|
HBITMAP hBitmap;
|
|
int cx;
|
|
int cy;
|
|
} OEMBITMAPINFO;
|
|
|
|
/* OEM Information Structure */
|
|
typedef struct tagOEMINFO
|
|
{
|
|
OEMBITMAPINFO bmFull;
|
|
OEMBITMAPINFO bmUpArrow;
|
|
OEMBITMAPINFO bmDnArrow;
|
|
OEMBITMAPINFO bmRgArrow;
|
|
OEMBITMAPINFO bmLfArrow;
|
|
OEMBITMAPINFO bmReduce;
|
|
OEMBITMAPINFO bmZoom;
|
|
OEMBITMAPINFO bmRestore;
|
|
OEMBITMAPINFO bmMenuArrow;
|
|
OEMBITMAPINFO bmComboArrow;
|
|
OEMBITMAPINFO bmReduceD;
|
|
OEMBITMAPINFO bmZoomD;
|
|
OEMBITMAPINFO bmRestoreD;
|
|
OEMBITMAPINFO bmUpArrowD;
|
|
OEMBITMAPINFO bmDnArrowD;
|
|
OEMBITMAPINFO bmRgArrowD;
|
|
OEMBITMAPINFO bmLfArrowD;
|
|
OEMBITMAPINFO bmUpArrowI; // Up Arrow Inactive
|
|
OEMBITMAPINFO bmDnArrowI; // Down Arrow Inactive
|
|
OEMBITMAPINFO bmRgArrowI; // Right Arrow Inactive
|
|
OEMBITMAPINFO bmLfArrowI; // Left Arrow Inactive
|
|
int cxbmpHThumb;
|
|
int cybmpVThumb;
|
|
int cxMin;
|
|
int cyMin;
|
|
int cxIconSlot;
|
|
int cyIconSlot;
|
|
int cxIcon;
|
|
int cyIcon;
|
|
WORD cxPixelsPerInch; /* logical pixels per inch in X direction */
|
|
WORD cyPixelsPerInch; /* logical pixels per inch in Y direction */
|
|
int cxCursor;
|
|
int cyCursor;
|
|
WORD DispDrvExpWinVer; /* Display driver expected win version no */
|
|
WORD ScreenBitCount; /* (BitCount * No of planes) for display */
|
|
int cSKanji;
|
|
int fMouse;
|
|
} OEMINFO;
|
|
|
|
/* OEMINFO structure for the monochrome bitmaps */
|
|
typedef struct tagOEMINFOMONO
|
|
{
|
|
OEMBITMAPINFO bmAdjust;
|
|
OEMBITMAPINFO bmSize;
|
|
OEMBITMAPINFO bmCheck; /* Check mark */
|
|
OEMBITMAPINFO bmbtnbmp; /* Check boxes */
|
|
OEMBITMAPINFO bmCorner; /* Corner of buttons */
|
|
int cxbmpChk;
|
|
int cybmpChk;
|
|
} OEMINFOMONO;
|
|
|
|
typedef struct tagBMPDIMENSION
|
|
{
|
|
int cxBits; /* Width of the Bitmap */
|
|
int cyBits; /* Height of the huge bitmap */
|
|
} BMPDIMENSION;
|
|
|
|
/* Holds the offsets of all bitmaps in bmBits (of hdcBits). */
|
|
typedef struct tagRESINFO
|
|
{
|
|
/* The next 9 match resInfo */
|
|
int dxClose;
|
|
int dxUpArrow;
|
|
int dxDnArrow;
|
|
int dxRgArrow;
|
|
int dxLfArrow;
|
|
int dxReduce;
|
|
int dxZoom;
|
|
int dxRestore;
|
|
int dxMenuArrow;
|
|
int dxComboArrow;
|
|
int dxReduceD;
|
|
int dxZoomD;
|
|
int dxRestoreD;
|
|
int dxUpArrowD;
|
|
int dxDnArrowD;
|
|
int dxRgArrowD;
|
|
int dxLfArrowD;
|
|
int dxUpArrowI; // Up Arrow Inactive.
|
|
int dxDnArrowI; // Down Arrow Inactive.
|
|
int dxRgArrowI; // Right Arrow Inactive.
|
|
int dxLfArrowI; // Left Arrow Inactive.
|
|
HBITMAP hbmBits;
|
|
BMPDIMENSION bmpDimension;
|
|
} RESINFO;
|
|
|
|
typedef struct tagRESINFOMONO
|
|
{
|
|
int dxSize;
|
|
int dxBtSize;
|
|
int dxCheck;
|
|
int dxCheckBoxes;
|
|
int dxBtnCorners;
|
|
HBITMAP hbmBits;
|
|
BMPDIMENSION bmpDimensionMono;
|
|
} RESINFOMONO;
|
|
|
|
typedef struct tagTASK
|
|
{
|
|
HQ hq;
|
|
HWND hwnd;
|
|
int ID;
|
|
WORD count;
|
|
WORD freq;
|
|
WORD ready;
|
|
FARPROC lpfnTask;
|
|
} TASK;
|
|
|
|
//**** SetWindowsHook() related definitions
|
|
|
|
typedef struct tagHOOKNODE
|
|
{
|
|
struct tagHOOKNODE* phkNext;// Next in chain
|
|
HOOKPROC lpfn; // function ptr to call (NULL if deleted during call)
|
|
int idHook; // hook ID for this node
|
|
HQ hq; // hq for which this hook applies
|
|
HMODULE hmodOwner; // Module handle that contains this hook
|
|
BOOL fCalled; // Whether inside call or not
|
|
} HOOKNODE;
|
|
|
|
#define HHOOK_MAGIC ('H' | ('K' << 8))
|
|
|
|
extern HOOKNODE* rgphkSysHooks[];
|
|
extern HOOKNODE* phkDeleted;
|
|
extern BYTE rgbHookFlags[];
|
|
|
|
LRESULT FAR CallHook(int code, WPARAM wParam, LPARAM lParam, int idHook);
|
|
|
|
BOOL FAR IsHooked(WORD idHook);
|
|
BOOL CallKbdHook(int code, WPARAM wParam, LPARAM lParam);
|
|
BOOL CallMouseHook(int code, WPARAM wParam, LPARAM lParam);
|
|
|
|
void UnhookHooks(HANDLE h, BOOL fQueue);
|
|
|
|
HMODULE FAR PASCAL GetProcModule(FARPROC lpfn);
|
|
HQ HqFromTask(HTASK htask);
|
|
|
|
void UnhookHotKeyHooks(HMODULE hmodule);
|
|
|
|
#ifdef DISABLE
|
|
#define CallVisRgnHook(pparams) (int)CallHook(0, 0, (LONG)(VOID FAR*)pparams, WH_VISRGN) // ;Internal
|
|
#endif
|
|
|
|
// DC cache related declarations
|
|
|
|
// DC Cache Entry structure (DCE)
|
|
#define CACHESIZE 5
|
|
|
|
typedef struct tagDCE
|
|
{
|
|
struct tagDCE *pdceNext;
|
|
HDC hdc;
|
|
HWND hwnd;
|
|
HWND hwndOrg;
|
|
HWND hwndClip;
|
|
HRGN hrgnClip;
|
|
DWORD flags;
|
|
} DCE;
|
|
|
|
extern DCE *pdceFirst; // Pointer to first element of cache
|
|
|
|
extern HRGN hrgnGDC; // Temp used by GetCacheDC et al
|
|
extern HRGN hrgnEWL; // Temp used by ExcludeWindowList()
|
|
extern HRGN hrgnDCH; // Temp used by DCHook()
|
|
extern BOOL fSiblingsTouched;
|
|
|
|
#define InternalReleaseDC(hdc) ReleaseCacheDC(hdc, FALSE)
|
|
|
|
/* InvalidateDCCache() flag values */
|
|
#define IDC_DEFAULT 0x0001
|
|
#define IDC_CHILDRENONLY 0x0002
|
|
#define IDC_CLIENTONLY 0x0004
|
|
|
|
#define IDC_VALID 0x0007 /* ;Internal */
|
|
|
|
BOOL FAR InvalidateDCCache(HWND hwnd, WORD flags);
|
|
|
|
int CalcWindowRgn(HWND hwnd, HRGN hrgn, BOOL fClient);
|
|
|
|
BOOL FAR CalcVisRgn(HRGN hrgn, HWND hwndOrg, HWND hwndClip, DWORD flags);
|
|
BOOL FAR ReleaseCacheDC(HDC hdc, BOOL fEndPaint);
|
|
HDC FAR GetCacheDC(HWND hwndOrg, HWND hwndClip, HRGN hrgnClip, HDC hdcMatch, DWORD flags);
|
|
HDC FAR CreateCacheDC(HWND hwndOrg, DWORD flags);
|
|
BOOL FAR DestroyCacheDC(HDC hdc);
|
|
HWND FAR WindowFromCacheDC(HDC hdc);
|
|
|
|
BOOL FAR IntersectWithParents(HWND hwnd, LPRECT lprc);
|
|
|
|
|
|
//**************************************************************************
|
|
//
|
|
// void SetVisible(hwnd, fSet)
|
|
//
|
|
// This routine must be used to set or clear the WS_VISIBLE style bit.
|
|
// It also handles the setting or clearing of the WF_TRUEVIS bit.
|
|
//
|
|
#define SetVisible(hwnd, fSet) \
|
|
if (fSet) \
|
|
{ \
|
|
SetWF((hwnd), WFVISIBLE); \
|
|
} \
|
|
else \
|
|
{ \
|
|
ClrWF((hwnd), WFVISIBLE); \
|
|
ClrFTrueVis(hwnd); \
|
|
}
|
|
|
|
void FAR ClrFTrueVis(HWND hwnd);
|
|
|
|
/* Saved Popup Bits structure */
|
|
typedef struct tagSPB
|
|
{
|
|
struct tagSPB *pspbNext;
|
|
HWND hwnd;
|
|
HBITMAP hbm;
|
|
RECT rc;
|
|
HRGN hrgn;
|
|
WORD flags;
|
|
} SPB;
|
|
|
|
#define SPB_SAVESCREENBITS 0x0001 // (*lpSaveScreenBits) was called
|
|
#define SPB_LOCKUPDATE 0x0002 // LockWindowUpdate() SPB
|
|
#ifdef DISABLE
|
|
#define SPB_DRAWBUFFER 0x0004 // BeginDrawBuffer() SPB
|
|
#endif
|
|
|
|
// SPB related functions
|
|
|
|
extern SPB* pspbFirst;
|
|
|
|
extern HRGN hrgnSCR; // Temp rgn used by SpbCheckRect() */
|
|
|
|
extern HRGN hrgnSPB1; // More temp regions
|
|
|
|
extern HRGN hrgnSPB2;
|
|
|
|
// This macro can be used to quickly avoid far calls to the SPB code.
|
|
// In some cases it can prevent pulling in the segment that contains
|
|
// all the code.
|
|
//
|
|
#define AnySpbs() (pspbFirst != NULL) // TRUE if there are any SPBs
|
|
|
|
BOOL SpbValidate(SPB* pspb, HWND hwnd, BOOL fChildren);
|
|
void SpbCheckDce(DCE* pdce);
|
|
BOOL FBitsTouch(HWND hwndInval, LPRECT lprcDirty, SPB* pspb, DWORD flagsDcx);
|
|
void FAR DeleteHrgnClip(DCE* pdce);
|
|
|
|
void FAR CreateSpb(HWND hwnd, WORD flags, HDC hdcScreen);
|
|
void FAR FreeSpb(SPB* pspb);
|
|
SPB* FAR FindSpb(HWND hwnd);
|
|
void FAR SpbCheckRect(HWND hwnd, LPRECT lprc, DWORD flagsDcx);
|
|
void FAR SpbCheckHwnd(HWND hwnd);
|
|
BOOL FAR RestoreSpb(HWND hwnd, HRGN hrgnUncovered, HDC FAR* phdcScreen);
|
|
void FAR SpbCheck(void);
|
|
BOOL FAR SpbCheckRect2(SPB* pspb, HWND hwnd, LPRECT lprc, DWORD flagsDcx);
|
|
|
|
// LockWindowUpdate related stuff
|
|
|
|
extern HWND hwndLockUpdate;
|
|
extern HQ hqLockUpdate;
|
|
|
|
void FAR InternalInvalidate(register HWND hwnd, HRGN hrgnUpdate, WORD flags);
|
|
BOOL InternalInvalidate2(HWND hwnd, HRGN hrgn, HRGN hrgnSubtract, LPRECT prcParents, WORD flags);
|
|
void _fastcall DeleteUpdateRgn(HWND hwnd);
|
|
|
|
// SmartRectInRegion return codes
|
|
//
|
|
#define RIR_OUTSIDE 0
|
|
#define RIR_INTERSECT 1
|
|
#define RIR_INSIDE 2
|
|
|
|
WORD FAR SmartRectInRegion(HRGN hrgn, LPRECT lprc);
|
|
|
|
// Function used to redraw the screen
|
|
|
|
#define RedrawScreen() \
|
|
InternalInvalidate(hwndDesktop, (HRGN)1, \
|
|
RDW_INVALIDATE | RDW_ERASE | RDW_FRAME | RDW_ALLCHILDREN)
|
|
|
|
extern HRGN hrgnInv1; // Temp used by RedrawWindow()
|
|
extern HRGN hrgnInv2; // Temp used by InternalInvalidate()
|
|
|
|
HDC CALLBACK InternalBeginPaint(HWND hwnd, PAINTSTRUCT FAR *lpps, BOOL fWindowDC);
|
|
|
|
// Background and frame drawing related stuff
|
|
|
|
// WM_SYNCPAINT wParam and DoSyncPaint flags
|
|
|
|
void FAR DoSyncPaint(HWND hwnd, HRGN hrgn, WORD flags);
|
|
|
|
// NOTE: the first 4 values must be as defined for backward compatibility
|
|
// reasons. They are sent as parameters to the WM_SYNCPAINT message.
|
|
// They used to be hard-coded constants.
|
|
//
|
|
// Only ENUMCLIPPEDCHILDREN, ALLCHILDREN, and NOCHECKPARENTS are passed on
|
|
// during recursion. The other bits reflect the current window only.
|
|
//
|
|
#define DSP_ERASE 0x0001 // Send WM_ERASEBKGND
|
|
#define DSP_FRAME 0x0002 // Send WM_NCPAINT
|
|
#define DSP_ENUMCLIPPEDCHILDREN 0x0004 // Enum children if WS_CLIPCHILDREN
|
|
#define DSP_WM_SYNCPAINT 0x0008 // Called from WM_SYNCPAINT handler
|
|
#define DSP_NOCHECKPARENTS 0x0010 // Don't check parents for update region
|
|
#define DSP_ALLCHILDREN 0x0020 // Enumerate all children.
|
|
|
|
BOOL FAR SendEraseBkgnd(HWND hwnd, HDC hdcBeginPaint, HRGN hrgnUpdate);
|
|
void SendNCPaint(HWND hwnd, HRGN hrgnUpdate);
|
|
HWND _fastcall ParentNeedsPaint(HWND hwnd);
|
|
|
|
// UpdateWindow definitions
|
|
|
|
#define UW_ENUMCHILDREN 0x0001
|
|
#define UW_VALIDATEPARENTS 0x0002
|
|
|
|
void InternalUpdateWindow(HWND hwnd, WORD flags);
|
|
void UpdateWindow2(register HWND hwnd, WORD flags);
|
|
void ValidateParents(register HWND hwnd);
|
|
|
|
// Used for UpdateWindow() calls that really shouldn't be there...
|
|
#define UpdateWindow31(hwnd)
|
|
|
|
// ScrollWindow() definitions
|
|
|
|
extern HRGN hrgnSW;
|
|
extern HRGN hrgnScrl1;
|
|
extern HRGN hrgnScrl2;
|
|
extern HRGN hrgnScrlVis;
|
|
extern HRGN hrgnScrlSrc;
|
|
extern HRGN hrgnScrlDst;
|
|
extern HRGN hrgnScrlValid;
|
|
extern HRGN hrgnScrlUpdate;
|
|
|
|
// Scroll bar definitions
|
|
|
|
typedef struct tagSBINFO
|
|
{
|
|
int pos;
|
|
int posMin;
|
|
int posMax;
|
|
int cpxThumb;
|
|
int cpxArrow;
|
|
int cpx;
|
|
int pxMin;
|
|
int cxBorder;
|
|
int cyBorder;
|
|
int nBar;
|
|
HWND calcHwnd; /* used to identify the window described by this info */
|
|
} SBINFO;
|
|
|
|
// The following masks can be used along with the wDisableFlags field of SB
|
|
// to find if the Up/Left or Down/Right arrow or Both are disabled;
|
|
// Now it is possible to selectively Enable/Disable just one or both the
|
|
// arrows in a scroll bar control;
|
|
#define LTUPFLAG 0x0001 // Left/Up arrow disable flag.
|
|
#define RTDNFLAG 0x0002 // Right/Down arrow disable flag.
|
|
#define SBFLAGSINDEX 6 // Index of Scroll bar flags in Wnd->rgwScroll[]
|
|
|
|
typedef struct tagSB
|
|
{
|
|
WND wnd;
|
|
int pos;
|
|
int min;
|
|
int max;
|
|
BOOL fVert;
|
|
WORD wDisableFlags; // Indicates which arrow is disabled;
|
|
#ifdef DBCS_IME
|
|
BOOL bImeStatus; // IME status save
|
|
#endif
|
|
} SB;
|
|
|
|
typedef SB *PSB;
|
|
typedef SB FAR *LPSB;
|
|
|
|
/* Structure for list of drivers installed by USER and opened by applications.
|
|
*/
|
|
|
|
typedef struct tagDRIVERTABLE
|
|
{
|
|
WORD fBusy:1;
|
|
WORD fFirstEntry:1;
|
|
int idNextDriver; /* Next driver in load chain -1 if end */
|
|
int idPrevDriver; /* Prev driver in load chain -1 if begin */
|
|
HANDLE hModule;
|
|
DWORD dwDriverIdentifier;
|
|
char szAliasName[128];
|
|
LRESULT (FAR * lpDriverEntryPoint)(DWORD, HDRVR, WORD, LPARAM, LPARAM);
|
|
} DRIVERTABLE;
|
|
typedef DRIVERTABLE FAR *LPDRIVERTABLE;
|
|
|
|
LRESULT FAR InternalLoadDriver(LPCSTR szDriverName,
|
|
LPCSTR szSectionName,
|
|
LPCSTR lpstrTail,
|
|
WORD cbTail,
|
|
BOOL fSendEnable);
|
|
WORD FAR InternalFreeDriver(HDRVR hDriver, BOOL fSendDisable);
|
|
|
|
/* Defines for InternalBroadcastDriverMessage flags */
|
|
#define IBDM_SENDMESSAGE 0x00000001
|
|
#define IBDM_REVERSE 0x00000002
|
|
#define IBDM_FIRSTINSTANCEONLY 0x00000004
|
|
|
|
LRESULT FAR InternalBroadcastDriverMessage(HDRVR, WORD, LPARAM, LPARAM, LONG);
|
|
|
|
/* Application queue structure */
|
|
|
|
#define MSGQSIZE 10
|
|
|
|
typedef struct tagQ
|
|
{
|
|
HQ hqNext;
|
|
HTASK hTask;
|
|
int cbEntry;
|
|
int cMsgs;
|
|
WORD pmsgRead;
|
|
WORD pmsgWrite;
|
|
WORD pmsgMax;
|
|
LONG timeLast; /* Time, position, and ID of last message */
|
|
POINT ptLast;
|
|
int idLast;
|
|
DWORD dwExtraInfoLast; /* Additional info */
|
|
WORD unused;
|
|
LPARAM lParam;
|
|
WPARAM wParam;
|
|
int message;
|
|
HWND hwnd;
|
|
LRESULT result;
|
|
int cQuit;
|
|
int exitCode;
|
|
WORD flags;
|
|
WORD pMsgFilterChain;
|
|
HGLOBAL hDS;
|
|
int wVersion;
|
|
HQ hqSender;
|
|
HQ hqSendList;
|
|
HQ hqSendNext;
|
|
WORD cPaintsReady;
|
|
WORD cTimersReady;
|
|
WORD changebits;
|
|
WORD wakebits;
|
|
WORD wakemask;
|
|
WORD pResult;
|
|
WORD pResultSend;
|
|
WORD pResultReceive;
|
|
HOOKNODE* phkCurrent;
|
|
HOOKNODE* rgphkHooks[WH_CHOOKS];
|
|
DWORD semInput;
|
|
HQ hqSemNext;
|
|
INTERNALMSG rgmsg[MSGQSIZE];
|
|
} Q;
|
|
typedef Q FAR *LPQ;
|
|
|
|
// NOTE: These macros can be recoded to be much faster if
|
|
// hqCurrent and lpqCurrent are defined as globals that are set
|
|
// at task switch time.
|
|
//
|
|
#define Lpq(hq) ((LPQ)MAKELP((hq), 0))
|
|
#define LpqFromHq(hq) Lpq(hq)
|
|
#define LpqCurrent() ((LPQ)(MAKELP(HqCurrent(), 0)))
|
|
|
|
typedef WORD ICH;
|
|
|
|
// Q flags field bits
|
|
|
|
#define QF_SEMWAIT 0x01
|
|
#define QF_INIT 0x02
|
|
#define QF_PALETTEAPP 0x04 /* This app used the palette */
|
|
|
|
// Internal GetQueueStatus() flags
|
|
|
|
#define QS_SMRESULT 0x8000
|
|
#define QS_SMPARAMSFREE 0x4000
|
|
|
|
/* Capture codes */
|
|
#define NO_CAP_CLIENT 0 /* no capture; in client area */
|
|
#define NO_CAP_SYS 1 /* no capture; in sys area */
|
|
#define CLIENT_CAPTURE 2 /* client-relative capture */
|
|
#define WINDOW_CAPTURE 3 /* window-relative capture */
|
|
#define SCREEN_CAPTURE 4 /* screen-relative capture */
|
|
|
|
// Extra bytes needed for specific window classes
|
|
//
|
|
#define CBEDITEXTRA 6
|
|
#define CBSTATICEXTRA 6
|
|
#ifdef DBCS_IME
|
|
#define CBBUTTONEXTRA 4 /* need one byte for IME status save */
|
|
#else
|
|
#define CBBUTTONEXTRA 3
|
|
#endif
|
|
#define CBMENUEXTRA 2
|
|
|
|
/* DrawBtnText codes */
|
|
#define DBT_TEXT 0x0001
|
|
#define DBT_FOCUS 0x0002
|
|
|
|
/* RIP error codes */
|
|
#define RIP_SEMCHECK 0xFFF4 /* Decimal -12 */
|
|
#define RIP_SWP 0xFFF1 /* Decimal -15 */ /* SetMultipleWindowPos */
|
|
#define RIP_MEMALLOC 0x0001 /* Insufficient memory for allocation */
|
|
#define RIP_MEMREALLOC 0x0002 /* Error realloc memory */
|
|
#define RIP_MEMFREE 0x0003 /* Memory cannot be freed */
|
|
#define RIP_MEMLOCK 0x0004 /* Memory cannot be locked */
|
|
#define RIP_MEMUNLOCK 0x0005 /* Memory cannot be unlocked */
|
|
#define RIP_BADGDIOBJECT 0x0006 /* Invalid GDI object */
|
|
#define RIP_BADWINDOWHANDLE 0x0007 /* Invalid Window handle */
|
|
#define RIP_DCBUSY 0x0008 /* Cached display contexts are busy */
|
|
#define RIP_NODEFWINDOWPROC 0x0009
|
|
#define RIP_CLIPBOARDOPEN 0x000A
|
|
#define RIP_GETDCWITHOUTRELEASE 0x000B /* App did a GetDC and destroyed window without release*/
|
|
#define RIP_INVALKEYBOARD 0x000C
|
|
#define RIP_INVALMOUSE 0x000D
|
|
#define RIP_INVALCURSOR 0x000E
|
|
#define RIP_DSUNLOCKED 0x000F
|
|
#define RIP_INVALLOCKSYSQ 0x0010
|
|
#define RIP_CARETBUSY 0x0011
|
|
#define RIP_GETCWRANGE 0x0012
|
|
#define RIP_HWNDOWNSDCS 0x0013 /* One hwnd owns all the DCs */
|
|
#define RIP_BADHQ 0x0014 /* operation on something of wrong task */
|
|
#define RIP_BADDCGRAY 0x0015 /* bad dc gray */
|
|
#define RIP_REFCOUNTOVERFLOW 0x0016 /* Ref Count in CLS overflows */
|
|
#define RIP_REFCOUNTUNDERFLOW 0x0017 /* Ref Count in CLS becomes negative */
|
|
#define RIP_COUNTBAD 0x0018 /* Ref Count should be zero; But not so */
|
|
#define RIP_INVALIDWINDOWSTYLE 0x0019 /* Illegal window style bits were set */
|
|
#define RIP_GLOBALCLASS 0x001A /* An application that registered a global
|
|
* class is terminating, but the reference
|
|
* count is non-zero(somebody else is using
|
|
* it). */
|
|
#define RIP_BADHOOKHANDLE 0x001B
|
|
#define RIP_BADHOOKID 0x001C
|
|
#define RIP_BADHOOKPROC 0x001D
|
|
#define RIP_BADHOOKMODULE 0x001E
|
|
#define RIP_BADHOOKCODE 0x001F
|
|
#define RIP_HOOKNOTALLOWED 0x0020
|
|
|
|
#define RIP_UNREMOVEDPROP 0x0021
|
|
#define RIP_BADPROPNAME 0x0022
|
|
#define RIP_BADTASKHANDLE 0x0023
|
|
|
|
#define RIP_GETSETINFOERR1 0x0027 /* Bad negative index for Get/Set/Window etc., */
|
|
#define RIP_GETSETINFOERR2 0x0028 /* Bad Positive index for Get/Set/Window etc., */
|
|
|
|
#define RIP_DIALOGBOXDESTROYWINDOWED 0x0029 /* App called DestroyWindow on a DialogBox window */
|
|
#define RIP_WINDOWIDNOTFOUND 0x002A /* Dialog control ID not found */
|
|
#define RIP_SYSTEMERRORBOXFAILED 0x002B /* Hard sys error box failed due to no hq */
|
|
#define RIP_INVALIDMENUHANDLE 0x002C /* Invalid hMenu */
|
|
#define RIP_INVALIDMETAFILEINCLPBRD 0x002D /* Invalid meta file pasted into clipboard */
|
|
#define RIP_MESSAGEBOXWITHNOQUEUE 0x002E /* MessageBox called with no message queue initialized */
|
|
#define RIP_DLGWINDOWEXTRANOTALLOCATED 0x002F /* DLGWINDOWEXTRA bytes not allocated for dlg box */
|
|
#define RIP_INTERTASKSENDMSGHANG 0x0030 /* Intertask send message with tasks locked */
|
|
|
|
#define RIP_INVALIDPARAM 0x0031 /* Invalid parameter passed to a function */
|
|
#define RIP_ASSERTFAILED 0x0032
|
|
#define RIP_INVALIDFUNCTIONCALLED 0x0033 /* Invalid function was called */
|
|
#define RIP_LOCKINPUTERROR 0x0034 /* LockInput called when input was already locked or when never locked.*/
|
|
#define RIP_NULLWNDPROC 0x0035 /* SetWindowLong uses a NULL wnd proc */
|
|
#define RIP_BAD_UNHOOK 0x0036 /* SetWindowsHook is used to unhook. */
|
|
#define RIP_QUEUE_FULL 0x0037 /* PostMessage failed due to full queue. */
|
|
|
|
#ifdef DEBUG
|
|
|
|
#define DebugFillStruct DebugFillBuffer
|
|
|
|
#define DebugErr(flags, sz) \
|
|
{ static char CODESEG rgch[] = "USER: "sz; DebugOutput((flags) | DBF_USER, rgch); }
|
|
|
|
extern char CODESEG ErrAssertFailed[];
|
|
|
|
#define Assert(f) ((f) ? TRUE : (DebugOutput(DBF_ERROR, ErrAssertFailed), FALSE))
|
|
|
|
extern BOOL fRevalidate;
|
|
|
|
#define DONTREVALIDATE() fRevalidate = FALSE;
|
|
|
|
VOID FAR CheckCbDlgExtra(HWND hwnd);
|
|
|
|
#else
|
|
|
|
#define DebugErr(flags, sz)
|
|
|
|
#define Assert(f) FALSE
|
|
|
|
#define DONTREVALIDATE()
|
|
|
|
#define CheckCbDlgExtra(hwnd)
|
|
|
|
#endif
|
|
|
|
#define UserLogError(flags, errcode, sz) \
|
|
{ DebugErr((flags), sz); \
|
|
LogError(errcode, NULL); }
|
|
|
|
#define BM_CLICK WM_USER+99
|
|
#define CH_PREFIX '&'
|
|
#define CH_HELPPREFIX 0x08
|
|
|
|
#if defined(JAPAN) || defined(KOREA)
|
|
// Japan and Korea support both Kanji and English mnemonic characters,
|
|
// toggled from control panel. Both mnemonics are embedded in menu
|
|
// resource templates. The following prefixes guide their parsing.
|
|
//
|
|
#define CH_ENGLISHPREFIX 0x1E
|
|
#define CH_KANJIPREFIX 0x1F
|
|
|
|
#define KMM_ENGLISH 2 // English/Romaji menu mode
|
|
#define KMM_KANJI 3 // Kanji/Hangeul menu mode
|
|
extern int KanjiMenuMode;
|
|
#endif
|
|
|
|
/* The total number of strings used as Button strings in MessageBoxes */
|
|
#define MAX_MB_STRINGS 8
|
|
|
|
/* Dialog box activation border width factor. */
|
|
#define CLDLGFRAME 4
|
|
#define CLDLGFRAMEWHITE 0
|
|
|
|
/* Constants for onboard bitmap save. */
|
|
#define ONBOARD_SAVE 0x0000
|
|
#define ONBOARD_RESTORE 0x0001
|
|
#define ONBOARD_CLEAR 0x0002
|
|
|
|
/* Bitmap resource IDs */
|
|
#define BMR_ICON 1
|
|
#define BMR_BITMAP 2
|
|
#define BMR_CURSOR 3
|
|
#define BMR_DEVDEP 0
|
|
#define BMR_DEVIND 1
|
|
#define BMR_DEPIND 2
|
|
|
|
/* PID definitions */
|
|
#define get_PID 0
|
|
#define get_EMSSave_area 1
|
|
#define dont_free_banks 2
|
|
#define free_PIDs_banks 3
|
|
#define free_handle 4
|
|
#define memory_sizes 5
|
|
#define DDE_shared 6
|
|
|
|
// SetWindowPos() related structures and definitions
|
|
//
|
|
extern HRGN hrgnInvalidSum;
|
|
extern HRGN hrgnVisNew;
|
|
extern HRGN hrgnSWP1;
|
|
extern HRGN hrgnValid;
|
|
extern HRGN hrgnValidSum;
|
|
extern HRGN hrgnInvalid;
|
|
|
|
// CalcValidRects() "Region Empty" flag values
|
|
// A set bit indicates the corresponding region is empty.
|
|
//
|
|
#define RE_VISNEW 0x0001 // CVR "Region Empty" flag values
|
|
#define RE_VISOLD 0x0002 // A set bit indicates the
|
|
#define RE_VALID 0x0004 // corresponding region is empty.
|
|
#define RE_INVALID 0x0008
|
|
#define RE_SPB 0x0010
|
|
#define RE_VALIDSUM 0x0020
|
|
#define RE_INVALIDSUM 0x0040
|
|
|
|
typedef struct tagCVR // cvr
|
|
{
|
|
WINDOWPOS pos; // MUST be first field of CVR!
|
|
int xClientNew; // New client rectangle
|
|
int yClientNew;
|
|
int cxClientNew;
|
|
int cyClientNew;
|
|
RECT rcBlt;
|
|
int dxBlt; // Distance blt rectangle is moving
|
|
int dyBlt;
|
|
WORD fsRE; // RE_ flags: whether hrgnVisOld is empty or not
|
|
HRGN hrgnVisOld; // Previous visrgn
|
|
} CVR;
|
|
|
|
typedef struct tagSMWP // smwp
|
|
{
|
|
int ccvr; // Number of CVRs in the SWMP
|
|
int ccvrAlloc; // Number of actual CVRs allocated in the SMWP
|
|
BOOL fInUse;
|
|
WORD signature; // signature word for handle validation
|
|
CVR rgcvr[1];
|
|
} SMWP;
|
|
|
|
#define SMWP_SIG ('W' | ('P' << 8))
|
|
|
|
#define PEMWP HDWP
|
|
|
|
#define NEAR_SWP_PTRS
|
|
#ifdef NEAR_SWP_PTRS
|
|
|
|
typedef SMWP* PSMWP;
|
|
typedef CVR* PCVR;
|
|
#else
|
|
|
|
typedef SMWP FAR* PSMWP;
|
|
typedef CVR FAR* PCVR;
|
|
#endif
|
|
|
|
BOOL ValidateSmwp(PSMWP psmwp, BOOL FAR* pfSyncPaint);
|
|
HWND SmwpFindActive(PSMWP psmwp);
|
|
void SendChangedMsgs(PSMWP psmwp);
|
|
BOOL ValidateWindowPos(WINDOWPOS FAR *ppos);
|
|
BOOL BltValidBits(PSMWP psmwp);
|
|
BOOL SwpCalcVisRgn(HWND hwnd, HRGN hrgn);
|
|
BOOL CombineOldNewVis(HRGN hrgn, HRGN hrgnVisOld, HRGN hrgnVisNew, WORD crgn, WORD fsRgnEmpty);
|
|
void CalcValidRects(PSMWP psmwp, HWND FAR* phwndNewActive);
|
|
BOOL ValidateZorder(PCVR pcvr);
|
|
PSMWP ZOrderByOwner(PSMWP psmwp);
|
|
PSMWP AddCvr(PSMWP psmwp, HWND hwnd, HWND hwndInsertAfter, WORD flags);
|
|
BOOL SwpActivate(HWND hwndNewActive);
|
|
|
|
void FAR HandleWindowPosChanged(HWND hwnd, WINDOWPOS FAR *lppos);
|
|
void FAR OffsetChildren(HWND hwnd, int dx, int dy, LPRECT prcHitTest);
|
|
BOOL FAR IntersectWithParents(HWND hwnd, LPRECT lprcParents);
|
|
|
|
// Preallocated buffers for use during SetWindowPos to prevent memory
|
|
// allocation failures.
|
|
//
|
|
#define CCVR_WORKSPACE 4
|
|
#define CCVR_MSG_WORKSPACE 2
|
|
|
|
#define CB_WORKSPACE ((sizeof(SMWP) - sizeof(CVR)) + CCVR_WORKSPACE * sizeof(CVR))
|
|
#define CB_MSG_WORKSPACE ((sizeof(SMWP) - sizeof(CVR)) + CCVR_MSG_WORKSPACE * sizeof(CVR))
|
|
|
|
extern BYTE workspace[];
|
|
extern BYTE msg_workspace[];
|
|
|
|
typedef struct tagSTAT
|
|
{
|
|
WND wnd;
|
|
HFONT hFont;
|
|
HBRUSH hBrush;
|
|
HICON hIcon;
|
|
} STAT;
|
|
typedef STAT *PSTAT;
|
|
|
|
#define IsCrlf(x) ((char)(x)==0x0D)
|
|
|
|
/* Help Engine stuff */
|
|
|
|
typedef struct
|
|
{
|
|
unsigned short cbData; /* Size of data */
|
|
unsigned short usCommand; /* Command to execute */
|
|
unsigned long ulTopic; /* Topic/context number (if needed) */
|
|
unsigned long ulReserved; /* Reserved (internal use) */
|
|
unsigned short offszHelpFile; /* Offset to help file in block */
|
|
unsigned short offabData; /* Offset to other data in block */
|
|
} HLP;
|
|
|
|
typedef HLP FAR *LPHLP;
|
|
|
|
typedef HANDLE HDCS;
|
|
|
|
/* DrawFrame() Commands */
|
|
#define DF_SHIFT0 0x0000
|
|
#define DF_SHIFT1 0x0001
|
|
#define DF_SHIFT2 0x0002
|
|
#define DF_SHIFT3 0x0003
|
|
#define DF_PATCOPY 0x0000
|
|
#define DF_PATINVERT 0x0004
|
|
|
|
#define DF_SCROLLBAR (COLOR_SCROLLBAR << 3)
|
|
#define DF_BACKGROUND (COLOR_BACKGROUND << 3)
|
|
#define DF_ACTIVECAPTION (COLOR_ACTIVECAPTION << 3)
|
|
#define DF_INACTIVECAPTION (COLOR_INACTIVECAPTION << 3)
|
|
#define DF_MENU (COLOR_MENU << 3)
|
|
#define DF_WINDOW (COLOR_WINDOW << 3)
|
|
#define DF_WINDOWFRAME (COLOR_WINDOWFRAME << 3)
|
|
#define DF_MENUTEXT (COLOR_MENUTEXT << 3)
|
|
#define DF_WINDOWTEXT (COLOR_WINDOWTEXT << 3)
|
|
#define DF_CAPTIONTEXT (COLOR_CAPTIONTEXT << 3)
|
|
#define DF_ACTIVEBORDER (COLOR_ACTIVEBORDER << 3)
|
|
#define DF_INACTIVEBORDER (COLOR_INACTIVEBORDER << 3)
|
|
#define DF_APPWORKSPACE (COLOR_APPWORKSPACE << 3)
|
|
#define DF_GRAY (DF_APPWORKSPACE + (1 << 3))
|
|
|
|
|
|
#ifdef FASTFRAME
|
|
|
|
typedef struct tagFRAMEBITMAP
|
|
{
|
|
int x; /* Top Left co-ordinates */
|
|
int y;
|
|
int dx; /* Width of the bitmap */
|
|
int dy; /* Height of the bitmap */
|
|
} FRAMEBITMAP;
|
|
|
|
#define FB_THICKFRAME FALSE
|
|
#define FB_DLGFRAME TRUE
|
|
|
|
#define FB_ACTIVE 0
|
|
#define FB_INACTIVE 1
|
|
|
|
#define FB_HORZ 0
|
|
#define FB_VERT 1
|
|
#define FB_DLG_HORZ 2
|
|
#define FB_DLG_VERT 3
|
|
#define FB_CAPTION 4
|
|
|
|
typedef struct tagFRAMEDETAILS
|
|
{
|
|
HBITMAP hFrameBitmap[5][2]; /* indices explained above */
|
|
FRAMEBITMAP ActBorderH[4]; /* Four parts of Thick frame Horz bitmap */
|
|
FRAMEBITMAP ActBorderV[4];
|
|
FRAMEBITMAP DlgFrameH[4]; /* Four parts of Dlg Frame Horz bitmap */
|
|
FRAMEBITMAP DlgFrameV[4];
|
|
FRAMEBITMAP CaptionInfo[7];
|
|
int clBorderWidth;
|
|
} FRAMEDETAILS;
|
|
|
|
typedef FRAMEBITMAP *PFRAMEBITMAP;
|
|
|
|
// Fast frame related macros
|
|
#define FC_ACTIVEBORDER 0x01
|
|
#define FC_INACTIVEBORDER 0x02
|
|
#define FC_ACTIVECAPTION 0x04
|
|
#define FC_INACTIVECAPTION 0x08
|
|
#define FC_WINDOWFRAME 0x10
|
|
|
|
#define FC_ACTIVEBIT 0x01
|
|
#define FC_INACTIVEBIT 0x02
|
|
#define FC_STATUSBITS (FC_ACTIVEBIT | FC_INACTIVEBIT)
|
|
|
|
#endif /* FASTFRAME */
|
|
|
|
// The following defines the components of nKeyboardSpeed
|
|
#define KSPEED_MASK 0x001F // Defines the key repeat speed.
|
|
#define KDELAY_MASK 0x0060 // Defines the keyboard delay.
|
|
#define KDELAY_SHIFT 5
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* */
|
|
/* Secret Imports - */
|
|
/* */
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
#ifndef MSDWP
|
|
|
|
/* Imported from Kernel. */
|
|
HQ FAR GetTaskQueue(HTASK);
|
|
HQ FAR SetTaskQueue(HTASK, HQ);
|
|
void FAR LockCurrentTask(BOOL);
|
|
HANDLE FAR emscopy();
|
|
//void FAR ExitKernel(int);
|
|
int FAR LocalCountFree(void);
|
|
int FAR LocalHeapSize(void);
|
|
BOOL FAR IsWinoldapTask(HTASK);
|
|
WORD FAR GetExeVersion(void);
|
|
DWORD FAR GetTaskDS(void);
|
|
void FAR SetTaskSignalProc(WORD, FARPROC);
|
|
DWORD FAR GetHeapSpaces(HMODULE hModule);
|
|
int FAR IsScreenGrab(void);
|
|
|
|
/* Imported from GDI. */
|
|
int API IntersectVisRect(HDC, int, int, int, int);
|
|
int API ExcludeVisRect(HDC, int, int, int, int);
|
|
int API SelectVisRgn(HDC, HRGN);
|
|
int API SaveVisRgn(HDC);
|
|
int API RestoreVisRgn(HDC);
|
|
HRGN API InquireVisRgn(HDC);
|
|
HDCS API GetDCState(HDC);
|
|
BOOL API SetDCState(HDC, HDCS);
|
|
HFONT API GetCurLogFont(HDC); // From GDI
|
|
#define SwapHandle(foo)
|
|
|
|
HANDLE FAR GDIInit2(HANDLE, HANDLE);
|
|
HRGN API GetClipRgn(HDC);
|
|
HBITMAP FAR CreateUserBitmap(int, int, int, int, LONG);
|
|
void FAR UnRealizeObject(HBRUSH);
|
|
void FAR LRCCFrame(HDC, LPRECT, HBRUSH, DWORD);
|
|
void FAR Death(HDC);
|
|
void FAR Resurrection(HDC, LONG, LONG, LONG);
|
|
void FAR DeleteAboveLineFonts(void);
|
|
BOOL FAR GDIInitApp(void);
|
|
HBITMAP FAR CreateUserDiscardableBitmap(HDC, int, int);
|
|
void FAR FinalGDIInit(HBRUSH);
|
|
void FAR GDIMoveBitmap(HBITMAP);
|
|
BOOL FAR IsValidMetaFile(HMETAFILE);
|
|
#define GDIMoveBitmap(d1)
|
|
|
|
#endif /* MSDWP */
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* */
|
|
/* DS Global Variables (from WINDS.C) */
|
|
/* */
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
//***** Initialization globals
|
|
|
|
extern HINSTANCE hInstanceWin;
|
|
extern HMODULE hModuleWin;
|
|
|
|
//WORD rgwSysMet[]; // Defined in winmisc2.asm
|
|
|
|
//***** System mode globals
|
|
|
|
extern BOOL fDialog; // Dialog box is active
|
|
extern BOOL fEndSession; // Shutting down system
|
|
extern BOOL fTaskIsLocked; // LockTask() called
|
|
|
|
extern BOOL fMessageBox; // hard message box active
|
|
extern HWND hwndSysModal;
|
|
|
|
extern HQ hqAppExit; // hq of app in app termination code
|
|
|
|
//***** System option settings globals
|
|
|
|
extern int nKeyboardSpeed; // keyboard repeat rate
|
|
|
|
extern int iScreenSaveTimeOut; // screen saver timeout
|
|
|
|
extern BOOL fHires; /* VERTRES > 300? */
|
|
extern BOOL fPaletteDisplay; /* Are we on a palette display driver? */
|
|
extern BOOL fEdsunChipSet; /* Edsun vga chip set? */
|
|
|
|
//***** Window manager globals
|
|
|
|
extern HWND hwndDesktop; // Desktop window
|
|
|
|
extern PCLS pclsList; // List of registered classes
|
|
|
|
extern PBWL pbwlCache; // BuildWindowList() globals
|
|
extern PBWL pbwlList;
|
|
|
|
//***** Input globals
|
|
|
|
extern BOOL fThunklstrcmp; // if TRUE we thunk to Win32
|
|
|
|
extern WORD idSysPeek; /* ID in sys queue of msg being looked at */
|
|
|
|
extern DWORD timeLastInputMessage; // Time of the last keyboard, mouse, or
|
|
// other input message.
|
|
|
|
extern HWND hwndCursor;
|
|
|
|
extern HWND hwndDblClk; // doubleclick parsing
|
|
extern RECT rcDblClk;
|
|
extern WORD dtDblClk;
|
|
extern WORD msgDblClk;
|
|
extern DWORD timeDblClk;
|
|
|
|
extern int defQueueSize; // Default msg queue size
|
|
|
|
extern HTASK hTaskLockInput; /* Task which has called LockInput() */
|
|
|
|
extern KBINFO keybdInfo;
|
|
extern BYTE *pState; // Pointer to buffer for ToAscii
|
|
|
|
extern BOOL fShrinkGDI; /* Does GDI's heap needs shrinking? */
|
|
extern BOOL fLockNorem; /* PeekMsg NOREMOVE flag */
|
|
|
|
//***** Activation/Focus/Capture related globals
|
|
|
|
extern HWND hwndActive;
|
|
extern HWND hwndActivePrev;
|
|
|
|
extern HWND hwndFocus;
|
|
|
|
extern int codeCapture;
|
|
extern HWND hwndCapture;
|
|
|
|
//***** SetWindowPos() related globals
|
|
|
|
extern HRGN hrgnInvalidSum; // Temps used by SetWindowPos()
|
|
extern HRGN hrgnVisNew;
|
|
extern HRGN hrgnSWP1;
|
|
extern HRGN hrgnValid;
|
|
extern HRGN hrgnValidSum;
|
|
extern HRGN hrgnInvalid;
|
|
|
|
#ifdef LATER
|
|
// Are these still needed now that SysErrorBox() is working?
|
|
#endif
|
|
|
|
extern BYTE workspace[]; // Buffers used to prevent mem alloc
|
|
extern BYTE msg_workspace[]; // failures in messagebox
|
|
|
|
//***** General graphics globals
|
|
|
|
extern HDC hdcBits; /* DC with User's bitmaps */
|
|
extern HDC hdcMonoBits; /* DC with User's MONO bitmaps */
|
|
|
|
extern OEMINFO oemInfo;
|
|
extern OEMINFOMONO oemInfoMono;
|
|
|
|
extern RESINFO resInfo;
|
|
extern RESINFOMONO resInfoMono;
|
|
|
|
extern SYSCLROBJECTS sysClrObjects;
|
|
extern SYSCOLORS sysColors;
|
|
|
|
extern HFONT hFontSys; // alias for GetStockObject(SYSTEM_FONT);
|
|
extern HFONT hFontSysFixed; // alias for GetStockObject(SYSTEM_FIXED_FONT);
|
|
extern HBRUSH hbrWhite; // alias for GetStockObject(WHITE_BRUSH);
|
|
extern HBRUSH hbrBlack; // alias for GetStockObject(BLACK_BRUSH);
|
|
extern HPALETTE hPalDefaultPalette; // alias for GetStockObject(DEFAULT_PALETTE);
|
|
|
|
//***** DC Cache related globals
|
|
|
|
extern DCE* pdceFirst; /* Ptr to first entry in cache */
|
|
|
|
extern HRGN hrgnEWL; // Temp used by ExcludeWindowList()
|
|
extern HRGN hrgnGDC; // Temp used by GetCacheDC() et al
|
|
extern HRGN hrgnDCH; // Temp used by DCHook()
|
|
|
|
extern HRGN hrgnNull; // empty rgn
|
|
extern HRGN hrgnScreen; // rcScreen-sized rgn
|
|
|
|
extern HDCS hdcsReset;
|
|
|
|
extern HDC hdcScreen;
|
|
|
|
//***** Begin/EndDrawBuffer() globals
|
|
|
|
#ifdef DISABLE
|
|
extern HWND hwndBuffer;
|
|
extern HBITMAP hbmBuffer;
|
|
extern HBITMAP hbmBufferSave;
|
|
extern int cxBuffer;
|
|
extern int cyBuffer;
|
|
extern int dxBuffer;
|
|
extern DCE* pdceBuffer;
|
|
extern int dxBufferVisRgn;
|
|
extern int dyBufferVisRgn;
|
|
extern BOOL fBufferFlushed;
|
|
extern RECT rcBuffer;
|
|
|
|
extern HDCS hdcsMemReset;
|
|
#endif
|
|
|
|
//***** LockWindowUpdate related globals
|
|
|
|
extern HQ hqLockUpdate;
|
|
extern HWND hwndLockUpdate;
|
|
|
|
//***** SPB related globals
|
|
|
|
extern SPB *pspbFirst;
|
|
|
|
extern HRGN hrgnSCR; // Temp used by SpbCheckRect()
|
|
extern HRGN hrgnSPB1;
|
|
extern HRGN hrgnSPB2;
|
|
|
|
extern HRGN hrgnInv0; // Temps used by InternalInvalidate()
|
|
extern HRGN hrgnInv1;
|
|
extern HRGN hrgnInv2;
|
|
|
|
//***** General Metrics
|
|
|
|
extern RECT rcScreen; // Screen rectangle
|
|
extern int cxScreen; // Screen height/width
|
|
extern int cyScreen;
|
|
|
|
extern BOOL fBeep; /* Warning beeps allowed? */
|
|
|
|
extern int cxSysFontChar; // System font metrics
|
|
extern int cxSysFontOverhang;
|
|
extern int cySysFontAscent;
|
|
extern int cySysFontChar;
|
|
extern int cySysFontExternLeading;
|
|
|
|
extern int cxBorder; // Nominal border width/height
|
|
extern int cyBorder;
|
|
|
|
extern int cyCaption; // height of caption
|
|
|
|
extern int cxSize; // dimensions of system menu bitmap
|
|
extern int cySize;
|
|
|
|
extern int cyHScroll; // scroll bar dimensions
|
|
extern int cxVScroll;
|
|
|
|
extern int cxSlot; // icon slot dimensions
|
|
extern int cySlot;
|
|
|
|
//***** ScrollWindow/ScrollDC related globals
|
|
|
|
extern HRGN hrgnSW; // Temps used by ScrollDC/ScrollWindow
|
|
extern HRGN hrgnScrl1;
|
|
extern HRGN hrgnScrl2;
|
|
extern HRGN hrgnScrlVis;
|
|
extern HRGN hrgnScrlSrc;
|
|
extern HRGN hrgnScrlDst;
|
|
extern HRGN hrgnScrlValid;
|
|
extern HRGN hrgnScrlUpdate;
|
|
|
|
//***** Clipboard globals
|
|
|
|
extern int cNumClipFormats; // Number of formats in clipboard
|
|
extern CLIP *pClipboard; // Clipboard data
|
|
extern HQ hqClipLock; // hq of app accessing clipboard
|
|
extern HWND hwndClipOwner; // clipboard owner
|
|
extern HWND hwndClipViewer; // clipboard viewer
|
|
extern BOOL fClipboardChanged; // TRUE if DrawClipboard needs to be called
|
|
extern BOOL fDrawingClipboard; // TRUE if inside DrawClipboard()
|
|
extern HWND hwndClipOpen; // hwnd of app accessing clipboard
|
|
extern BOOL fCBLocked; /* Is clibboard locked? */
|
|
|
|
//***** Fast frame drawing globals
|
|
|
|
#ifdef FASTFRAME
|
|
extern BOOL fFastFrame;
|
|
extern FRAMEDETAILS Frame;
|
|
#endif /* FASTFRAME */
|
|
|
|
//***** WinOldAppHackoMaticFlags
|
|
|
|
extern WORD winOldAppHackoMaticFlags; /* Flags for doing special things for
|
|
winold app */
|
|
//***** TaskManager exec globals
|
|
|
|
extern PSTR pTaskManName; // Task manager file name
|
|
|
|
//***** atom management globals
|
|
|
|
extern HANDLE hWinAtom; // global atom manager heap
|
|
|
|
//***** WM_HOTKEY globals
|
|
|
|
extern PSTR pHotKeyList; /* Pointer to list of hot keys in system. */
|
|
extern int cHotKeyCount; /* Count of hot keys in list. */
|
|
|
|
//***** WinHelp() globals
|
|
|
|
extern WORD msgWinHelp;
|
|
|
|
//***** SetWindowsHook() system hook table
|
|
|
|
extern HOOKNODE* rgphkSysHooks[];
|
|
extern HOOKNODE* phkDeleted;
|
|
|
|
//***** Driver management globals
|
|
|
|
extern int cInstalledDrivers; /* Count of installed driver structs allocated*/
|
|
extern HDRVR hInstalledDriverList; /* List of installable drivers */
|
|
extern int idFirstDriver; /* First driver in load chain */
|
|
extern int idLastDriver; /* Last driver in load chain */
|
|
|
|
//***** Display driver globals
|
|
|
|
extern HINSTANCE hInstanceDisplay;
|
|
|
|
extern BOOL fOnBoardBitmap; /* Can display save bitmaps onboard? */
|
|
extern BOOL (CALLBACK *lpSaveBitmap)(LPRECT lprc, WORD flags);
|
|
extern VOID (CALLBACK *lpDisplayCriticalSection)(BOOL fLock);
|
|
extern VOID (CALLBACK *lpWin386ShellCritSection)(VOID);
|
|
typedef int (FAR *FARGETDRIVERPROC)(int, LPCSTR);
|
|
extern FARGETDRIVERPROC lpfnGetDriverResourceId;
|
|
|
|
//***** Comm driver definitions and globals
|
|
|
|
// Comm driver constants
|
|
//
|
|
#define LPTx 0x80 /* Mask to indicate cid is for LPT device */
|
|
#define LPTxMask 0x7F /* Mask to get cid for LPT device */
|
|
|
|
#define PIOMAX 3 /* Max number of LPTx devices in high level */
|
|
#define CDEVMAX 10 /* Max number of COMx devices in high level */
|
|
#define DEVMAX (CDEVMAX+PIOMAX) /* Max number of devices in high level */
|
|
|
|
// qdb - queue definition block
|
|
//
|
|
typedef struct {
|
|
char far *pqRx; /* pointer to rx queue */
|
|
int cbqRx; /* size of RX Queue in bytes */
|
|
char far *pqTx; /* Pointer to TX Queue */
|
|
int cbqTx; /* Size of TX Queue in bytes */
|
|
} qdb;
|
|
|
|
// cinfo - Communications Device Information
|
|
//
|
|
typedef struct
|
|
{
|
|
WORD fOpen : 1; /* Device open flag */
|
|
WORD fchUnget : 1; /* Flag for backed-up character */
|
|
WORD fReservedHardware:1; /* Reserved for hardware (mouse etc) */
|
|
HTASK hTask; /* Handle to task who opened us */
|
|
char chUnget; /* Backed-up character */
|
|
qdb qdbCur; /* Queue information */
|
|
} cinfo;
|
|
|
|
extern cinfo rgcinfo[];
|
|
|
|
extern int (FAR PASCAL *lpCommWriteString)(int, LPCSTR, WORD);
|
|
/* Ptr to the comm driver's
|
|
* commwritestring function. Only
|
|
* exists in 3.1 drivers.
|
|
*/
|
|
extern int (FAR PASCAL *lpCommReadString)(int, LPSTR, WORD);
|
|
/* Ptr to the comm driver's
|
|
* commreadstring function. Only
|
|
* exists in 3.1 drivers.
|
|
*/
|
|
extern BOOL (FAR PASCAL *lpCommEnableNotification)(int, HWND, int, int);
|
|
/* Ptr to the comm driver's
|
|
* EnableNotification function.
|
|
* Only exists in 3.1 drivers.
|
|
*/
|
|
|
|
//***** PenWinProc globals
|
|
/* Ptr to register us as pen aware dlg box
|
|
*/
|
|
extern VOID (CALLBACK *lpRegisterPenAwareApp)(WORD i, BOOL fRegister);
|
|
|
|
|
|
//***** Resource handler globals
|
|
|
|
extern RSRCHDLRPROC lpDefaultResourceHandler;
|
|
|
|
//***** NLS related globals
|
|
|
|
extern HINSTANCE hLangDrv; /* The module handle of the language driver */
|
|
extern FARPROC fpLangProc; /* The entry point into the language driver */
|
|
|
|
#ifdef DBCS_IME
|
|
extern HINSTANCE hWinnls; /* WINNLS.DLL module handle */
|
|
#endif
|
|
|
|
//***** Caret globals
|
|
|
|
extern CARET caret;
|
|
extern HQ hqCaret;
|
|
|
|
//***** Cursor globals
|
|
|
|
extern CURSORINFO cursInfo;
|
|
|
|
#ifdef LATER
|
|
// Is this array big enough?
|
|
#endif
|
|
|
|
extern HCURSOR rghCursor[];
|
|
|
|
extern HBITMAP hbmCursorBitmap; /* Pre created bitmap for SetCursor */
|
|
extern HGLOBAL hPermanentCursor; /* Precreated permanent cursor resource */
|
|
|
|
extern HCURSOR hCurCursor;
|
|
|
|
extern HCURSOR hCursNormal;
|
|
extern HCURSOR hCursUpArrow;
|
|
extern HCURSOR hCursIBeam;
|
|
extern HCURSOR hCursSizeAll;
|
|
|
|
//INT iLevelCursor; NOTE: overlays sys metrics array (winmisc2.asm)
|
|
|
|
//***** Icon globals
|
|
|
|
extern HICON hIconBang;
|
|
extern HICON hIconHand;
|
|
extern HICON hIconNote;
|
|
extern HICON hIconQues;
|
|
extern HICON hIconSample;
|
|
extern HICON hIconWarn;
|
|
extern HICON hIconErr;
|
|
|
|
extern HBITMAP hbmDrawIconMono; /* Pre created bitmaps for drawicon */
|
|
extern HBITMAP hbmDrawIconColor; /* Pre created bitmaps for drawicon */
|
|
|
|
extern HTASK hTaskGrayString; /* Task in graystring */
|
|
|
|
//***** Desktop/Wallpaper globals
|
|
|
|
extern HBITMAP hbmDesktop; /* Monochrome Desktop pattern */
|
|
extern HBITMAP hbmWallpaper; /* Bitmap that will be drawn on the desktop */
|
|
|
|
//***** Window move/size tracking globals
|
|
|
|
extern RECT rcDrag;
|
|
extern RECT rcWindow;
|
|
extern RECT rcParent;
|
|
extern WORD cmd;
|
|
extern HICON hdragIcon;
|
|
extern BOOL fTrack;
|
|
extern int dxMouse;
|
|
extern int dyMouse;
|
|
extern int impx;
|
|
extern int impy;
|
|
extern HWND hwndTrack;
|
|
extern BOOL fInitSize;
|
|
extern POINT ptMinTrack;
|
|
extern POINT ptMaxTrack;
|
|
extern BOOL fmsKbd;
|
|
extern POINT ptRestore;
|
|
extern HCURSOR hIconWindows; /* Cool windows icon */
|
|
extern BOOL fDragFullWindows; /* Drag xor rect or full windows */
|
|
|
|
/* Added flag to stop anyone from setting the cursor while
|
|
* we are moving the hDragIcon. This was done to fix a bug in micrografix
|
|
* Draw (They are doing a Setcursor() whenever they get a paint message).
|
|
*/
|
|
extern BOOL fdragIcon; // Prevent SetCursor while dragging icon
|
|
|
|
/* When an iconic window is moved around with a mouse, IsWindowVisible() call
|
|
* returns FALSE! This is because, the window is internally hidden and what is
|
|
* visible is only a mouse cursor! But how will the Tracer guys know this?
|
|
* They won't! So, when an Icon window is moved around, its hwnd is preserved
|
|
* in this global and IsWindowVisible() will return a true for
|
|
* this window!
|
|
*/
|
|
extern HWND hwndDragIcon;
|
|
|
|
//***** MessageBox globals
|
|
|
|
extern int cntMBox; // Nesting level for overlap tiling of mboxes
|
|
extern WORD wDefButton; // index of current default button
|
|
extern WORD wMaxBtnSize; // width of biggest button in any message box
|
|
|
|
//***** Size border metric globals
|
|
|
|
extern int clBorder; /* # of logical units in window frame */
|
|
extern int cxSzBorder; /* Window border width (cxBorder*clBorder) */
|
|
extern int cySzBorder; /* Window border height (cyBorder*clBorder) */
|
|
extern int cxSzBorderPlus1; /* cxBorder*(clBorder+1). We overlap a line */
|
|
extern int cySzBorderPlus1; /* cyBorder*(clBorder+1). We overlap a line */
|
|
|
|
//***** Window tiling/cascading globals
|
|
|
|
extern int cxyGranularity; /* Top-level window grid granularity */
|
|
extern int cyCWMargin; /* Space on top of toplevel window 'stack' */
|
|
extern int cxCWMargin; /* Space on right of toplevel window 'stack'*/
|
|
extern int iwndStack;
|
|
|
|
extern int cxHalfIcon; // rounding helpers for icon positioning
|
|
extern int cyHalfIcon;
|
|
|
|
//***** Alt-tab switching globals
|
|
|
|
extern HWND hwndAltTab;
|
|
extern HWND hwndSwitch;
|
|
extern HWND hwndKbd;
|
|
extern BOOL fFastAltTab; /* Don't use Tandy's switcher? */
|
|
extern BOOL fInAltTab;
|
|
|
|
//***** Icon title globals
|
|
|
|
extern int cyTitleSpace;
|
|
extern BOOL fIconTitleWrap; /* Wrap icon titles or just use single line? */
|
|
extern LOGFONT iconTitleLogFont; /* LogFont struct for icon title font */
|
|
extern HFONT hIconTitleFont; /* Font used in icon titles */
|
|
|
|
//***** GrayString globals
|
|
|
|
extern HBRUSH hbrGray; // GrayString globals.
|
|
extern HBITMAP hbmGray;
|
|
extern HDC hdcGray;
|
|
extern int cxGray; // current dimensions of hbmGray
|
|
extern int cyGray;
|
|
|
|
//***** WM_GETMINMAXINFO globals
|
|
|
|
extern POINT rgptMinMaxWnd[];
|
|
extern POINT rgptMinMax[];
|
|
|
|
//***** Menu globals
|
|
|
|
extern int menuSelect;
|
|
extern int mnFocus;
|
|
|
|
extern HANDLE hMenuHeap; /* Menu heap */
|
|
extern _segment menuBase;
|
|
extern HANDLE hMenuStringHeap;
|
|
extern _segment menuStringBase;
|
|
|
|
|
|
//PPOPUPMENU pGlobalPopupMenu; // mnloop.c
|
|
|
|
extern HWND hwndRealPopup;
|
|
|
|
extern BOOL fMenu; /* Using a menu? */
|
|
extern BOOL fSysMenu;
|
|
extern BOOL fInsideMenuLoop; /* MenuLoop capture? */
|
|
|
|
extern BOOL fMenuStatus;
|
|
extern int iActivatedWindow;/* This global is examined in the menu loop
|
|
* code so that we exit from menu mode if
|
|
* another window was activated while we were
|
|
* tracking menus. This global is incremented
|
|
* whenever we activate a new window.
|
|
*/
|
|
extern WORD iDelayMenuShow; /* Delay till the hierarchical menu is shown*/
|
|
extern WORD iDelayMenuHide; /* Delay till the hierarchical menu is hidden
|
|
when user drags outside of it */
|
|
extern HMENU hSysMenu;
|
|
|
|
extern HBITMAP hbmSysMenu;
|
|
extern RECT rcSysMenuInvert;
|
|
|
|
//***** Scroll bar globals
|
|
|
|
extern ATOM atomScrollBar; /* Atom for the scrollbar control wnd class */
|
|
extern HWND hwndSB;
|
|
extern HWND hwndSBNotify;
|
|
extern HWND hwndSBTrack;
|
|
extern int dpxThumb;
|
|
extern int posOld;
|
|
extern int posStart;
|
|
extern int pxBottom;
|
|
extern int pxDownArrow;
|
|
extern int pxLeft;
|
|
extern int pxOld;
|
|
extern int pxRight;
|
|
extern int pxStart;
|
|
extern int pxThumbBottom;
|
|
extern int pxThumbTop;
|
|
extern int pxTop;
|
|
extern int pxUpArrow;
|
|
extern BOOL fHitOld;
|
|
extern int cmdSB;
|
|
extern VOID (*pfnSB)(HWND, WORD, WPARAM, LPARAM);
|
|
extern RECT rcSB;
|
|
extern RECT rcThumb;
|
|
extern RECT rcTrack;
|
|
extern BOOL fTrackVert;
|
|
extern BOOL fCtlSB;
|
|
extern WORD hTimerSB;
|
|
extern BOOL fVertSB;
|
|
extern SBINFO *psbiSB;
|
|
extern SBINFO sbiHorz;
|
|
extern SBINFO sbiVert;
|
|
extern int cmsTimerInterval;
|
|
|
|
//***** Control globals
|
|
|
|
extern ATOM atomSysClass[];
|
|
|
|
//***** Constant strings
|
|
|
|
extern char szUNTITLED[];
|
|
extern char szERROR[];
|
|
extern char szOK[];
|
|
extern char szCANCEL[];
|
|
extern char szABORT[];
|
|
extern char szRETRY[];
|
|
extern char szIGNORE[];
|
|
extern char szYYES[];
|
|
extern char szCLOSE[];
|
|
extern char szNO[];
|
|
|
|
extern char szAM[];
|
|
extern char szPM[];
|
|
extern PSTR pTimeTagArray[];
|
|
|
|
extern char szAttr[];
|
|
extern char szOEMBIN[];
|
|
extern char szDISPLAY[];
|
|
extern char szOneChar[];
|
|
extern char szSLASHSTARDOTSTAR[];
|
|
extern char szYes[];
|
|
extern char szNullString[];
|
|
|
|
#ifdef DEBUG
|
|
|
|
extern char CODESEG ErrAssertFailed[];
|
|
extern char CODESEG ErrInvalParam[];
|
|
|
|
#endif
|
|
|
|
#ifdef JAPAN
|
|
extern char szJWordBreak[]; // Japanese word breaking char table
|
|
#endif
|
|
|
|
#ifdef KOREA
|
|
void FAR SetLevel(HWND);
|
|
BOOL FAR RequestHanjaMode(HWND, LPSTR);
|
|
WORD FAR PASCAL TranslateHangeul(WORD);
|
|
#endif
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* */
|
|
/* Global Variables from ASM files */
|
|
/* */
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
extern BYTE rgbKeyState[];
|
|
extern int iLevelCursor;
|
|
extern WORD rgwSysMet[];
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* */
|
|
/* INTDS interrupt-accessible globals
|
|
/* */
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
extern BOOL INTDSSEG fInt24;
|
|
extern BOOL INTDSSEG fMouseMoved;
|
|
extern BOOL INTDSSEG fEnableInput;
|
|
extern BOOL INTDSSEG fSwapButtons;
|
|
extern BOOL INTDSSEG fQueueDirty;
|
|
extern BOOL INTDSSEG fInScanTimers;
|
|
|
|
extern BYTE INTDSSEG vKeyDown;
|
|
extern BYTE INTDSSEG TimerTable[];
|
|
extern BYTE INTDSSEG rgbAsyncKeyState[];
|
|
|
|
extern BYTE* INTDSSEG TimerTableMax;
|
|
|
|
extern char INTDSSEG szDivZero[];
|
|
extern char INTDSSEG szNull[];
|
|
extern char INTDSSEG szSysError[];
|
|
|
|
|
|
extern DWORD INTDSSEG tSysTimer;
|
|
|
|
#ifdef DOS30
|
|
extern INTDSSEGPROC INTDSSEG lpSysProc;
|
|
#endif
|
|
|
|
extern HANDLE INTDSSEG hSysTimer;
|
|
|
|
extern TIMERINFO INTDSSEG timerInfo;
|
|
|
|
extern WORD __WinFlags;
|
|
#define WinFlags ((WORD)(&__WinFlags))
|
|
|
|
// Input globals
|
|
|
|
#ifdef DISABLE
|
|
extern WORD modeInput;
|
|
#endif
|
|
|
|
extern HQ INTDSSEG hqSysLock; /* HQ of guy who is looking at current event */
|
|
extern WORD INTDSSEG idSysLock; /* Msg ID of event that is locking sys queue */
|
|
extern POINT INTDSSEG ptTrueCursor;
|
|
extern POINT INTDSSEG ptCursor;
|
|
extern RECT INTDSSEG rcCursorClip;
|
|
|
|
extern WORD INTDSSEG MouseSpeed;
|
|
extern WORD INTDSSEG MouseThresh1;
|
|
extern WORD INTDSSEG MouseThresh2;
|
|
extern WORD INTDSSEG cMsgRsrv;
|
|
extern WORD INTDSSEG x_mickey_rate;
|
|
extern WORD INTDSSEG y_mickey_rate;
|
|
extern WORD INTDSSEG cur_x_mickey;
|
|
extern WORD INTDSSEG cur_y_mickey;
|
|
extern WORD INTDSSEG cxScreenCS;
|
|
extern WORD INTDSSEG cyScreenCS;
|
|
extern WORD INTDSSEG cQEntries;
|
|
extern WORD INTDSSEG dtSysTimer;
|
|
|
|
extern DWORD INTDSSEG dtJournal;
|
|
extern WORD INTDSSEG msgJournal;
|
|
extern BOOL INTDSSEG fJournalPlayback;
|
|
|
|
extern WORD INTDSSEG rgMsgUpDowns[];
|
|
extern DWORD INTDSSEG lpMouseStack;
|
|
extern LPVOID INTDSSEG prevSSSP;
|
|
extern BYTE INTDSSEG nestCount;
|
|
|
|
extern WORD INTDSSEG cHotKeyHooks;
|
|
|
|
extern HQ INTDSSEG hqActive;
|
|
extern HQ INTDSSEG hqList;
|
|
extern HQ INTDSSEG hqCursor;
|
|
extern HQ INTDSSEG hqSysQueue;
|
|
extern HQ INTDSSEG hqSysModal;
|
|
extern HQ INTDSSEG hqMouse;
|
|
extern HQ INTDSSEG hqKeyboard;
|
|
extern HQ INTDSSEG hqCapture;
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* */
|
|
/* Assembly Function Declarations */
|
|
/* */
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
#ifdef WOWEDIT
|
|
void FAR LCopyStruct(CONST VOID FAR* lpSrc, LPVOID lpDest, WORD cb);
|
|
#else
|
|
/*
|
|
why is this required? Its here for the intrinsic pragma
|
|
to recognize memcpy ... jonle on a saturday!
|
|
*/
|
|
#ifndef WOWDBG
|
|
LPVOID memcpy(LPVOID lpDst, LPVOID lpSrc, int cb);
|
|
#endif
|
|
|
|
#pragma intrinsic(memcpy)
|
|
#define LCopyStruct(s,d,n) memcpy((LPVOID)(d),(LPVOID)(s),(int)(n))
|
|
#endif
|
|
WORD FAR GetAppVer(void);
|
|
|
|
#ifndef MSDWP
|
|
|
|
/* Suppport routines for separate segment stuff. */
|
|
#undef min
|
|
#undef max
|
|
#define min(a, b) ((int)(a) < (int)(b) ? (int)(a) : (int)(b))
|
|
#define max(a, b) ((int)(a) > (int)(b) ? (int)(a) : (int)(b))
|
|
#define umin(a, b) ((unsigned)(a) < (unsigned)(b) ? (unsigned)(a) : (unsigned)(b))
|
|
#define umax(a, b) ((unsigned)(a) > (unsigned)(b) ? (unsigned)(a) : (unsigned)(b))
|
|
|
|
int FAR MultDiv(WORD a, WORD b, WORD c);
|
|
void FAR LFillStruct(LPVOID, WORD, WORD);
|
|
HDC FAR GetClientDc(void);
|
|
HQ FAR HqCurrent(void);
|
|
BOOL FAR ActivateWindow(HWND, WORD);
|
|
|
|
BOOL CheckHwndFilter(HWND, HWND);
|
|
BOOL CheckMsgFilter(WORD, WORD, WORD);
|
|
BOOL WriteMessage(HQ, LONG, WORD, WORD, HWND, DWORD);
|
|
BOOL ReceiveMessage(VOID);
|
|
VOID FlushSentMessages(VOID);
|
|
LPSTR WINAPI lstrcpyn(LPSTR, LPCSTR, int);
|
|
|
|
#define PSTextOut(a, b, c, d, e) TextOut(a, b, c, d, e)
|
|
#define PSGetTextExtent(a, b, c) GetTextExtent(a, b, c)
|
|
#define PSFillRect(a, b, c) FillRect(a, b, c)
|
|
#define PSInvertRect(a, b) InvertRect(a, b)
|
|
WORD FAR GetNextSysMsg(WORD, INTERNALSYSMSG FAR *);
|
|
void FAR SkipSysMsg(SYSMSG FAR *, BOOL);
|
|
|
|
void TransferWakeBit(WORD);
|
|
void ClearWakeBit(WORD, BOOL);
|
|
void SetWakeBit(HQ, WORD);
|
|
void FAR FarSetWakeBit(HQ, WORD);
|
|
void FAR InitSysQueue(void);
|
|
BOOL FAR CreateQueue(int);
|
|
void DeleteQueue(void);
|
|
void SuspendTask(void);
|
|
void ReleaseTask(void);
|
|
|
|
void FAR GlobalInitAtom(void);
|
|
|
|
void MoveRect(LONG);
|
|
void SizeRect(LONG);
|
|
|
|
BOOL FAR SysHasKanji(void);
|
|
|
|
void FAR SetDivZero(void);
|
|
|
|
int FAR FindCharPosition(LPCSTR, char);
|
|
|
|
void FAR OEMSetCursor(LPSTR);
|
|
void FAR SetFMouseMoved(void);
|
|
BOOL AttachDC(HWND);
|
|
BOOL LastApplication(void);
|
|
void CheckCursor(HWND);
|
|
void FAR IncPaintCount(HWND);
|
|
void FAR DecPaintCount(HWND);
|
|
void FAR DeleteProperties(HWND);
|
|
void FAR DestroyTimers(HQ, HWND);
|
|
|
|
int FAR InquireSystem(int, int);
|
|
int FAR EnableKeyboard(FARPROC, LPSTR);
|
|
int FAR InquireKeyboard(LPSTR);
|
|
void FAR DisableKeyboard(void);
|
|
int FAR EnableMouse(FARPROC);
|
|
int FAR InquireMouse(LPSTR);
|
|
void FAR DisableMouse(void);
|
|
int FAR InquireCursor(LPSTR);
|
|
void FAR EnableSystemTimers(void);
|
|
void FAR DisableSystemTimers(void);
|
|
void FAR CreateSystemTimer(int, TIMERPROC);
|
|
WORD FAR SetSystemTimer(HWND, int, int, TIMERPROC);
|
|
BOOL FAR KillSystemTimer(HWND, int);
|
|
|
|
void FAR CrunchX2(CURSORSHAPE FAR *, CURSORSHAPE FAR *, int, int);
|
|
void FAR CrunchY(CURSORSHAPE FAR *, CURSORSHAPE FAR *, int, int, int);
|
|
|
|
void FAR MenuBarDraw(HWND hwnd, HDC hdc, int cxFrame, int cyFrame);
|
|
|
|
BOOL FAR ReadMessage(HQ, LPMSG, HWND, WORD, WORD, BOOL);
|
|
|
|
int GetCurrentDrive(void);
|
|
int GetCurrentDirectory(LPSTR, int);
|
|
int SetCurrentDrive(int);
|
|
int SetCurrentDirectory(LPCSTR);
|
|
BOOL FFirst(LPSTR, LPSTR, WORD);
|
|
BOOL FNext(LPSTR, WORD);
|
|
|
|
FAR DestroyAllWindows(void);
|
|
|
|
BOOL FAR LockWindowVerChk(HWND);
|
|
|
|
#ifndef NOFASTFRAME
|
|
void FAR SplitRectangle(LPRECT, LPRECT, int, int); /* WinRect.asm */
|
|
#endif
|
|
|
|
#endif /* MSDWP */
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* */
|
|
/* Internal Function Declarations */
|
|
/* */
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
#ifndef MSDWP
|
|
|
|
LRESULT CALLBACK ButtonWndProc(HWND hwnd, WORD message, WPARAM wParam, LPARAM lParam);
|
|
LRESULT CALLBACK StaticWndProc(HWND hwnd, WORD message, WPARAM wParam, LPARAM lParam);
|
|
LRESULT CALLBACK TitleWndProc(HWND hwnd, WORD message, WPARAM wParam, LPARAM lParam);
|
|
LRESULT CALLBACK SwitchWndProc(HWND hwnd, WORD message, WPARAM wParam, LPARAM lParam);
|
|
LRESULT CALLBACK DesktopWndProc(HWND hwndIcon, WORD message, WPARAM wParam, LPARAM lParam);
|
|
LRESULT CALLBACK MenuWindowProc(HWND hwnd, WORD message, WPARAM wParam, LPARAM lParam);
|
|
LRESULT FAR EditWndProc(HWND hwnd, WORD message, WPARAM wParam, LPARAM lParam);
|
|
LRESULT CALLBACK LBoxCtlWndProc(HWND hwnd, WORD message, WPARAM wParam, LPARAM lParam);
|
|
LRESULT CALLBACK ComboBoxCtlWndProc(HWND hwnd, WORD message, WPARAM wParam, LPARAM lParam);
|
|
LRESULT CALLBACK SBWndProc(PSB psb, WORD message, WPARAM wParam, LPARAM lParam);
|
|
LRESULT CALLBACK MDIClientWndProc(HWND hwnd, WORD message, WPARAM wParam, LPARAM lParam);
|
|
|
|
void FAR SkipSM2(void);
|
|
HWND FAR GetFirstTab(HWND hwnd);
|
|
CONST BYTE FAR* SkipSz(CONST BYTE FAR *lpsz);
|
|
void FAR DlgSetFocus(HWND hwnd);
|
|
HWND FAR PrevChild(HWND hwndDlg, HWND hwnd);
|
|
HWND FAR NextChild(HWND hwndDlg, HWND hwnd);
|
|
HWND FAR GetFirstLevelChild(HWND hwndDlg, HWND hwndLevel);
|
|
void FAR CheckDefPushButton(HWND hwndDlg, HWND hwndOldFocus, HWND hwndNewFocus);
|
|
HWND FAR GotoNextMnem(HWND hwndDlg, HWND hwndStart, char ch);
|
|
int FAR FindMnemChar(LPSTR lpstr, char ch, BOOL fFirst, BOOL fPrefix);
|
|
int FAR FindNextValidMenuItem(PMENU pMenu, int i, int dir, BOOL fHelp);
|
|
BOOL CALLBACK MenuPrint(HDC hdc, LPARAM lParam, int cch);
|
|
int FAR MenuBarCompute(HMENU hMenu, HWND hwndNotify, int yMenuTop, int xMenuLeft, int cxMax);
|
|
HMENU CALLBACK LookupMenuHandle(HMENU hMenu, WORD cmd);
|
|
BOOL CALLBACK StaticPrint(HDC hdc, LPRECT lprc, HWND hwnd);
|
|
|
|
HICON FAR ColorToMonoIcon(HICON);
|
|
HGLOBAL CALLBACK LoadCursorIconHandler(HGLOBAL hRes, HINSTANCE hResFile, HRSRC hResIndex);
|
|
HGLOBAL CALLBACK LoadDIBCursorHandler(HGLOBAL hRes, HINSTANCE hResFile, HRSRC hResIndex);
|
|
HGLOBAL CALLBACK LoadDIBIconHandler(HGLOBAL hRes, HINSTANCE hResFile, HRSRC hResIndex);
|
|
void CallOEMCursor(void);
|
|
void FAR DestroyClipBoardData(void);
|
|
BOOL FAR SendClipboardMessage(int message);
|
|
void FAR DrawClipboard(void);
|
|
PCLIP FAR FindClipFormat(WORD format);
|
|
BOOL IsDummyTextHandle(PCLIP pClip);
|
|
HANDLE InternalSetClipboardData(WORD format, HANDLE hData);
|
|
|
|
PPCLS FAR GetClassPtr(LPCSTR lpszClassName, HINSTANCE hInstance, BOOL fUserModule);
|
|
PPCLS GetClassPtrASM(ATOM, HMODULE, BOOL);
|
|
void FAR DelWinClass(PPCLS ppcls);
|
|
|
|
VOID CALLBACK CaretBlinkProc(HWND hwnd, WORD message, WORD id, DWORD time);
|
|
void FAR InternalHideCaret(void);
|
|
void FAR InternalShowCaret(void);
|
|
void FAR InternalDestroyCaret(void);
|
|
HDC FAR GetScreenDC(void);
|
|
PBWL FAR BuildHwndList(HWND hwnd, int flags);
|
|
void FAR FreeHwndList(PBWL pbwl);
|
|
void CALLBACK DrawFrame(HDC hdc, LPRECT lprect, int clFrame, int cmd);
|
|
void FAR RedrawFrame(HWND hwnd);
|
|
void FAR BltColor(HDC, HBRUSH, HDC, int, int, int, int, int, int, BOOL);
|
|
void FAR EnableInput(void);
|
|
void FAR DisableInput(void);
|
|
void FAR CopyKeyState(void);
|
|
void CALLBACK EnableOEMLayer(void);
|
|
void CALLBACK DisableOEMLayer(void);
|
|
void FAR ColorInit(void);
|
|
BOOL FAR SetKeyboardSpeed(BOOL fInquire);
|
|
void FAR InitBorderSysMetrics(void);
|
|
void FAR InitSizeBorderDimensions(void);
|
|
void FAR SetMinMaxInfo(void);
|
|
|
|
// Returns TRUE if a GetDC() will return an empty visrgn or not
|
|
// (doesn't take into account being clipped away; just checks WFVISIBE
|
|
// and WFMINIMIZED)
|
|
//
|
|
BOOL FAR IsVisible(HWND hwnd, BOOL fClient);
|
|
|
|
// Returns TRUE if hwndChild == hwndParent or is one of its children.
|
|
//
|
|
BOOL FAR IsDescendant(HWND hwndParent, HWND hwndChild);
|
|
|
|
void FAR SetRedraw(HWND hwnd, BOOL fRedraw);
|
|
HBRUSH CALLBACK GetControlColor(HWND hwndParent, HWND hwndCtl, HDC hdc, WORD type);
|
|
HBRUSH CALLBACK GetControlBrush(HWND hwnd, HDC hdc, WORD type);
|
|
void FAR StoreMessage(LPMSG lpMsg, HWND hwnd, WORD message, WPARAM wParam, LPARAM lParam, DWORD time);
|
|
LONG FAR GetPrefixCount(LPCSTR lpstr, int cch, LPSTR lpstrCopy, int copycount);
|
|
void FAR PSMTextOut(HDC hdc, int xLeft, int yTop, LPCSTR lpsz, int cch);
|
|
DWORD FAR PSMGetTextExtent(HDC hdc, LPCSTR lpstr, int cch);
|
|
HWND FAR GetTopLevelTiled(HWND hwnd);
|
|
BOOL FAR TrueIconic(HWND hwnd);
|
|
void FAR ChangeToCurrentTask(HWND hwnd1, HWND hwnd2);
|
|
|
|
HWND FAR GetLastTopMostWindow(void);
|
|
void FAR SendSizeMessage(HWND hwnd, WORD cmdSize);
|
|
HWND FAR NextTopWindow(HWND hwnd, HWND hwndSkip, BOOL fPrev, BOOL fDisabled);
|
|
|
|
void FAR DisableVKD(BOOL fDisable);
|
|
void FAR CheckFocus(HWND hwnd);
|
|
BOOL CALLBACK FChildVisible(HWND hwnd);
|
|
#define InternalGetClientRect(hwnd, lprc) CopyRect(lprc, &hwnd->rcClient)
|
|
void FAR CheckByteAlign(HWND hwnd, LPRECT lprc);
|
|
void FAR CancelMode(HWND hwnd);
|
|
void FAR RedrawIconTitle(HWND hwnd);
|
|
void FAR DisplayIconicWindow(HWND hwnd, BOOL fActivate, BOOL fShow);
|
|
DWORD FAR GetIconTitleSize(HWND hwnd);
|
|
BOOL FAR SendZoom(HWND hwnd, LPARAM lParam);
|
|
BOOL CALLBACK DestroyTaskWindowsEnum(HWND hwnd, LPARAM lParam);
|
|
void CALLBACK LockMyTask(BOOL fLock);
|
|
void CALLBACK RepaintScreen(void);
|
|
HANDLE FAR BcastCopyString(LPARAM lParam);
|
|
BOOL CALLBACK SignalProc(HTASK hTask, WORD message, WPARAM wParam, LPARAM lParam);
|
|
BOOL CALLBACK NewSignalProc(HTASK hTask, WORD message, WPARAM wParam, LPARAM lParam);
|
|
HWND FAR GetWindowCreator(HWND hwnd);
|
|
|
|
void FAR InitSendValidateMinMaxInfo(HWND hwnd);
|
|
void FAR DrawDragRect(LPRECT lprc, WORD flags);
|
|
void FAR MoveSize(HWND hwnd, WORD cmdMove);
|
|
BYTE FAR SetClrWindowFlag(HWND hwnd, WORD style, BYTE cmd);
|
|
void FAR ParkIcon(HWND hwnd, CHECKPOINT * pcp);
|
|
void FAR ShowOwnedWindows(HWND hwndOwner, WORD cmdShow);
|
|
HWND FAR MinMaximize(HWND hwnd, WORD cmd, BOOL fKeepHidden);
|
|
void FAR SetTiledRect(HWND hwnd, LPRECT lprc);
|
|
#endif // MSDWP
|
|
void FAR AdjustSize(HWND hwnd, LPINT lpcx, LPINT lpcy);
|
|
#ifndef MSDWP
|
|
|
|
void FAR NextWindow(WORD flags);
|
|
void FAR DoScroll(HWND hwnd, HWND hwndNotify, int cmd, int pos, BOOL fVert);
|
|
void CALLBACK ContScroll(HWND hwnd, WORD message, WORD id, DWORD time);
|
|
void FAR MoveThumb(HWND hwnd, int px, BOOL fCancel);
|
|
void FAR SBTrackInit(HWND hwnd, LPARAM lParam, int curArea);
|
|
void FAR DrawSize(HWND hwnd, HDC hdc, int cxFrame, int cyFrame, BOOL fBorder);
|
|
void FAR CalcSBStuff(HWND hwnd, BOOL fVert);
|
|
WORD GetWndSBDisableFlags(HWND, BOOL);
|
|
void FreeWindow(HWND hwnd);
|
|
void FAR DestroyTaskWindows(HQ hq);
|
|
BOOL FAR TrackInitSize(HWND hwnd, WORD message, WPARAM wParam, LPARAM lParam);
|
|
void FAR DrawPushButton(HDC hdc, LPRECT lprc, WORD style, BOOL fInvert, HBRUSH hbrBtn, HWND hwnd);
|
|
void FAR DrawBtnText(HDC hdc, HWND hwnd, BOOL dbt, BOOL fDepress);
|
|
void FAR Capture(HWND hwnd, int code);
|
|
int FAR SystoChar(WORD message, LPARAM lParam);
|
|
void FAR LinkWindow(HWND, HWND, HWND *);
|
|
void FAR UnlinkWindow(HWND, HWND *);
|
|
void FAR DrawScrollBar(HWND hwnd, HDC hdc, BOOL fVert);
|
|
void CALLBACK PaintRect(HWND hwndBrush, HWND hwndPaint, HDC hdc, HBRUSH hbr, LPRECT lprc);
|
|
|
|
BOOL FAR SetDeskPattern(LPSTR);
|
|
BOOL FAR SetDeskWallpaper(LPSTR);
|
|
void FAR SetGridGranularity(WORD);
|
|
|
|
int FAR GetAveCharWidth(HDC);
|
|
#ifndef NOTEXTMETRIC
|
|
int FAR GetCharDimensions(HDC, TEXTMETRIC FAR *);
|
|
#endif
|
|
|
|
BOOL FAR LW_ReloadLangDriver(LPSTR);
|
|
HBRUSH FAR GetSysClrObject(int);
|
|
int API SysErrorBox(LPCSTR lpszText, LPCSTR lpszCaption, unsigned int btn1, unsigned int btn2, unsigned int btn3);
|
|
BOOL FAR SnapWindow(HWND hwnd);
|
|
WORD FAR MB_FindLongestString(void);
|
|
#ifdef FASTFRAME
|
|
HBITMAP FAR CreateCaptionBitmaps(void);
|
|
HBITMAP FAR CreateBorderVertBitmaps(BOOL fDlgFrame);
|
|
HBITMAP FAR CreateBorderHorzBitmaps(BOOL fDlgFrame);
|
|
void FAR GetCaptionBitmapsInfo(FRAMEBITMAP Caption[], HBITMAP hBitmap);
|
|
void FAR GetHorzBitmapsInfo(FRAMEBITMAP Bitmap[], BOOL fDlgFrame, HBITMAP hBitmap);
|
|
void FAR GetVertBitmapsInfo(FRAMEBITMAP Bitmap[], BOOL fDlgFrame, HBITMAP hBitmap);
|
|
BOOL FAR DrawIntoCaptionBitmaps(HDC hdc,HBITMAP hBitmap, FRAMEBITMAP FrameInfo[], BOOL fActive);
|
|
BOOL FAR DrawIntoHorzBitmaps(HDC hdc, HBITMAP hBitmap, FRAMEBITMAP FrameInfoH[], BOOL fActive, BOOL fDlgFrame);
|
|
BOOL FAR DrawIntoVertBitmaps(HDC hdc, HBITMAP hBitmap, FRAMEBITMAP FrameInfoH[], FRAMEBITMAP FrameInfoV[], BOOL fActive, BOOL fDlgFrame);
|
|
BOOL FAR RecreateFrameBitmaps(void);
|
|
void FAR DeleteFrameBitmaps(int, int);
|
|
BOOL FAR PASCAL UpdateFrameBitmaps(WORD wColorFlags);
|
|
BOOL FAR PASCAL RecolorFrameBitmaps(WORD wColorFlags);
|
|
#endif /* FASTFRAME */
|
|
|
|
void PostButtonUp(WORD msg);
|
|
|
|
#endif /* MSDWP */
|
|
|
|
|
|
void CALLBACK EndMenu(void);
|
|
void CALLBACK FillWindow(HWND hwndBrush, HWND hwndPaint, HDC hdc, HBRUSH hbr);
|
|
void FAR SysCommand(HWND hwnd, int cmd, LPARAM lParam);
|
|
void FAR HandleNCMouseGuys(HWND hwnd, WORD message, int htArea, LPARAM lParam);
|
|
void FAR EndScroll(HWND hwnd, BOOL fCancel);
|
|
HWND FAR GetTopLevelWindow(HWND hwnd);
|
|
void FAR RedrawIconTitle(HWND hwnd);
|
|
int FAR FindNCHit(HWND hwnd, LONG lPt);
|
|
void FAR CalcClientRect(HWND hwnd, LPRECT lprc);
|
|
BOOL FAR DepressTitleButton(HWND hwnd, RECT rcCapt, RECT rcInvert, WORD hit);
|
|
void FAR SetSysMenu(HWND hwnd);
|
|
HMENU FAR GetSysMenuHandle(HWND hwnd);
|
|
int *FAR InitPwSB(HWND hwnd);
|
|
BOOL FAR DefSetText(HWND hwnd, LPCSTR lpsz);
|
|
void FAR DrawWindowFrame(HWND hwnd, HRGN hrgnClip);
|
|
void FAR ShowIconTitle(HWND hwnd, BOOL fShow);
|
|
HBRUSH FAR GetBackBrush(HWND hwnd);
|
|
BOOL FAR IsSystemFont(HDC);
|
|
BOOL FAR IsSysFontAndDefaultMode(HDC);
|
|
VOID FAR DiagOutput(LPCSTR);
|
|
VOID FAR UserDiagOutput(int, LPCSTR);
|
|
#define UDO_INIT 0
|
|
#define UDO_INITDONE 1
|
|
#define UDO_STATUS 2
|
|
|
|
|
|
HANDLE FAR TextAlloc(LPCSTR);
|
|
HANDLE FAR TextFree(HANDLE);
|
|
WORD FAR TextCopy(HANDLE, LPSTR, WORD);
|
|
#define TextPointer(h) (LPSTR)MAKELP(hWinAtom, h)
|
|
|
|
BOOL CALLBACK FARValidatePointer(LPVOID);
|
|
|
|
// GDI exports
|
|
#ifdef DEBUG
|
|
VOID CALLBACK SetObjectOwner(HGDIOBJ, HINSTANCE);
|
|
#else
|
|
#define SetObjectOwner(d1, d2)
|
|
#endif
|
|
BOOL CALLBACK MakeObjectPrivate(HGDIOBJ, BOOL);
|
|
VOID CALLBACK GDITaskTermination(HTASK);
|
|
VOID CALLBACK RealizeDefaultPalette(HDC);
|
|
|
|
// Internal functions called directly by debug version to
|
|
// prevent validation errors
|
|
//
|
|
#ifdef DEBUG
|
|
HDC API IGetDCEx(register HWND hwnd, HRGN hrgnClip, DWORD flags);
|
|
BOOL API IGrayString(HDC, HBRUSH, GRAYSTRINGPROC, LPARAM, int, int, int, int, int);
|
|
BOOL API IRedrawWindow(HWND hwnd, CONST RECT FAR* lprcUpdate, HRGN hrgnUpdate, WORD flags);
|
|
int API IScrollWindowEx(HWND hwnd, int dx, int dy,
|
|
CONST RECT FAR* prcScroll, CONST RECT FAR* prcClip,
|
|
HRGN hrgnUpdate, RECT FAR* prcUpdate, WORD flags);
|
|
#endif
|
|
|
|
#ifdef DBCS_IME
|
|
#define WM_IMECONTROL WM_USER
|
|
void FAR InitIME(void); // wmcaret.c
|
|
BOOL _loadds FAR EnableIME( HWND, BOOL ); // wmcaret.c
|
|
VOID API SetImeBoundingRect(HWND, DWORD, LPRECT); // wmcaret.c
|
|
BOOL API ControlIME(HWND, BOOL); // wmcaret.c
|
|
HANDLE API SetFontForIME(HWND, HANDLE); // wmcaret.c
|
|
VOID API ControlCaretIme(BOOL); // wmcaret.c
|
|
BOOL API EatString(HWND, LPSTR, WORD); // editec.c
|
|
VOID API CheckKatanaInstalled(HWND); // wmcaret.c
|
|
#endif
|
|
|
|
#ifdef JAPAN
|
|
// Save time of WM_LBUTTONDOWN and WM_LBUTTONUP, used to decided
|
|
// whether to lock large popup menus that cover the static portion
|
|
// of the menu...
|
|
extern int fLongPMenu;
|
|
extern DWORD lbuttondown_time;
|
|
#endif
|
|
|
|
/****************************************************************************
|
|
|
|
debugging support
|
|
|
|
****************************************************************************/
|
|
|
|
#ifdef DEBUG
|
|
|
|
extern void cdecl dDbgOut(int iLevel, LPSTR lpszFormat, ...);
|
|
extern void cdecl dDbgAssert(LPSTR exp, LPSTR file, int line);
|
|
|
|
DWORD __dwEval;
|
|
|
|
#define dprintf dDbgOut
|
|
|
|
#define WinAssert(exp) \
|
|
((exp) ? (void)0 : dDbgAssert(#exp, __FILE__, __LINE__))
|
|
#define WinEval(exp) \
|
|
((__dwEval=(DWORD)(LPVOID)(exp)) ? (void)0 : dDbgAssert(#exp, __FILE__, __LINE__), __dwEval)
|
|
|
|
#else
|
|
|
|
#define dprintf /##/
|
|
// #define dprintf if (0) ((int (*)(char *, ...)) 0)
|
|
|
|
#define WinAssert(exp) 0
|
|
#define WinEval(exp) (exp)
|
|
|
|
#endif
|