Files
harbour-core/harbour/contrib/gtwvg/gtwvg.h
Przemyslaw Czerpak 93d3a46d84 2012-04-20 17:52 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
* harbour/include/hbdefs.h
    * moved HB_WCHAR definition from hbapicdp.h to hbdefs.h

  * harbour/include/hbapicdp.h
  * harbour/include/hbcdpreg.h
  * harbour/src/rtl/cdpapi.c
  * harbour/src/rtl/cdpapihb.c
    + added support for custom sorting redirected from HVM
    + added support for custom character indexes in strings
    + added support for custom character flags (upper, lower, alpha, digit)
    + added support for custom upper/lower conversions
    + added support for CPs using unicode character values instead of
      ASCII ones
    + added new CP functions which respects custom CP settings:
        hb_cdpUpperWC(), hb_cdpTextLen(), hb_cdpTextPos(),
        hb_cdpTextPosEx(), hb_cdpTextGetU16(), hb_cdpTextPutU16(),
        hb_cdpCharEq(), hb_cdpCharCaseEq()
    + added new conversion functions:
        hb_cdpGetUC(), hb_cdpGetWC(), hb_cdpGetU16Ctrl()
    + added macros to detect codepage parameters:
         HB_CDP_ISBINSORT() - codepage uses simple binary sorting
         HB_CDP_ISCUSTOM()  - codepage uses custom string decoding
         HB_CDP_ISCHARIDX() - codepage use character indexes instead
                              of bytes ones
         HB_CDP_ISCHARUNI() - CHR(), ASC() and similar functions operates
                              on Unicode values instead of bytes
         HB_CDP_ISUTF8()    - codepage uses UTF-8 encoding

  * harbour/include/inkey.ch
    - removed HB_INKEY_EXTENDED - it was not used in Harbour
    + added new flag HB_INKEY_EXT - it allows to used different
      event encoding system with automatic translation to
      standard Clipper values. It will be used in the future
      as base for low level GTs code. Now it's possible to
      selectively switch to the new system. New codes are
      unique and do not interacts with Clipper.
    + added HB_INKEY_ALL macro - it's similar to INKEY_ALL but
      enables also GTEVENT keys.

  * harbour/include/hbgtcore.h
  * harbour/src/rtl/hbgtcore.c
    * changed character values in internal screen buffer to unicode.
      Warning: this modification interacts with SAVESCREE()/RESTSCREEN()
               data. Now all GTs uses extended definition. If somene
               has code which needs VGA like screen buffers returned
               by SAVESCREE() then it can be forced by
                  hb_gtInfo( HB_GTI_COMPATBUFFER, .t. )
               Anyhow it will for to use only one CP in output.
    + added new GT methods which operated on HB_WCHAR values
    * modified existing methods using HB_WCHAR/HB_USHORT parameters
      to operate on HB_WCHAR values
    + added codepage conversion code directly to core code so it can
      be eliminated from low level GT drivers which do not need some
      special operations on it.
    + added support for extended inkey codes, they allow to encoded
      unicode values, mouse events with flags, keyboard events with
      modifier flags (shift,alt,ctrl,...), etc.
      Now in low level GT code only unicode key values are used but
      I plan to updated all GTs and switch to new code - it should
      resolve many small problems inheriting with Clipper inkey codes.

  * harbour/include/hbapifs.h
    * moved hb_fsNameConvU16() definition from hbapicdp.h to hbapifs.h

  * harbour/include/hbxvm.h
    - removed comment copied by mistake from GT header file

  * harbour/include/hbwinuni.h
    * changed HB_CHARDUP() and HB_CHARDUPN() macros - now they
      operate on functions which can be used without active HVM.
      In such case ANSI CP is used as source encoding.
    + added new macros: HB_OSSTRDUP() and HB_OSSTRDUP2().
      They make conversions from OS encoding to HVM one.
      They can be used without active HVM and in such case ANSI CP
      is used as destination encoding.

  * harbour/include/hbapi.h
  * harbour/src/vm/cmdarg.c
    + added new function hb_cmdargProgName()
      It returns application name with path or NULL if not set,
      caller must free returned value with hb_xfree() if not NULL.
      The string is in HVM encoding so it does not need any additional
      encodings.
    * modified hb_cmdargString() to return strings in HVM encoding.
    % some small code optimizations
    ; NOTE: parameters passed to MS-WINDOWS GUI programs which use
            WinMain() instead of main() as startup entry are translated
            to ANSICP before they can be accessed by application.
            This can be eliminated though not for console programs
            using where C compiler makes such translation to main()
            parameters.
            in all systems parameters are passed to application
            startup and init functions before programmer can set OS CP.
            This can be resolved by adding:
               INIT PROC CLIPINIT()
                  SET( _SET_CODEPAGE, <userCP> )
                  SET( _SET_OSCODEPAGE, <systemCP> )
               RETURN
            to linked code. INIT procedures called CLIPINIT() are
            executed before any other ones.

  * harbour/include/hbapi.h
  * harbour/src/vm/set.c
    + added new functions for CP converisons which can be used with
      and without active HVM:
         hb_osStrEncode(), hb_osStrEncodeN(),
         hb_osStrDecode(), hb_osStrDecode2(),
         hb_osStrU16Encode(), hb_osStrU16EncodeN(),
         hb_osStrU16Decode(), hb_osStrU16Decode2(),

  * harbour/include/hbvm.h
  * harbour/src/vm/hvm.c
    + added new function hb_vmIsReady() - it's similar to hb_vmActive()
      but it also checks if current thread has active HVM stack.
    * moved hb_cdpReleaseAll() to the end of HVM cleanup code so
      CP conversions are longer active.

  * harbour/include/hbcomp.h
  * harbour/src/compiler/cmdcheck.c
  * harbour/src/compiler/hbusage.c
  * harbour/src/common/expropt2.c
    + added new compiler switch:
         -ku  - strings in user encoding
      Now it informs compiler that strings use custom encoding so some
      optimizations which are byte oriented cannot be used.
      It's possible that in the future we will change above definition
      to sth like: "strings in UTF8 encoding" but now I would like to
      keep more general.

  * harbour/src/vm/macro.c
    * inform macrocompiler about custom CPs using own character indexes
      to disable byte oriented optimizations.

  * harbour/include/hbapigt.h
  * harbour/src/rtl/gtapi.c
  * harbour/src/rtl/inkeyapi.c
    + added HB_B_*_W macros with unicode box character definitions
    + added HB_MBUTTON_* macros
    + added new GT functions: hb_gtHostCP() and hb_gtBoxCP() which
      allows to extract CPs used in translations by GTs.
    + added new function hb_inkeyKeyString() - it converts inkey value
      to corresponding string
    + added new function hb_inkeyKeyStd() - it converts new extended
      key value to standard Clipper one.

  * harbour/include/hbapifs.h
  * harbour/src/common/hbffind.c
    * moved OS codepage translations fully to hb_fsFind*() functions.
      It fixes few problems which existed before, i.e. double CP
      conversions in MS-Windows builds and simplifies upper level code.

  * harbour/src/pp/hbpp.c
  * harbour/src/rtl/direct.c
  * harbour/src/rtl/fssize.c
  * harbour/src/rtl/file.c
  * harbour/contrib/hbct/files.c
    * eliminated not longer necessary CP conversions in code calling
      hb_fsFind*() functions.

  * harbour/src/common/hbgete.c
    * moved OS codepage translations to hb_getenv(), hb_getenv_buffer()
      and hb_setenv() functions. It fixes few problems which existed
      before, i.e. double CP conversions in MS-Windows builds and
      simplifies upper level code.

  * harbour/src/rtl/net.c
  * harbour/src/rtl/gete.c
    * eliminated not longer necessary CP conversions in code calling
      hb_getenv()/hb_setenv() functions.
    ; NOTE: additional parameters in HB_GETENV() and HB_SETENV() which
            disabled CP conversions are not longer supported.
            They were strictly platform dependent and ignored in chosen
            cases (i.e. in MS-Windows UNICODE builds we always have to
            convert strings transferred between HVM and OS. If someone
            needs old functionality for other platform then he should
            temporary disable _SET_OSCODEPAGE.

  * harbour/src/common/hbver.c
  * harbour/src/common/hbfsapi.c
  * harbour/src/rtl/fstemp.c
  * harbour/src/rtl/fslink.c
    * eliminated HB_TCHAR_*() macros

  * harbour/src/common/strwild.c
    + added supprot for custom CPs using own character indexes in:
         hb_strMatchWild(),
         hb_strMatchWildExact(),
         hb_strMatchCaseWildExact()

  * harbour/src/nortl/nortl.c
    + added new dummy function replacement for binaries which are not
      linked with HVM.

  * harbour/src/rtl/filesys.c
    ! fixed double CP conversions in MS-Windows builds of hb_fsCurDirBuff()
    * use hb_vmIsReady() instead of hb_stackId() in file name conversions.
    * use hb_cmdargProgName() in hb_fsBaseDirBuff()

  * harbour/src/rtl/philes.c
    * use hb_cmdargProgName() in HB_PROGNAME() function.

  * harbour/src/rtl/gtcgi/gtcgi.c
  * harbour/src/rtl/gtstd/gtstd.c
  * harbour/src/rtl/gtpca/gtpca.c
  * harbour/src/rtl/gtdos/gtdos.c
  * harbour/src/rtl/gtos2/gtos2.c
  * harbour/src/rtl/gtwin/gtwin.c
  * harbour/src/rtl/gtwvt/gtwvt.h
  * harbour/src/rtl/gtwvt/gtwvt.c
  * harbour/src/rtl/gttrm/gttrm.c
  * harbour/src/rtl/gtcrs/gtcrs.c
  * harbour/src/rtl/gtsln/gtsln.c
  * harbour/src/rtl/gtsln/kbsln.c
  * harbour/src/rtl/gtsln/gtsln.h
  * harbour/src/rtl/gtxwc/gtxwc.h
  * harbour/src/rtl/gtxwc/gtxwc.c
  * harbour/contrib/gtwvg/gtwvg.c
  * harbour/contrib/gtwvg/gtwvg.h
  * harbour/contrib/gtalleg/gtalleg.c
  * harbour/contrib/hbqt/gtqtc/gtqtc.cpp
  * harbour/contrib/hbqt/gtqtc/gtqtc.h
    * updated to work with new unicode GT API
      please make tests with different GTs - I'm not able to test
      all of them, i.e. I do not have any OS2 machine.

  * harbour/src/rtl/box.c
  * harbour/src/rtl/oldbox.c
  * harbour/src/rtl/scroll.c
  * harbour/src/rtl/console.c
    * updated to work with new unicode GT API and
      CPs using custom character indexes

  * harbour/src/rtl/at.c
  * harbour/src/rtl/ati.c
  * harbour/src/rtl/rat.c
  * harbour/src/rtl/len.c
  * harbour/src/rtl/transfrm.c
  * harbour/src/rtl/left.c
  * harbour/src/rtl/right.c
  * harbour/src/rtl/substr.c
  * harbour/src/rtl/stuff.c
  * harbour/src/rtl/padc.c
  * harbour/src/rtl/padl.c
  * harbour/src/rtl/padr.c
    * updated to work with CPs using custom character indexes

  * harbour/src/rtl/chrasc.c
    + added support for HB_CDP_ISCHARUNI() CPs.

  * harbour/src/rtl/mlcfunc.c
    * rewritten from scratch to work with CPs using custom character
      indexes

  * harbour/src/rtl/accept.c
    * updated to work with unicode inkey values and
      CPs using custom character indexes

  * harbour/src/rtl/strmatch.c
    % small optimization

  * harbour/src/rtl/Makefile
  + harbour/src/rtl/chruni.c
    + added new PRG functions which allows to make byte/binary and
      unicode/character operations on strings:
         HB_UCHAR( <nCode> ) -> <cText>
            return string with U+nCode character in HVM CP encoding
         HB_BCHAR( <nCode> ) -> <cText>
            return 1 byte string with <nCode> value
         HB_UCODE( <cText> ) -> <nCode>
            return unicode value of 1-st character (not byte) in given string
         HB_BCODE( <cText> ) -> <nCode>
            return value of 1-st byte in given string
         HB_ULEN( <cText> ) -> <nChars>
            return string length in characters
         HB_BLEN( <cText> ) -> <nBytes>
            return string length in bytes
         HB_UPEEK( <cText>, <n> ) -> <nCode>
            return unicode value of <n>-th character in given string
         HB_BPEEK( <cText>, <n> ) -> <nCode>
            return value of <n>-th byte in given string
         HB_UPOKE( [@]<cText>, <n>, <nVal> ) -> <cText>
            change <n>-th character in given string to unicode <nVal> one and
            return modified text
         HB_BPOKE( [@]<cText>, <n>, <nVal> ) -> <cText>
            change <n>-th byte in given string to <nVal> and return modified
            text

  * harbour/src/rtl/hbdoc.prg
  * harbour/src/rtl/memvarhb.prg
    * use HB_BCHAR() for binary string definitions

  * harbour/src/rtl/hbi18n2.prg
    * use hb_utf8CHR( 0xFEFF ) instead of hardcoded binary sting and
      HB_BLEN() instead of LEN()

  * harbour/src/rtl/inkey.c
    + added new functions:
         HB_KEYCHAR( <nKey> ) -> <cChar>
         HB_KEYSTD( <nExtKey> ) -> <nClipKey>
    ! use HB_INKEY_ALL instead of INKEY_ALL in LASTKEY()

  * harbour/src/rtl/achoice.prg
  * harbour/src/rtl/browse.prg
  * harbour/src/rtl/menuto.prg
  * harbour/src/rtl/tgetlist.prg
  * harbour/src/rtl/teditor.prg
  * harbour/src/rtl/tlabel.prg
  * harbour/src/rtl/tpopup.prg
  * harbour/src/rtl/radiobtn.prg
  * harbour/src/rtl/radiogrp.prg
  * harbour/src/rtl/wait.prg
    * updated to work with unicode inkey() values

  * harbour/src/rtl/listbox.prg
    * use box.ch macros instead of explicit CHR(...) definitions

  * harbour/src/rtl/ttopbar.prg
    * updated to work with different type of CPs

  * harbour/src/rtl/scrollbr.prg
    * formatting

  * harbour/src/rtl/mouse53.c
    * use HB_MBUTTON_* macros instead of local ones

  * harbour/src/codepage/cp_utf8.c
  + harbour/src/codepage/uc16def.c
  + harbour/src/codepage/utf8sort.c
    * replaced UTF8ASC with new CP: UTF8EX
      This CP uses character indexes instead of bytes one
      and operates on unicode characters flags.
      Tables for upper/lower conversions and upper/lower/alpha/digit
      flags were generated automatically from
         http://www.unicode.org/Public/UNIDATA/UnicodeData.txt
      It also uses custom collation rules. It's very simple one
      level sorting based on UTF8 C collation.
      If someone needs some advanced sorting rules, then it's enough
      to create copy of this cp with user custom version of UTF8_cmp()
      and UTF8_cmpi() functions, i.e. they can be redirected to some
      external library like ICU (icu-project.org).

  * harbour/contrib/hbct/ctwin.c
  * harbour/contrib/hbct/ctwin.h
  * harbour/contrib/hbct/ctwfunc.c
    * added support for new unicode GT API

  * harbour/contrib/xhb/xhbfunc.c
    * redirected HB_CMDARGARGV() to HB_PROGNAME()

  * harbour/contrib/hbnf/origin.c
    * redirected FT_ORIGIN() to HB_PROGNAME()

  * harbour/contrib/hbnf/getenvrn.c
    ! windows version of FT_GETE() fully rewritten - it should
      fix well known problems reported to the devel list. Please test.
    % small optimization for other systems

  * harbour/contrib/hbfship/exec.c
    * use hb_cmdargProgName() in EXECNAME()

  + harbour/tests/uc16_gen.prg
    + added code which generates tables with unicode character flags
      from http://www.unicode.org/Public/UNIDATA/UnicodeData.txt.
      harbour/src/codepage/uc16def.c was generated by this code.

  * harbour/tests/inkeytst.prg
  * harbour/tests/wvtext.prg
  * harbour/tests/gtkeys.prg
    * use HB_INKEY_ALL

  * harbour/include/harbour.hbx
  * harbour/include/hbcpage.hbx
  * harbour/include/hblang.hbx
    * regenerated

   ; It was quite big peace of modifications and for sure not everything
     is well tested so please make test and report problems you will find.
   ; This is basic version which introduce to HVM CPs with custom encodings.
     Some contrib code has to be updated to work correctly with it.
     I hope that developers interesting in will make necessary updates.
     I haven't touched GTWVW code at all - sorry but it needs very serious
     work to make it production ready and fix all existing problems.
   ; Special thanks to OTC - this firm sponsored adding basic UTF8 support
     to HVM.
2012-04-20 15:55:44 +00:00

611 lines
24 KiB
C

/*
* $Id$
*/
/*
* Harbour Project source code:
* 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
* www - http://harbour-project.org
*
* 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 software; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
*
* 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_WVT_H_
#define HB_WVT_H_
#define HB_GT_NAME WVG
#ifndef _WIN32_IE
#ifdef __MINGW32__
#include <_mingw.h>
#endif
#ifndef __MINGW64_VERSION_MAJOR
#define _WIN32_IE 0x0500
#endif
#endif /* _WIN32_IE */
#ifndef WINVER
#define WINVER 0x0500
#endif /* WINVER */
#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"
#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>
#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 1024
#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 10
#endif
#define WVT_DEFAULT_FONT_NAME TEXT( "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 LIGHT_GRAY RGB( 0xC6,0xC6,0xC6 )
#define 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 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
{
int iTop;
int iLeft;
int iBottom;
int iRight;
} HB_GOBJ_OFFSET ;
typedef struct _tag_GOBJS
{
int iObjType;
int iHandle;
int iState;
int iTop;
int iLeft;
int iBottom;
int iRight;
HB_GOBJ_OFFSET aOffset;
int iHeight;
int iWidth; /* iThick */
int iOrient;
int iAlign;
int iAlignVert;
int iFormat;
int iStyle; /* iShape */
int iData; /* iSlot, etc */
COLORREF crRGB;
COLORREF crRGBText;
COLORREF crRGBBk;
HFONT hFont;
HPEN hPen;
HBRUSH hBrush;
#if ! defined( HB_OS_WIN_CE )
IPicture * iPicture;
#endif
HB_BOOL bDestroyFont;
HB_BOOL bDestroyPen;
HB_BOOL bDestroyBrush;
HB_BOOL bDestroyPicture;
TRIVERTEX vert[ 2 ];
void * hText;
LPCTSTR lpText;
PHB_ITEM bBlock;
struct _tag_GOBJS * gObjNext;
} HB_GOBJS, * PHB_GOBJS;
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
{
HPEN penWhite; /* White pen to draw GDI elements */
HPEN penBlack; /* Black pen to draw GDI elements */
HPEN penWhiteDim; /* White dim pen to draw GDI elements */
HPEN penDarkGray; /* Dark gray pen to draw GDI elements */
HPEN penGray; /* Gray pen equivilant to Clipper White */
HPEN penNull; /* Null pen */
HBRUSH diagonalBrush; /* Handle to diaoganl brush to draw scrollbars */
HBRUSH solidBrush; /* Handle to solid brush */
HBRUSH whiteBrush; /* Wvt specific White colored brush */
#if ! defined( HB_OS_WIN_CE )
IPicture *iPicture[ WVT_PICTURES_MAX ]; /* Array to hold the Picture Streams to avoid recurring loading and unloading */
#endif
HFONT hUserFonts[ WVT_FONTS_MAX ]; /* User defined font handles */
HPEN hUserPens[ WVT_PENS_MAX ]; /* User defined pens */
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. */
} HB_GUIDATA, * PHB_GUIDATA;
typedef struct
{
PHB_GT pGT; /* core GT pointer */
int iHandle; /* window number */
HINSTANCE hInstance; /* parent window instance */
int iCmdShow;
int ROWS; /* number of displayable rows in window */
int COLS; /* number of displayable columns in window */
COLORREF COLORS[ 16 ]; /* colors */
HB_BOOL CaretExist; /* HB_TRUE if a caret has been created */
HB_BOOL CaretHidden; /* HB_TRUE if a caret has been hiden */
int CaretSize; /* Height of solid caret */
int CaretWidth; /* Width of solid caret */
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; /* HB_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 */
TCHAR fontFace[ LF_FACESIZE ]; /* requested font face name LF_FACESIZE #defined in wingdi.h */
HFONT hFont; /* current font handle */
#if ! defined( UNICODE )
HFONT hFontBox; /* current font handle to draw lines */
#endif
HWND hWnd; /* the window handle */
HB_BOOL fInit; /* logical variable indicating that window should be open */
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 */
#if ! defined( UNICODE )
int boxCodePage; /* Code page to use for display draw line characters */
#endif
HB_BOOL Win9X; /* Flag to say if running on Win9X not NT/2000/XP */
HB_BOOL AltF4Close; /* Can use Alt+F4 to close application */
HB_BOOL CentreWindow; /* True if window is to be Reset into centre of window */
HB_BOOL IgnoreWM_SYSCHAR;
HB_BOOL bMaximized; /* Flag is set when window has been maximized */
HB_BOOL bBeingMarked; /* Flag to control DOS window like copy operation */
HB_BOOL bBeginMarked;
HB_BOOL bResizable;
HB_BOOL bMaximizable;
HB_BOOL bSelectCopy;
void * hSelectCopy;
LPCTSTR lpSelectCopy;
HB_BOOL bClosable;
HB_BOOL bFullScreen;
HB_BOOL bAltEnter; /* Can use Alt+Enter to enter full screen mode */
int MarginTop;
int MarginLeft;
int ResizeMode; /* Sets the resizing mode either to FONT or ROWS */
RECT sRectNew;
RECT sRectOld;
/* 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 */
HDC hdc; /* Handle to Windows Device Context */
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 bGui;
HDC hGuiDC;
HBITMAP hGuiBmp;
int iGuiWidth;
int iGuiHeight;
HB_BOOL bPaint;
HB_BOOL bGetFocus;
HB_BOOL bSetFocus;
HB_BOOL bKillFocus;
PHB_DYNS pSymWVT_PAINT; /* Stores pointer to WVT_PAINT function */
PHB_DYNS pSymWVT_SETFOCUS; /* Stores pointer to WVT_SETFOCUS function */
PHB_DYNS pSymWVT_KILLFOCUS; /* Stores pointer to WVT_KILLFOCUS function */
PHB_DYNS pSymWVT_MOUSE; /* Stores pointer to WVT_MOUSE function */
PHB_DYNS pSymWVT_TIMER; /* Stores pointer to WVT_TIMER function */
PHB_DYNS pSymWVT_KEY;
HPEN currentPen; /* Handle to current pen settable at runtime */
HBRUSH currentBrush; /* Handle to current brush settable by runtime */
PHB_GUIDATA pGUI; /* GUI Data Structure */
HMENU hPopup; /* Handle of context menu invokable with right click */
HWND hWndTT; /* Handle to hold tooltip information */
HB_BOOL bToolTipActive; /* Flag to set whether tooltip is active or not */
HWND hDlgModeless[ WVT_DLGML_MAX ]; /* Handle to a modeless dialog */
PHB_ITEM pFunc[ WVT_DLGML_MAX ]; /* Function pointer for WndProc */
/* TODO: pcbFunc is redundant and should be removed */
PHB_ITEM pcbFunc[ WVT_DLGML_MAX ]; /*codeblock for WndProc */
int iType[ WVT_DLGML_MAX ]; /* Type of Function Pointers - Function 1, Block 2, Method 3 */
HWND hDlgModal[ WVT_DLGMD_MAX ]; /* Handle to a modeless dialog */
PHB_ITEM pFuncModal[ WVT_DLGMD_MAX ]; /* Function pointer for WndProc */
/* TODO: pcbFuncModal is redundant and should be removed */
PHB_ITEM pcbFuncModal[ WVT_DLGMD_MAX ]; /* codeblock for WndProc */
int iTypeModal[ WVT_DLGMD_MAX ]; /* Type of Function Pointers - Function 1, Block 2, Method 3 */
PHB_GT_PARAMS pPP; /* Presentation Parameters */
HB_BOOL bDeferPaint; /* To create pure Windows dialogs */
HB_BOOL bTracking; /* To track if mouse has eneter or left the window area */
HB_BOOL bResizing; /* To know when it is in resizing mode */
PHB_GOBJS gObjs; /* Graphic Objects */
HWND hWndParent; /* Parent Window Handle, if any */
PHB_ITEM pNotifierGUI; /* Notifier to Wvg*Parts if embedded into a GT Window */
} 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
#ifndef TVIS_EXPANDPARTIAL
#define TVIS_EXPANDPARTIAL 0x0080
#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
#ifndef WM_ENTERSIZEMOVE
# define WM_ENTERSIZEMOVE 561
#endif
#ifndef WM_EXITSIZEMOVE
# define WM_EXITSIZEMOVE 562
#endif
#ifndef SWP_DEFERERASE
# define SWP_DEFERERASE 0x2000
#endif
#ifndef SW_NORMAL
# define SW_NORMAL 1
#endif
#ifndef SC_MAXIMIZE
# define SC_MAXIMIZE 0xF030
#endif
#if defined( HB_OS_WIN_CE ) && !defined( __MINGW32CE__ )
BOOL SetMenu( HWND hWnd, HMENU hMenu );
HMENU GetMenu( HWND hWnd );
#define LR_LOADMAP3DCOLORS 0
#define SWP_NOREDRAW 0
#endif
extern HB_EXPORT POINT hb_wvt_gtGetXYFromColRow( int col, int row );
#if ! defined( HB_OS_WIN_CE )
extern HB_EXPORT IPicture * hb_wvt_gtLoadPicture( LPCTSTR image );
extern HB_EXPORT IPicture * hb_wvt_gtLoadPictureFromResource( LPCTSTR resource, LPCTSTR section );
extern HB_EXPORT HB_BOOL hb_wvt_gtRenderPicture( int x1, int y1, int wd, int ht, IPicture * iPicture );
extern HB_EXPORT HB_BOOL hb_wvt_gtDestroyPicture( IPicture * iPicture );
#endif
extern HB_EXPORT HB_BOOL hb_wvt_DrawImage( HDC hdc, int x1, int y1, int wd, int ht, LPCTSTR image );
extern HB_EXPORT void hb_wvt_GetStringAttrib( int top, int left, int bottom, int right, HB_BYTE * sBuffer, HB_BYTE * sAttrib );
extern HB_EXPORT void hb_wvt_PutStringAttrib( int top, int left, int bottom, int right, HB_BYTE * sBuffer, HB_BYTE * sAttrib );
extern HB_EXPORT LPWORD lpwAlign( LPWORD lpIn );
extern HB_EXPORT int nCopyAnsiToWideChar( LPWORD lpWCStr, LPCSTR lpAnsiIn );
extern HB_EXPORT BOOL CALLBACK hb_wvt_gtDlgProcMLess( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam );
extern HB_EXPORT BOOL CALLBACK hb_wvt_gtDlgProcModal( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam );
extern HB_EXPORT void hb_wvt_wvtCore( void );
extern HB_EXPORT void hb_wvt_wvtUtils( void );
extern HB_EXPORT PHB_GTWVT hb_wvt_gtGetWVT( void );
extern HB_EXPORT void hb_gt_wvt_PaintGObjects( PHB_GTWVT pWVT, RECT *uRect );
/*----------------------------------------------------------------------*/
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 );
HB_EXTERN_END
#endif /* HB_WVT_H_ */