` Printed Icetips Article

Icetips Article



Windows API: Creating unicode strings
2004-03-17 -- Menno De Ruiter
 
Newsgroups: softvelocity.public.clarion6

What you also can do is subclassing the window and write it by Api to the
device context of a window which is more for writing chinese in the unicode (like
character 50392) and so on ...

The unicode should be in a String.. NOT a Cstring in this case due the fact
the chr(0) is used to delimiter the character and thus if it's a cstring it
will not work in case of above char(255).. the unicode byte pairs you
calculate with something like..:


MakeBitS16           PROCEDURE(ULONG GivenValue)
ReturnString         STRING(16)
 code

  ReturnString = '0000000000000000'

  If BAND(GivenValue,1000000000000000b) > 0 then ReturnString[1]  = '1'.
  If BAND(GivenValue,0100000000000000b) > 0 then ReturnString[2]  = '1'.
  If BAND(GivenValue,0010000000000000b) > 0 then ReturnString[3]  = '1'.
  If BAND(GivenValue,0001000000000000b) > 0 then ReturnString[4]  = '1'.
  If BAND(GivenValue,0000100000000000b) > 0 then ReturnString[5]  = '1'.
  If BAND(GivenValue,0000010000000000b) > 0 then ReturnString[6]  = '1'.
  If BAND(GivenValue,0000001000000000b) > 0 then ReturnString[7]  = '1'.
  If BAND(GivenValue,0000000100000000b) > 0 then ReturnString[8]  = '1'.
  If BAND(GivenValue,0000000010000000b) > 0 then ReturnString[9]  = '1'.
  If BAND(GivenValue,0000000001000000b) > 0 then ReturnString[10] = '1'.
  If BAND(GivenValue,0000000000100000b) > 0 then ReturnString[11] = '1'.
  If BAND(GivenValue,0000000000010000b) > 0 then ReturnString[12] = '1'.
  If BAND(GivenValue,0000000000001000b) > 0 then ReturnString[13] = '1'.
  If BAND(GivenValue,0000000000000100b) > 0 then ReturnString[14] = '1'.
  If BAND(GivenValue,0000000000000010b) > 0 then ReturnString[15] = '1'.
  If BAND(GivenValue,0000000000000001b) > 0 then ReturnString[16] = '1'.

  RETURN(ReturnString)


Yhis is what I wrote, but I used winevent from Capesoft for subclassing.

The window:
UnicodeWindow WINDOW,AT(,,211,26),|
              FONT('Arial Unicode MS',8,COLOR:Black,FONT:regular,CHARSET:ANSI),|
              COLOR(COLOR:White), |
              TIMER(1),NOFRAME,MDI
     END


On window open event:

    UNICODEWINDOW{Prop:Pixels} = 1

Timer event : (at least I chained it with a some other global variable with
the unicode in it..)

 Tijd = Clock()
 UNICODEWINDOW{Prop:XPos} = DT_ImageXPOS + 8
 UNICODEWINDOW{Prop:YPos} = DT_ImageYPOS + 4

 UNICODEWINDOW{Prop:Width} = DT_ImageWidth - 16
 UNICODEWINDOW{Prop:Height} = DT_ImageHeight - 8

 If Clip(CurrentUniInBytes) <> Clip(CurrentUnitextLocal)
   CurrentUnitextLocal = Clip(CurrentUniInBytes)
   Do PaintFF_R
   !Post(Event:Paint)
 End

Catching the WM_PAINT on WinAlert Message Processing from winevent template
(capesoft)

  Case winevent()
  Of WM_PAINT
    Do PaintFF_R
  end


The painting on the screen routine :

PaintFF_R       routine

  !winmesevent = WinParam1()
  winmesevent = winevent()
  Keer = Keer + 1

  wHandle = UnicodeWindow{Prop:Handle}
  hWDC    = GetWindowDC(wHandle)

  CurrentUniTextLocal = Left(CurrentUniTextLocal)

  XLF:lfHeight                 = TextHeight
  XLF:lfWidth                  = TextWidth
  XLF:lfEscapement             = 0
  XLF:lfOrientation            = 0
  XLF:lfWeight                 = TextWeight
  XLF:lfItalic                = 0
  XLF:lfUnderline             = 0
  XLF:lfStrikeOut             = 0
  XLF:lfCharSet               = 0
  XLF:lfOutPrecision          = TextOutPercision
  XLF:lfClipPrecision         = 0
  XLF:lfQuality               = 2
  XLF:lfPitchAndFamily        = 2
  XLF:lfFaceName           = 'Arial Unicode MS' !& Chr(0)

  logbrush.lpstyle      = bs_solid
  logbrush.lpcolor      = color:white
  logbrush.lpdummy      = 0
  hbrush = createbrushIndirect(address(logbrush))
  If hbrush
      holdbrush = selectobject(hWDC,hbrush)
  end

  Rectangle(hWDC,1,1,UNICODEWINDOW{Prop:Width},UNICODEWINDOW{Prop:Height})
  SetBkMode(hWDC,color:white)
  SetTextColor(hWDC,color:black)
  hfontD = CreateFontIndirectA(Address(XLOGFONT))
  holdfont#     = selectobject(hWDC,hfontD)
  Textout(hWDC,5,5,Address(CurrentUniTextLocal),CurrentUniLength)
  If holdbrush
    hbrush = selectobject(hWDC,holdbrush)
    If hbrush
        deleteobject(hbrush)
    End
  End
  If holdfont#
    hfont# = selectobject(hWDC,holdfont#)
    deleteobject(hfontD)
  End

  ReleaseDC(wHandle,hWDC)

And forgot the local data to paste :

The local data :

[SCREENCONTROLS]
! PROMPT('Tijd:'),USE(?Tijd:Prompt)
! STRING(@T4_),USE(Tijd)
[REPORTCONTROLS]
! STRING(@T4_),USE(Tijd)
Tijd                     TIME
!!> IDENT(4294966849),PROMPT('Tijd:'),HEADER('Tijd'),PICTURE(@T4_)
[SCREENCONTROLS]
! PROMPT('Current Unitext Local:'),USE(?CurrentUnitextLocal:Prompt)
! ENTRY(@s200),USE(CurrentUnitextLocal)
[REPORTCONTROLS]
! STRING(@s200),USE(CurrentUnitextLocal)
CurrentUnitextLocal      STRING(200)
!!> IDENT(4294966848),PROMPT('Current Unitext Local:'),HEADER('Current
Unitext Local'),PICTURE(@s200)
[SCREENCONTROLS]
! PROMPT('Paints:'),USE(?Paints:Prompt)
! ENTRY(@n13),USE(Paints)
[REPORTCONTROLS]
! STRING(@n13),USE(Paints)
Paints                   ULONG
!!> IDENT(4294966847),PROMPT('Paints:'),HEADER('Paints'),PICTURE(@n13)
[SCREENCONTROLS]
! PROMPT('Keer:'),USE(?Keer:Prompt)
! STRING(@n-14),USE(Keer),RIGHT(1)
[REPORTCONTROLS]
! STRING(@n-14),USE(Keer),RIGHT(1)
Keer                     LONG
!!>
IDENT(4294966846),PROMPT('Keer:'),HEADER('Keer'),PICTURE(@n-14),JUSTIFY(RIGH
T,1)
[SCREENCONTROLS]
! PROMPT('winmesevent:'),USE(?winmesevent:Prompt)
! STRING(@s19),USE(winmesevent)
[REPORTCONTROLS]
! STRING(@s19),USE(winmesevent)
winmesevent              CSTRING(20)
!!>
IDENT(4294966845),PROMPT('winmesevent:'),HEADER('winmesevent'),PICTURE(@s19)
[SCREENCONTROLS]
! PROMPT('w Handle:'),USE(?wHandle:Prompt)
! STRING(@n-14),USE(wHandle)
[REPORTCONTROLS]
! STRING(@n-14),USE(wHandle)
wHandle                  LONG
!!> IDENT(4294966844),PROMPT('w Handle:'),HEADER('w Handle'),PICTURE(@n-14)
[SCREENCONTROLS]
! PROMPT('h WDC:'),USE(?hWDC:Prompt)
! STRING(@n-14),USE(hWDC)
[REPORTCONTROLS]
! STRING(@n-14),USE(hWDC)
hWDC                     LONG
!!> IDENT(4294966843),PROMPT('h WDC:'),HEADER('h WDC'),PICTURE(@n-14)
[SCREENCONTROLS]
! ENTRY(@s12),USE(logbrush)
[REPORTCONTROLS]
! STRING(@s12),USE(logbrush)
logbrush                 GROUP,PRE()
!!> IDENT(4294966842),PROMPT('logbrush:'),HEADER('logbrush'),PICTURE(@s12)
[SCREENCONTROLS]
! ENTRY(@n-14),USE(lpstyle)
[REPORTCONTROLS]
! STRING(@n-14),USE(lpstyle)
lpstyle                    LONG
!!> IDENT(4294966841),PROMPT('lpstyle:'),HEADER('lpstyle'),PICTURE(@n-14)
[SCREENCONTROLS]
! ENTRY(@n-14),USE(lpcolor)
[REPORTCONTROLS]
! STRING(@n-14),USE(lpcolor)
lpcolor                    LONG
!!> IDENT(4294966840),PROMPT('lpcolor:'),HEADER('lpcolor'),PICTURE(@n-14)
[SCREENCONTROLS]
! ENTRY(@n-14),USE(lpdummy)
[REPORTCONTROLS]
! STRING(@n-14),USE(lpdummy)
lpdummy                    LONG
!!> IDENT(4294966839),PROMPT('lpdummy:'),HEADER('lpdummy'),PICTURE(@n-14)
                         END
!!> IDENT(4294966838)
[SCREENCONTROLS]
! ENTRY(@n-14),USE(holdbrush)
[REPORTCONTROLS]
! STRING(@n-14),USE(holdbrush)
holdbrush                LONG
!!>
IDENT(4294966837),PROMPT('holdbrush:'),HEADER('holdbrush'),PICTURE(@n-14)
[SCREENCONTROLS]
! ENTRY(@n-14),USE(hbrush)
[REPORTCONTROLS]
! STRING(@n-14),USE(hbrush)
hbrush                   LONG
!!> IDENT(4294966836),PROMPT('hbrush:'),HEADER('hbrush'),PICTURE(@n-14)
[SCREENCONTROLS]
! ENTRY(@s58),USE(XLOGFONT)
[REPORTCONTROLS]
! STRING(@s58),USE(XLOGFONT)
XLOGFONT                 GROUP,PRE(XLF)
!!> IDENT(4294966835),PROMPT('XLOGFONT:'),HEADER('XLOGFONT'),PICTURE(@s58)
[SCREENCONTROLS]
! ENTRY(@n-14),USE(XLF:lfHeight)
[REPORTCONTROLS]
! STRING(@n-14),USE(XLF:lfHeight)
lfHeight                   LONG
!!> IDENT(4294966834),PICTURE(@n-14)
[SCREENCONTROLS]
! ENTRY(@n-14),USE(XLF:lfWidth)
[REPORTCONTROLS]
! STRING(@n-14),USE(XLF:lfWidth)
lfWidth                    LONG
!!> IDENT(4294966833),PICTURE(@n-14)
[SCREENCONTROLS]
! ENTRY(@n-14),USE(XLF:lfEscapement)
[REPORTCONTROLS]
! STRING(@n-14),USE(XLF:lfEscapement)
lfEscapement               LONG
!!> IDENT(4294966832),PICTURE(@n-14)
[SCREENCONTROLS]
! ENTRY(@n-14),USE(XLF:lfOrientation)
[REPORTCONTROLS]
! STRING(@n-14),USE(XLF:lfOrientation)
lfOrientation              LONG
!!> IDENT(4294966831),PICTURE(@n-14)
[SCREENCONTROLS]
! ENTRY(@n-14),USE(XLF:lfWeight)
[REPORTCONTROLS]
! STRING(@n-14),USE(XLF:lfWeight)
lfWeight                   LONG
!!> IDENT(4294966830),PICTURE(@n-14)
[SCREENCONTROLS]
! ENTRY(@n3),USE(XLF:lfItalic)
[REPORTCONTROLS]
! STRING(@n3),USE(XLF:lfItalic)
lfItalic                   BYTE
!!> IDENT(4294966829),PICTURE(@n3)
[SCREENCONTROLS]
! ENTRY(@n3),USE(XLF:lfUnderline)
[REPORTCONTROLS]
! STRING(@n3),USE(XLF:lfUnderline)
lfUnderline                BYTE
!!> IDENT(4294966828),PICTURE(@n3)
[SCREENCONTROLS]
! ENTRY(@n3),USE(XLF:lfStrikeOut)
[REPORTCONTROLS]
! STRING(@n3),USE(XLF:lfStrikeOut)
lfStrikeOut                BYTE
!!> IDENT(4294966827),PICTURE(@n3)
[SCREENCONTROLS]
! ENTRY(@n3),USE(XLF:lfCharSet)
[REPORTCONTROLS]
! STRING(@n3),USE(XLF:lfCharSet)
lfCharSet                  BYTE
!!> IDENT(4294966826),PICTURE(@n3)
[SCREENCONTROLS]
! ENTRY(@n3),USE(XLF:lfOutPrecision)
[REPORTCONTROLS]
! STRING(@n3),USE(XLF:lfOutPrecision)
lfOutPrecision             BYTE
!!> IDENT(4294966825),PICTURE(@n3)
[SCREENCONTROLS]
! ENTRY(@n3),USE(XLF:lfClipPrecision)
[REPORTCONTROLS]
! STRING(@n3),USE(XLF:lfClipPrecision)
lfClipPrecision            BYTE
!!> IDENT(4294966824),PICTURE(@n3)
[SCREENCONTROLS]
! ENTRY(@n3),USE(XLF:lfQuality)
[REPORTCONTROLS]
! STRING(@n3),USE(XLF:lfQuality)
lfQuality                  BYTE
!!> IDENT(4294966823),PICTURE(@n3)
[SCREENCONTROLS]
! ENTRY(@n3),USE(XLF:lfPitchAndFamily)
[REPORTCONTROLS]
! STRING(@n3),USE(XLF:lfPitchAndFamily)
lfPitchAndFamily           BYTE
!!> IDENT(4294966822),PICTURE(@n3)
[SCREENCONTROLS]
! ENTRY(@s29),USE(XLF:lfFaceName)
[REPORTCONTROLS]
! STRING(@s29),USE(XLF:lfFaceName)
lfFaceName                 CSTRING(30)
!!> IDENT(4294966821),PICTURE(@s29)
                         END
!!> IDENT(4294966820)
[SCREENCONTROLS]
! ENTRY(@s64),USE(TheUniText)
[REPORTCONTROLS]
! STRING(@s64),USE(TheUniText)
TheUniText               STRING(64)
!!> IDENT(4294966819),PROMPT('The Uni Text:'),HEADER('The Uni
Text'),PICTURE(@s64)
[SCREENCONTROLS]
! ENTRY(@s64),USE(TheUniTextW)
[REPORTCONTROLS]
! STRING(@s64),USE(TheUniTextW)
TheUniTextW              STRING(64)
!!> IDENT(4294966818),PROMPT('The Uni Text W:'),HEADER('The Uni Text
W'),PICTURE(@s64)
[SCREENCONTROLS]
! ENTRY(@s31),USE(TypeFace)
[REPORTCONTROLS]
! STRING(@s31),USE(TypeFace)
TypeFace                 CSTRING(32)
!!> IDENT(4294966817),PROMPT('Type Face:'),HEADER('Type Face'),PICTURE(@s31)
[SCREENCONTROLS]
! ENTRY(@s99),USE(GetTextFaceOutput)
[REPORTCONTROLS]
! STRING(@s99),USE(GetTextFaceOutput)
GetTextFaceOutput        CSTRING(100)
!!> IDENT(4294966816),PROMPT('Get Text Face Output:'),HEADER('Get Text Face
Output'),PICTURE(@s99)
[SCREENCONTROLS]
! ENTRY(@n-7),USE(TheUniDimText)
[REPORTCONTROLS]
! STRING(@n-7),USE(TheUniDimText)
TheUniDimText            SHORT
!!> IDENT(4294966815),PROMPT('The Uni Dim Text:'),HEADER('The Uni Dim
Text'),PICTURE(@n-7)

The API stuff

 Module('win32.lib')
   rectangle(long,long,long,long,long),long,pascal,name('rectangle'),proc
   TextOut(long, long, long,long,long),long,PASCAL,RAW,NAME('TextOutW'),proc
   createbrushindirect(long),long,pascal,raw,name('createbrushindirect'),proc
   setbkmode(long,long),long,raw,pascal,name('setbkmode'),proc
   setTextAlign(long,long),long,raw,pascal,name('settextalign'),proc
   settextcolor(long,long),long,raw,pascal,name('settextcolor'),proc
   GetDeviceCaps(LONG, SIGNED),SIGNED,PASCAL
   GetDesktopWindow(),LONG,PASCAL
   DeleteObject(LONG),LONG,PASCAL,proc
   SelectObject(LONG, LONG),LONG,PASCAL,proc
   ReleaseDC(LONG, LONG),SIGNED,PASCAL,Proc
   GetDC(LONG),LONG,PASCAL
   CreateFontA( SIGNED, SIGNED, SIGNED, SIGNED, SIGNED, long,LONG, LONG,|
                LONG, LONG, LONG,LONG, LONG, long),long,PASCAL,RAW
   CreateFontIndirectA(long),long,PASCAL,RAW

   MultiByteToWideChar(UNSIGNED,long,long,SIGNED,long,SIGNED),SIGNED,PASCAL,RAW

   memcpy(long,long,signed),long,proc,name('_Memcpy')
   lstrlenW(long lpWString),signed,proc,pascal

   widecharToMultibyte(ulong,ulong,Long,long,long,Long,long,long),bool,pascal,raw,proc
   SysFreeString(long),long,pascal,proc
   SysAllocString(long lpwstr),long,pascal

   GetTextFace(long, SIGNED, long),SIGNED,PASCAL,RAW,NAME('GetTextFaceA')

   EnumFontFamiliesEx(UNSIGNED hdc,             | handle to DC
                      *LOGFONT lpLogfont,       | font information
                      *EnumFontFamExProc lpEnumFontFamExProc, | callback function
                      LONG lParam,              | additional data to pass to callback
                      LONG dwFlags=0            | not used; must be 0
                     ),SIGNED,PROC,PASCAL,RAW,NAME('EnumFontFamiliesExA')

   MoveMemory(*? pDest, UNSIGNED pSrc, UNSIGNED
BytesToCopy),PASCAL,RAW,NAME('RtlMoveMemory')
   ZeroMemory(*? pBlock, UNSIGNED SizeBlock),PASCAL,RAW,NAME('RtlZeroMemory')

   GetWindowRect(long, *RECT),BOOL,PASCAL,RAW
   SetWindowRgn(long,long,BOOL),SIGNED,PASCAL
   DrawCaption(long,long,long,long),long,pascal

   SetWindowLong(UNSIGNED,SIGNED,LONG),LONG,PASCAL,NAME('SetWindowLongA')
   GetWindowLong(LONG,SIGNED),LONG,PASCAL,NAME('GetWindowLongA')

  
CallWindowProc(LONG,UNSIGNED,UNSIGNED,UNSIGNED,LONG),LONG,PASCAL,NAME('CallWindowProcA')

   SetWindowPos(UNSIGNED,UNSIGNED,SHORT,SHORT,SHORT,SHORT,USHORT),SHORT,PASCAL
   SetWindowText(LONG,Long),BOOL,PASCAL,NAME('SetWindowTextA')
   SetLastError(Byte),PASCAL
   !CreatePolygonRgn(*POINT, SIGNED, SIGNED),HRGN,PASCAL,RAW
   CombineRgn(HRGN, HRGN, HRGN, SIGNED),SIGNED,PASCAL
   ! Combines two regions and stores the result in a third region.
   CreateEllipticRgn( SIGNED, SIGNED, SIGNED, SIGNED),LONG,PASCAL
   ! Creates an elliptical region.
   CreateEllipticRgnIndirect(*RECT),long,PASCAL,RAW
   ! Creates an elliptical region.
   CreatePolygonRgn(long, SIGNED, SIGNED),long,PASCAL,RAW
   ! Creates a polygonal region.
   CreatePolyPolygonRgn(*POINT,  *SIGNED, SIGNED,SIGNED),long,PASCAL,RAW
   ! Creates a region consisting of a series of polygons.
   CreateRectRgn(SIGNED, SIGNED, SIGNED, SIGNED),long,PASCAL
   ! Creates a rectangular region.
   CreateRectRgnIndirect(*RECT),long,PASCAL,RAW
   ! Creates a rectangular region with rounded corners.
   CreateRoundRectRgn( SIGNED, SIGNED, SIGNED, SIGNED, SIGNED, SIGNED),long,PASCAL 
   ! Creates a rectangular region with rounded corners.
   EqualRgn(HRGN, HRGN),BOOL,PASCAL
   ! Checks the two specified regions to determine whether they are identical.
   ExtCreateRegion(*XFORM, DWORD,*RGNDATA),long,PASCAL,RAW
   ! Creates a region from the specified region and transformation data.
   FillRgn(HDC, HRGN, HBRUSH),BOOL,PASCAL
   ! Fills a region by using the specified brush.
   FrameRgn(HDC, HRGN, HBRUSH, SIGNED, SIGNED),BOOL,PASCAL
   ! Draws a border around the specified region by using the specified brush.
   GetPolyFillMode(HDC),SIGNED,PASCAL
   ! Retrieves the current polygon fill mode.
   GetRegionData(HRGN, DWORD, *RGNDATA),long,PASCAL,RAW
   ! Fills the specified buffer with data describing a region.
   GetRgnBox(HRGN, *RECT),SIGNED,PASCAL,RAW
   ! Retrieves the bounding rectangle of the specified region.
   InvertRgn(HDC, HRGN),BOOL,PASCAL
   ! Inverts the colors in the specified region.
   OffsetRgn(HRGN, SIGNED, SIGNED),SIGNED,PASCAL
   ! Moves a region by the specified offsets.
   PaintRgn(HDC, HRGN),BOOL,PASCAL
   ! Paints the specified region by using the brush currently selected into the device
context.
   PtInRegion(HRGN, SIGNED, SIGNED),BOOL,PASCAL
   ! Determines whether the specified point is inside the specified region.
   RectInRegion(HRGN,  *RECT),BOOL,PASCAL,RAW
   ! Determines whether any part of the specified rectangle is within the boundaries of a
region.
   SetPolyFillMode(HDC, SIGNED),SIGNED,PASCAL
   ! Sets the polygon fill mode for functions that fill polygons.
   SetRectRgn(HRGN, SIGNED, SIGNED, SIGNED, SIGNED),BOOL,PASCAL
   ! Converts a region into a rectangular region with the specified coordinates.
   MonitorFromRectA(unsigned,unsigned),long,PASCAL,raw,name('MonitorFromRect')
   MonitorFromWindow(long,long),long,pascal

   SetClassLong(LONG,SIGNED,LONG),LONG,PASCAL,NAME('SetClassLongA')
   GetClassLong(LONG,SIGNED),LONG,PASCAL,NAME('GetClassLongA')
   SetForegroundWindow(long), BOOL, PASCAL

   GetClassName(LONG,LONG,SIGNED),SIGNED,PASCAL,RAW,NAME('GetClassNameA')
   CreateWindowEx(LONG,LONG,LONG, LONG, SIGNED, SIGNED, SIGNED, SIGNED, |
                  LONG, LONG, LONG, LONG), LONG, PASCAL, RAW, name('CreateWindowExA')

   SendMessage(LONG,UNSIGNED,LONG,LONG),LONG,PASCAL,NAME('SendMessageA')
   InitCommonControls(), PASCAL, NAME('InitCommonControls')

   DefWindowProc(LONG,UNSIGNED,LONG,LONG),LONG,PASCAL,NAME('DefWindowProcA')
   RegisterClass(LONG),long,pascal,raw,name('RegisterClassA')
   RegisterClassEx(LONG),long,pascal,raw,name('RegisterClassExA')
   UnRegisterClass(Long, LONG),bool,raw,pascal,name('UnRegisterClassA')
   GetClassInfo(Long, Long , Long),bool,raw,pascal,name('GetClassInfoA')
   GetClassInfoEx(Long, Long , Long),bool,raw,pascal,name('GetClassInfoExA')
   LoadCursor(Long, long ),long,pascal,name('LoadCursorA')
   ShowCursor(bool),long,pascal
   _SetCursor(long),long,name('SetCursor')
   SetCursorPos(signed , signed ),bool,pascal,proc
   GetCursorPos(Long),bool,raw,pascal,proc
   GetLastError(),long,pascal
   SizeofResource(LONG, LONG),long,PASCAL
   FindResourceA(LONG,LONG,LONG),LONG,PASCAL,RAW,NAME('FindResourceA')
   ShowWindow(long,long),long,pascal,raw,name('ShowWindow')
   SetActiveWindow(long),long,pascal,raw,name('SetActiveWindow')
   GetActiveWindow(),long,pascal,raw,name('GetActiveWindow')
   GetVersion,RAW,PASCAL,USHORT                      
   ! Gets version info

  
SystemParametersInfo(UNSIGNED,UNSIGNED,LONG,UNSIGNED),BOOL,PASCAL,RAW,NAME('SystemParametersInfoA')
   GetWindowDC(long),long,pascal,raw,name('GetWindowDC')
   GetTextExtentPoint32A(LONG,LONG, SIGNED, LONG),BOOL,PASCAL,RAW
   mouse_event(long,long,long,long,long),PASCAL
  GetSystemMetrics(SHORT),RAW,PASCAL,SHORT          ! Gets info on devices
 End

And the GLOBAL DATA :

hfontd               LONG,STATIC   
                                   
bs_solid             EQUATE(0)     
!transparent equate(1)             
opague               EQUATE(2)     
translucent          EQUATE(3)     
                                   
CurrentChar          ULONG         
Char                 ULONG,DIM(256)

!ANSI_CHARSET        EQUATE(0)
!DEFAULT_CHARSET     EQUATE(1)
!SYMBOL_CHARSET      EQUATE(2)
!SHIFTJIS_CHARSET    EQUATE(128)
!HANGEUL_CHARSET     EQUATE(129)
!HANGUL_CHARSET      EQUATE(129)
!GB2312_CHARSET      EQUATE(134)
!CHINESEBIG5_CHARSET EQUATE(136)
!OEM_CHARSET         EQUATE(255)
!
!JOHAB_CHARSET       EQUATE(130)
!HEBREW_CHARSET      EQUATE(177)
!ARABIC_CHARSET      EQUATE(178)
!GREEK_CHARSET       EQUATE(161)
!TURKISH_CHARSET     EQUATE(162)
!VIETNAMESE_CHARSET  EQUATE(163)
!THAI_CHARSET        EQUATE(222)
!EASTEUROPE_CHARSET  EQUATE(238)
!RUSSIAN_CHARSET     EQUATE(204)
!
!MAC_CHARSET         EQUATE(77)
!BALTIC_CHARSET      EQUATE(186)
!
!!/* EnumFonts Masks */
!RASTER_FONTTYPE     EQUATE(1h)
!DEVICE_FONTTYPE     EQUATE(2h)
!TRUETYPE_FONTTYPE   EQUATE(4h)

LOGFONT              GROUP,TYPE
lfHeight               LONG
lfWidth                LONG
lfEscapement           LONG
lfOrientation          LONG
lfWeight               LONG
lfItalic               BYTE
lfUnderline            BYTE
lfStrikeOut            BYTE
lfCharSet              BYTE
lfOutPrecision         BYTE
lfClipPrecision        BYTE
lfQuality              BYTE
lfPitchAndFamily       BYTE
lfFaceName             CSTRING(32)
                     END

ENUMLOGFONTEX        GROUP,TYPE
elfLogFont             LIKE(LOGFONT)
elfFullName            CSTRING(64)
elfStyle               CSTRING(32)
elfScript              CSTRING(32)
                     END


TEXTMETRIC           GROUP,TYPE
tmHeight               LONG
tmAscent               LONG
tmDescent              LONG
tmInternalLeading      LONG
tmExternalLeading      LONG
tmAveCharWidth         LONG
tmMaxCharWidth         LONG
tmWeight               LONG
tmOverhang             LONG
tmDigitizedAspectX     LONG
tmDigitizedAspectY     LONG
tmFirstChar            BYTE
tmLastChar             BYTE
tmDefaultChar          BYTE
tmBreakChar            BYTE
tmItalic               BYTE
tmUnderlined           BYTE
tmStruckOut            BYTE
tmPitchAndFamily       BYTE
tmCharSet              BYTE
                     END

NEWTEXTMETRIC        GROUP(TEXTMETRIC),TYPE
ntmFlags               ULONG 
ntmSizeEM              UNSIGNED
ntmCellHeight          UNSIGNED
ntmAvgWidth            UNSIGNED
                     END

FONTSIGNATURE        GROUP,TYPE
fsUsb                  ULONG,DIM(4)
fsCsb                  ULONG,DIM(2)
                     END

NEWTEXTMETRICEX      GROUP,TYPE
ntmTm                  LIKE(NEWTEXTMETRIC)
ntmFontSig             LIKE(FONTSIGNATURE)
                     END

FONTSQTYPE           QUEUE,TYPE
FaceName               CSTRING(32)
elfex                  LIKE(ENUMLOGFONTEX)
tm                     LIKE(TEXTMETRIC)
                     END

Sync                 BYTE
CurrentUniLength     ULONG
Do_BuildFolderList_R BYTE
hexMask              STRING(16)



Printed May 7, 2024, 4:31 pm
This article has been viewed/printed 35118 times.
Google search has resulted in 236 hits on this article since January 25, 2004.