/***************************************************************************/ /* */ /* 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 /* 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 #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