* *
* partial sync with the 3.4 fork codebase. These are the things
synces for the most part:
- copyright headers
- grammar/typos in comments and some readmes
- comment/whitespace/decorations
- variable scoping in C files
- DO CASE/SWITCH and some other alternate syntax usage
- minimal amount of human readable text in strings
- minor code updates
- HB_TRACE() void * casts for pointers and few other changes to
avoid C compiler warnings
- various other, minor code cleanups
- only Harbour/C code/headers were touched in src, utils, contrib,
include. No 3rd party code, no make files, and with just a few
exceptions, no 'tests' code was touched.
- certain components were not touched were 3.4 diverged too much
already, like f.e. hbmk2, hbssl, hbcurl, hbexpat
- the goal was that no actual program logic should be altered by
these changes. Except some possible minor exceptions, any such
change is probably a bug in this patch.
It's a massive patch, if you find anything broken after it, please
open an Issue with the details. Build test was done on macOS.
The goal is make it easier to see what actual code/logic was changed
in 3.4 compared to 3.2 and to make patches easier to apply in both
ways.
427 lines
14 KiB
C
427 lines
14 KiB
C
/*
|
|
* Header File for Video subsystem for Windows using GUI windows instead of Console
|
|
*
|
|
* Copyright 2003 Peter Rees <peter@rees.co.nz> Rees Software & Systems Ltd
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2, or (at your option)
|
|
* any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; see the file LICENSE.txt. If not, write to
|
|
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
* Boston, MA 02110-1301 USA (or visit https://www.gnu.org/licenses/).
|
|
*
|
|
* As a special exception, the Harbour Project gives permission for
|
|
* additional uses of the text contained in its release of Harbour.
|
|
*
|
|
* The exception is that, if you link the Harbour libraries with other
|
|
* files to produce an executable, this does not by itself cause the
|
|
* resulting executable to be covered by the GNU General Public License.
|
|
* Your use of that executable is in no way restricted on account of
|
|
* linking the Harbour library code into it.
|
|
*
|
|
* This exception does not however invalidate any other reasons why
|
|
* the executable file might be covered by the GNU General Public License.
|
|
*
|
|
* This exception applies only to the code released by the Harbour
|
|
* Project under the name Harbour. If you copy code from other
|
|
* Harbour Project or Free Software Foundation releases into a copy of
|
|
* Harbour, as the General Public License permits, the exception does
|
|
* not apply to the code that you add in this way. To avoid misleading
|
|
* anyone as to the status of such modified files, you must delete
|
|
* this exception notice from them.
|
|
*
|
|
* If you write modifications of your own for Harbour, it is your choice
|
|
* whether to permit this exception to apply to your modifications.
|
|
* If you do not wish that, delete this exception notice.
|
|
*
|
|
*/
|
|
|
|
#ifndef HB_WGU_H_
|
|
#define HB_WGU_H_
|
|
|
|
#define HB_GT_NAME WGU
|
|
|
|
/*-*/
|
|
|
|
#ifndef _WIN32_IE
|
|
#ifdef __MINGW32__
|
|
#include <_mingw.h>
|
|
#endif
|
|
#ifndef __MINGW64_VERSION_MAJOR
|
|
#define _WIN32_IE 0x0500
|
|
#endif
|
|
#endif
|
|
|
|
/*-*/
|
|
|
|
#include <windows.h>
|
|
#include <winuser.h>
|
|
#include <commctrl.h>
|
|
#if ! defined( HB_OS_WIN_CE )
|
|
#include <ole2.h>
|
|
#include <olectl.h>
|
|
#include <ocidl.h>
|
|
#endif
|
|
#include <commdlg.h>
|
|
#include <shellapi.h>
|
|
|
|
#include "hbset.h"
|
|
#include "hbgtcore.h"
|
|
#include "hbinit.h"
|
|
#include "hbapicdp.h"
|
|
#include "hbapierr.h"
|
|
#include "hbapiitm.h"
|
|
#include "inkey.ch"
|
|
#include "error.ch"
|
|
#include "hbvm.h"
|
|
#include "hbthread.h"
|
|
#include "hbgfxdef.ch"
|
|
#include "hbwinuni.h"
|
|
|
|
#include "hbgtwvg.ch"
|
|
|
|
#if defined( HB_OS_WIN_CE )
|
|
#include "hbwince.h"
|
|
#endif
|
|
|
|
HB_EXTERN_BEGIN
|
|
|
|
/*-*/
|
|
|
|
#define WVT_CHAR_QUEUE_SIZE 128
|
|
#define WVT_MAX_TITLE_SIZE 128
|
|
#define WVT_MAX_ROWS 256
|
|
#define WVT_MAX_COLS 512
|
|
#define WVT_MAX_WINDOWS 256
|
|
#if defined( HB_OS_WIN_CE )
|
|
# define WVT_DEFAULT_ROWS 15
|
|
# define WVT_DEFAULT_COLS 50
|
|
# define WVT_DEFAULT_FONT_HEIGHT 12
|
|
# define WVT_DEFAULT_FONT_WIDTH 8
|
|
#else
|
|
# define WVT_DEFAULT_ROWS 25
|
|
# define WVT_DEFAULT_COLS 80
|
|
# define WVT_DEFAULT_FONT_HEIGHT 16
|
|
# define WVT_DEFAULT_FONT_WIDTH 8
|
|
#endif
|
|
#define WVT_DEFAULT_FONT_NAME "Courier New"
|
|
|
|
#define BLACK RGB( 0x0 ,0x0 ,0x0 )
|
|
#define BLUE RGB( 0x0 ,0x0 ,0x85 )
|
|
#define GREEN RGB( 0x0 ,0x85,0x0 )
|
|
#define CYAN RGB( 0x0 ,0x85,0x85 )
|
|
#define RED RGB( 0x85,0x0 ,0x0 )
|
|
#define MAGENTA RGB( 0x85,0x0 ,0x85 )
|
|
#define BROWN RGB( 0x85,0x85,0x0 )
|
|
#define WHITE RGB( 0xC6,0xC6,0xC6 )
|
|
#define LIGHT_GRAY RGB( 0x60,0x60,0x60 )
|
|
#define BRIGHT_BLUE RGB( 0x00,0x00,0xFF )
|
|
#define BRIGHT_GREEN RGB( 0x60,0xFF,0x60 )
|
|
#define BRIGHT_CYAN RGB( 0x60,0xFF,0xFF )
|
|
#define BRIGHT_RED RGB( 0xF8,0x00,0x26 )
|
|
#define BRIGHT_MAGENTA RGB( 0xFF,0x60,0xFF )
|
|
#define YELLOW RGB( 0xFF,0xFF,0x00 )
|
|
#define BRIGHT_WHITE RGB( 0xFF,0xFF,0xFF )
|
|
|
|
#define WM_MY_UPDATE_CARET ( WM_USER + 0x0101 )
|
|
|
|
#define SYS_EV_MARK 1000
|
|
#define HB_MSG_NOTIFYICON ( WM_USER+1399 )
|
|
#define HB_ID_NOTIFYICON 99
|
|
|
|
/*-*/
|
|
#define WVT_PICTURES_MAX 50
|
|
#define WVT_FONTS_MAX 50
|
|
#define WVT_PENS_MAX 50
|
|
#define WVT_DLGML_MAX 50
|
|
#define WVT_DLGMD_MAX 50
|
|
/*-*/
|
|
|
|
#if defined( __DMC__ )
|
|
#if ( _WIN32_IE >= 0x0300 )
|
|
#if ! defined( ICC_BAR_CLASSES )
|
|
#define ICC_BAR_CLASSES 0x00000004
|
|
#endif
|
|
#if ! defined( COLOR16 )
|
|
typedef USHORT COLOR16;
|
|
#endif
|
|
#if ! defined( TRIVERTEX )
|
|
typedef struct _TRIVERTEX
|
|
{
|
|
LONG x;
|
|
LONG y;
|
|
COLOR16 Red;
|
|
COLOR16 Green;
|
|
COLOR16 Blue;
|
|
COLOR16 Alpha;
|
|
} TRIVERTEX, * PTRIVERTEX, * LPTRIVERTEX;
|
|
#endif
|
|
#if ! defined( INITCOMMONCONTROLSEX )
|
|
typedef struct tagINITCOMMONCONTROLSEX
|
|
{
|
|
DWORD dwSize; /* size of this structure */
|
|
DWORD dwICC; /* flags indicating which classes to be initialized */
|
|
} INITCOMMONCONTROLSEX, * LPINITCOMMONCONTROLSEX;
|
|
#endif
|
|
#if ! defined( InitCommonControlsEx )
|
|
WINCOMMCTRLAPI BOOL WINAPI InitCommonControlsEx( LPINITCOMMONCONTROLSEX );
|
|
#endif
|
|
#endif
|
|
|
|
typedef struct _GRADIENT_RECT
|
|
{
|
|
ULONG UpperLeft;
|
|
ULONG LowerRight;
|
|
} GRADIENT_RECT, * PGRADIENT_RECT, * LPGRADIENT_RECT;
|
|
|
|
#ifndef TTM_SETTIPBKCOLOR
|
|
#define TTM_SETTIPBKCOLOR ( WM_USER + 19 )
|
|
#endif
|
|
#ifndef TTM_SETTIPTEXTCOLOR
|
|
#define TTM_SETTIPTEXTCOLOR ( WM_USER + 20 )
|
|
#endif
|
|
#ifndef TTM_GETTIPBKCOLOR
|
|
#define TTM_GETTIPBKCOLOR ( WM_USER + 22 )
|
|
#endif
|
|
#ifndef TTM_GETTIPTEXTCOLOR
|
|
#define TTM_GETTIPTEXTCOLOR ( WM_USER + 23 )
|
|
#endif
|
|
#ifndef TTM_SETMAXTIPWIDTH
|
|
#define TTM_SETMAXTIPWIDTH ( WM_USER + 24 )
|
|
#endif
|
|
#ifndef TTM_GETMAXTIPWIDTH
|
|
#define TTM_GETMAXTIPWIDTH ( WM_USER + 25 )
|
|
#endif
|
|
#ifndef TTM_SETMARGIN
|
|
#define TTM_SETMARGIN ( WM_USER + 26 )
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#if defined( __BORLANDC__ ) && ( __BORLANDC__ == 0x0550 )
|
|
#ifdef __cplusplus
|
|
extern "C" { STDAPI OleLoadPicture( LPSTREAM, LONG, BOOL, REFIID, PVOID * ); }
|
|
#else
|
|
#if ! defined( HB_OS_WIN_CE )
|
|
STDAPI OleLoadPicture( LPSTREAM, LONG, BOOL, REFIID, PVOID * );
|
|
#endif
|
|
#endif
|
|
#endif
|
|
|
|
/*-*/
|
|
|
|
typedef BOOL ( WINAPI * wvtGradientFill ) (
|
|
HDC hdc,
|
|
PTRIVERTEX pVertex,
|
|
ULONG dwNumVertex,
|
|
PVOID pMesh,
|
|
ULONG dwNumMesh,
|
|
ULONG dwMode );
|
|
|
|
typedef BOOL ( WINAPI * wvtSetLayeredWindowAttributes )(
|
|
HWND hwnd,
|
|
COLORREF crKey,
|
|
BYTE bAlpha,
|
|
DWORD dwFlags );
|
|
|
|
/*-*/
|
|
|
|
typedef struct
|
|
{
|
|
DWORD exStyle;
|
|
DWORD style;
|
|
int x;
|
|
int y;
|
|
int width;
|
|
int height;
|
|
PHB_ITEM pParentGT;
|
|
HB_BOOL bVisible;
|
|
HB_BOOL bRowCols;
|
|
HB_BOOL bConfigured;
|
|
int iWndType;
|
|
} HB_GT_PARAMS, * PHB_GT_PARAMS;
|
|
|
|
typedef struct
|
|
{
|
|
PHB_GT pGT; /* core GT pointer */
|
|
int iHandle; /* window number */
|
|
|
|
HINSTANCE hInstance;
|
|
int iCmdShow;
|
|
|
|
int ROWS; /* number of displayable rows in window */
|
|
int COLS; /* number of displayable columns in window */
|
|
|
|
POINT MousePos; /* the last mouse position */
|
|
HB_BOOL MouseMove; /* Flag to say whether to return mouse movement events */
|
|
|
|
int Keys[ WVT_CHAR_QUEUE_SIZE ]; /* Array to hold the characters & events */
|
|
int keyPointerIn; /* Offset into key array for character to be placed */
|
|
int keyPointerOut; /* Offset into key array of next character to read */
|
|
int keyLast; /* last inkey code value in buffer */
|
|
|
|
POINT PTEXTSIZE; /* size of the fixed width font */
|
|
HB_BOOL FixedFont; /* TRUE if current font is a fixed font */
|
|
int FixedSize[ WVT_MAX_COLS ]; /* buffer for ExtTextOut() to emulate fixed pitch when Proportional font selected */
|
|
int fontHeight; /* requested font height */
|
|
int fontWidth; /* requested font width */
|
|
int fontWeight; /* Bold level */
|
|
int fontQuality; /* requested font quality */
|
|
char fontFace[ LF_FACESIZE ]; /* requested font face name LF_FACESIZE #defined in wingdi.h */
|
|
HFONT hFont; /* current font handle */
|
|
|
|
HWND hWnd; /* the window handle */
|
|
HB_BOOL fInit; /* logical variable indicating that window should be open */
|
|
|
|
PHB_CODEPAGE hostCDP; /* Host/HVM CodePage for unicode output translations */
|
|
PHB_CODEPAGE inCDP; /* Host/HVM CodePage for unicode input translations */
|
|
#if ! defined( UNICODE )
|
|
BYTE keyTransTbl[ 256 ];
|
|
BYTE chrTransTbl[ 256 ];
|
|
#endif
|
|
|
|
HICON hIcon; /* Title Bar and Task List icon. Can be NULL. */
|
|
HB_BOOL bIconToFree; /* Do we need to free this icon when it's not NULL? */
|
|
|
|
void * hWindowTitle;
|
|
LPCTSTR lpWindowTitle;
|
|
|
|
int CodePage; /* Code page to use for display characters */
|
|
HB_BOOL Win9X; /* Flag to say if running on Win9X not NT/2000/XP */
|
|
HB_BOOL CentreWindow; /* True if window is to be Reset into centre of window */
|
|
|
|
HB_BOOL IgnoreWM_SYSCHAR;
|
|
|
|
HB_BOOL bResizable;
|
|
HB_BOOL bClosable;
|
|
|
|
/* To Be Split in 2 Structures <1 GUI dynamic> <2 GUI fixed> */
|
|
|
|
int rowStart; /* Holds nTop of last WM_PAINT rectangle returned by wvt_GetPaintRect() */
|
|
int rowStop; /* Holds nBottom of last WM_PAINT rectangle */
|
|
int colStart; /* Holds nLeft of last WM_PAINT rectangle */
|
|
int colStop; /* Holds nRight of last WM_PAINT rectangle */
|
|
|
|
int iFactor; /* Transparency factor 0~255 */
|
|
|
|
int LastMenuEvent; /* Last menu item selected */
|
|
int MenuKeyEvent; /* User definable event number for windows menu command */
|
|
HB_BOOL InvalidateWindow; /* Flag for controlling whether to use ScrollWindowEx() */
|
|
HB_BOOL EnableShortCuts; /* Determines whether ALT key enables menu or system menu */
|
|
|
|
HB_BOOL bPaint;
|
|
HB_BOOL bGetFocus;
|
|
HB_BOOL bSetFocus;
|
|
HB_BOOL bKillFocus;
|
|
|
|
HINSTANCE hMSImg32; /* Handle to the loaded library msimg32.dll */
|
|
wvtGradientFill pfnGF; /* Pointer to Address of the GradientFill function in MSImg32.dll */
|
|
HINSTANCE hUser32; /* Handle to the loaded library user32.dll */
|
|
wvtSetLayeredWindowAttributes pfnLayered;/* Pointer to set Windows attribute - transparency. */
|
|
|
|
PHB_GT_PARAMS pPP; /* Presentation Parameters */
|
|
|
|
HB_BOOL bTracking; /* To track if mouse has entered or left the window area */
|
|
HB_BOOL bResizing; /* To know when it is in resizing mode */
|
|
int width;
|
|
int height;
|
|
|
|
} HB_GTWVT, * PHB_GTWVT;
|
|
|
|
/*-*/
|
|
|
|
#ifndef INVALID_FILE_SIZE
|
|
#define INVALID_FILE_SIZE ( DWORD ) 0xFFFFFFFF
|
|
#endif
|
|
|
|
#ifndef CC_ANYCOLOR
|
|
#define CC_ANYCOLOR 0x00000100
|
|
#endif
|
|
|
|
#ifndef IDC_HAND
|
|
#define IDC_HAND MAKEINTRESOURCE( 32649 )
|
|
#endif
|
|
|
|
#ifndef GRADIENT_FILL_RECT_H
|
|
#define GRADIENT_FILL_RECT_H 0x00
|
|
#endif
|
|
|
|
#ifndef GCLP_HCURSOR
|
|
#define GCLP_HCURSOR ( -12 )
|
|
#endif
|
|
|
|
/*-*/
|
|
|
|
typedef enum
|
|
{
|
|
GTO_POINT = 0,
|
|
GTO_LINE = 1,
|
|
GTO_SQUARE = 3,
|
|
GTO_RECTANGLE = 4,
|
|
GTO_CIRCLE = 5,
|
|
GTO_DISK = 7,
|
|
/* TODO: add other types */
|
|
GTO_TEXT = 100,
|
|
} HB_gt_object_enum;
|
|
|
|
/* Event subsystem */
|
|
|
|
typedef enum
|
|
{
|
|
GTEVENT_RESIZE = 0,
|
|
GTEVENT_CLOSE = 1,
|
|
GTEVENT_ICONIZE = 2,
|
|
GTEVENT_MAXH = 3,
|
|
GTEVENT_MAXV = 4,
|
|
GTEVENT_MAXIMIZE = 5,
|
|
GTEVENT_DEICONIZE = 6,
|
|
GTEVENT_SHUTDOWN = 7
|
|
} HB_gt_event_enum;
|
|
|
|
/*-*/
|
|
|
|
/* xHarbour compatible definitions */
|
|
#if ! defined( K_SH_LEFT )
|
|
#define K_SH_LEFT K_LEFT /* Shift-Left == Left */
|
|
#define K_SH_UP K_UP /* Shift-Up == Up */
|
|
#define K_SH_RIGHT K_RIGHT /* Shift-Right == Right */
|
|
#define K_SH_DOWN K_DOWN /* Shift-Down == Down */
|
|
#define K_SH_INS K_INS /* Shift-Ins == Ins */
|
|
#define K_SH_DEL K_DEL /* Shift-Del == Del */
|
|
#define K_SH_HOME K_HOME /* Shift-Home == Home */
|
|
#define K_SH_END K_END /* Shift-End == End */
|
|
#define K_SH_PGUP K_PGUP /* Shift-PgUp == PgUp */
|
|
#define K_SH_PGDN K_PGDN /* Shift-PgDn == PgDn */
|
|
#define K_SH_RETURN K_RETURN /* Shift-Enter == Enter */
|
|
#define K_SH_ENTER K_ENTER /* Shift-Enter == Enter */
|
|
#endif
|
|
|
|
#ifndef WM_MOUSEWHEEL
|
|
# define WM_MOUSEWHEEL 0x020A
|
|
#endif
|
|
|
|
/*-*/
|
|
#if 0
|
|
extern HB_BOOL wvt_Array2Rect( PHB_ITEM aRect, RECT * rc );
|
|
extern PHB_ITEM wvt_Rect2Array( RECT * rc );
|
|
extern HB_BOOL wvt_Array2Point( PHB_ITEM aPoint, POINT * pt );
|
|
extern PHB_ITEM wvt_Point2Array( POINT * pt );
|
|
extern HB_BOOL wvt_Array2Size( PHB_ITEM aSize, SIZE * siz );
|
|
extern PHB_ITEM wvt_Size2Array( SIZE * siz );
|
|
extern void wvt_Rect2ArrayEx( RECT * rc, PHB_ITEM aRect );
|
|
extern void wvt_Point2ArrayEx( POINT * pt, PHB_ITEM aPoint);
|
|
extern void wvt_Size2ArrayEx( SIZE * siz, PHB_ITEM aSize );
|
|
#endif
|
|
|
|
HB_EXTERN_END
|
|
|
|
#endif /* HB_WGU_H_ */
|