Code:
'MessageViewer.bas
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'Here's a little windows message viewer, based on Semen Matusovski's WriteConsole code,
'also using Jim Huguley's message list, it's been very helpful to me ..maybe someone would like...
'also has a little demo to play with, using some of Edwin Knoppert's NCCALCSIZE_PARAMS code...
'resize dialog boxes to see NCCALCSIZE msg's....
'Thanks, All
'Brad

   #COMPILE EXE
   #REGISTER NONE
   #DIM ALL
   #INCLUDE "Win32Api.Inc"
   GLOBAL hDlg2&, hVDsp& ,Msg AS tagMsg
   '================================

   DECLARE FUNCTION GetMsg (hndl AS LONG) AS STRING
   DECLARE FUNCTION ShowVar (Var_label$, Var_value&) AS LONG

'________________________________________________________________________________
'Semen Matusovski's CPrint code:

   SUB CPrint (SOut AS STRING)
      STATIC hConsole AS LONG, cWritten AS LONG
      IF hConsole = 0 THEN AllocConsole: hConsole = GetStdHandle(-11&)
      WriteConsole hConsole, BYCOPY sOut + $CRLF, LEN(sOut) + 2, cWritten, BYVAL 0&
   END SUB

'________________________________________________________________________________
   CALLBACK FUNCTION DlgProc3
      STATIC p1 AS LONG, p2 AS LONG, p3 AS LONG, p4 AS LONG ,msgCnt&,NcCapture&,NCmoveDiff&
      DIM pNCC AS NCCALCSIZE_PARAMS PTR

      CPrint STR$(msgCnt&)+GetMsg(CBMSG)
      INCR msgCnt&

showVar "hover", CBCTL

   SELECT CASE CBMSG

       CASE %WM_MOUSEMOVE
          BEEP
   showVar "NCBCTL", CBMSG

   CASE %WM_NCCALCSIZE
       IF CBWPARAM = 0 THEN EXIT SELECT

       pNCC = CBLPARAM
       showVar "NCCALCSIZE0",@pNCC.rgrc( 0 ).nRight
       showVar "NCCALCSIZEl",@pNCC.rgrc( 1 ).nRight
       showVar "NCCALCSIZE2",@pNCC.rgrc( 2 ).nRight
       showVar "NCCALCSIZE0b",@pNCC.rgrc( 0 ).nBottom
       showVar "NCCALCSIZElb",@pNCC.rgrc( 1 ).nBottom
       showVar "NCCALCSIZE2b",@pNCC.rgrc( 2 ).nBottom
   END SELECT

   IF CBMSG = %WM_DESTROY THEN PostQuitMessage 0
   END FUNCTION


'________________________________________________________________________________
   CALLBACK FUNCTION DlgProc
      STATIC p1 AS LONG, p2 AS LONG, p3 AS LONG, p4 AS LONG ,msgCnt&,NcCapture&,NCmoveDiff&
      DIM pNCC AS NCCALCSIZE_PARAMS PTR

      CPrint STR$(msgCnt&)+GetMsg(CBMSG)
      INCR msgCnt&

   SELECT CASE CBMSG

   CASE %WM_NCCALCSIZE
       IF CBWPARAM = 0 THEN EXIT SELECT

       pNCC = CBLPARAM
       showVar "NCCALCSIZE0",@pNCC.rgrc( 0 ).nRight
       showVar "NCCALCSIZEl",@pNCC.rgrc( 1 ).nRight
       showVar "NCCALCSIZE2",@pNCC.rgrc( 2 ).nRight
       showVar "NCCALCSIZE0b",@pNCC.rgrc( 0 ).nBottom
       showVar "NCCALCSIZElb",@pNCC.rgrc( 1 ).nBottom
       showVar "NCCALCSIZE2b",@pNCC.rgrc( 2 ).nBottom
   END SELECT

   IF CBMSG = %WM_DESTROY THEN PostQuitMessage 0
   END FUNCTION

    CALLBACK FUNCTION DlgProc2
        IF CBMSG = %WM_DESTROY THEN PostQuitMessage 0
    END FUNCTION

'________________________________________________________________________________
   FUNCTION PBMAIN
      LOCAL hDlg AS LONG ,TextStr$
              TextStr$ = " An Introduction...New to PowerBASIC? We offer compilers "

      DIALOG NEW 0, "Sample Dlg: NCCALCSIZE_PARAMS", , , 300, 200, %WS_CLIPCHILDREN OR %WS_CLIPSIBLINGS _
                    OR %WS_overlappedwindow TO hDlg
      PostMessage hDlg, %WM_USER + 1, 300, 50
      PostMessage hDlg, %WM_USER + 2, 400, 200
      CONTROL ADD BUTTON, hdlg, 101, "Button", 10, 10, 60, 12 ,CALL DlgProc3
      CONTROL ADD TEXTBOX, hDlg, 100, TextStr$, 33, 43, 100, 50, %ES_multiline OR %WS_VSCROLL _
                                         OR %ES_AUTOVSCROLL , %WS_EX_CLIENTEDGE


      DIALOG NEW hDlg&, "Custom control test1",20,100, 240, 80, %WS_CHILD OR %WS_VISIBLE _
       OR %WS_CLIPCHILDREN OR %WS_VSCROLL OR %WS_thickframe  , %ws_ex_clientedge TO hDlg2&
      CONTROL ADD BUTTON, hDlg2&, 4000, "Button", 5,  20, 50, 14,%bS_NOTIFY,CALL DlgProc3

      DIALOG SHOW MODELESS hDlg2&, CALL DlgProc2

      DIALOG SHOW MODELESS hDlg CALL DlgProc

      WHILE getMessage(Msg, %NULL, 0, 0)
        TranslateMessage Msg
        DispatchMessage Msg
      WEND

   END FUNCTION

'________________________________________________________________________________
'List Cut'n'Pasted from Jim Huguley's "Display Control Messages" code at:
'MESSAGE [URL=http://www.powerbasic.com/support/forums/Forum7/HTML/000348.html]
'partial list... more at Jim's post

FUNCTION GetMsg (hndl AS LONG) AS STRING
SELECT CASE hndl
    CASE %EN_UPDATE
          FUNCTION = " &H0  %EN_UPDATE"

    CASE %WM_NULL
         FUNCTION = " &H0  %WM_NULL"
    CASE %WM_CREATE
         FUNCTION = " &H1  %WM_CREATE"

    CASE %WM_DESTROY
         FUNCTION = " &H2  %WM_DESTROY"
    CASE %WM_MOVE
         FUNCTION = " &H3  %WM_MOVE"

    CASE %WM_SIZE
         FUNCTION = " &H5  %WM_SIZE"
    CASE %WM_ACTIVATE
         FUNCTION = " &H6  %WM_ACTIVATE"

    CASE %WM_SETFOCUS
         FUNCTION = " &H7  %WM_SETFOCUS"
    CASE %WM_KILLFOCUS
         FUNCTION = " &H8  %WM_KILLFOCUS"

    CASE %WM_ENABLE
         FUNCTION = " &HA  %WM_ENABLE"
    CASE %WM_SETREDRAW
         FUNCTION = " &HB  %WM_SETREDRAW"

    CASE %WM_SETTEXT
         FUNCTION = " &HC  %WM_SETTEXT"
    CASE %WM_GETTEXT
         FUNCTION = " &HD  %WM_GETTEXT"

    CASE %WM_GETTEXTLENGTH
         FUNCTION = " &HE  %WM_GETTEXTLENGTH"
    CASE %WM_PAINT
         FUNCTION = " &HF  %WM_PAINT"

    CASE %WM_CLOSE
         FUNCTION = " &H10  %WM_CLOSE"
    CASE %WM_QUERYENDSESSION
         FUNCTION = " &H11  %WM_QUERYENDSESSION"

    CASE %WM_QUIT
         FUNCTION = " &H12  %WM_QUIT"
    CASE %WM_QUERYOPEN
         FUNCTION = " &H13  %WM_QUERYOPEN"

    CASE %WM_ERASEBKGND
         FUNCTION = " &H14  %WM_ERASEBKGND"
    CASE %WM_SYSCOLORCHANGE
         FUNCTION = " &H15  %WM_SYSCOLORCHANGE"

    CASE %WM_ENDSESSION
         FUNCTION = " &H16  %WM_ENDSESSION"
    CASE %WM_SHOWWINDOW
         FUNCTION = " &H18  %WM_SHOWWINDOW"

    CASE %WM_WININICHANGE,%WM_SETTINGCHANGE
         FUNCTION = " &H1A  %WM_WININICHANGE,%WM_SETTINGCHANGE"
    CASE %WM_DEVMODECHANGE
         FUNCTION = " &H1B  %WM_DEVMODECHANGE"

    CASE %WM_ACTIVATEAPP
         FUNCTION = " &H1C  %WM_ACTIVATEAPP"
    CASE %WM_FONTCHANGE
         FUNCTION = " &H1D  %WM_FONTCHANGE"

    CASE %WM_TIMECHANGE
         FUNCTION = " &H1E  %WM_TIMECHANGE"
    CASE %WM_CANCELMODE
         FUNCTION = " &H1F  %WM_CANCELMODE"

    CASE %WM_SETCURSOR
         FUNCTION = " &H20  %WM_SETCURSOR"
    CASE %WM_MOUSEACTIVATE
         FUNCTION = " &H21  %WM_MOUSEACTIVATE"

    CASE %WM_CHILDACTIVATE
         FUNCTION = " &H22  %WM_CHILDACTIVATE"
    CASE %WM_QUEUESYNC
         FUNCTION = " &H23  %WM_QUEUESYNC"

    CASE %WM_GETMINMAXINFO
         FUNCTION = " &H24  %WM_GETMINMAXINFO"
    CASE %WM_PAINTICON
         FUNCTION = " &H26  %WM_PAINTICON"

    CASE %WM_ICONERASEBKGND
         FUNCTION = " &H27  %WM_ICONERASEBKGND"
    CASE %WM_NEXTDLGCTL
         FUNCTION = " &H28  %WM_NEXTDLGCTL"

    CASE %WM_SPOOLERSTATUS
         FUNCTION = " &H2A  %WM_SPOOLERSTATUS"
    CASE %WM_DRAWITEM
         FUNCTION = " &H2B  %WM_DRAWITEM"

    CASE %WM_MEASUREITEM
         FUNCTION = " &H2C  %WM_MEASUREITEM"
    CASE %WM_DELETEITEM
         FUNCTION = " &H2D  %WM_DELETEITEM"

    CASE %WM_VKEYTOITEM
         FUNCTION = " &H2E  %WM_VKEYTOITEM"
    CASE %WM_CHARTOITEM
         FUNCTION = " &H2F  %WM_CHARTOITEM"

    CASE %WM_SETFONT
         FUNCTION = " &H30  %WM_SETFONT"
    CASE %WM_GETFONT
         FUNCTION = " &H31  %WM_GETFONT"

    CASE %WM_SETHOTKEY
         FUNCTION = " &H32  %WM_SETHOTKEY"
    CASE %WM_GETHOTKEY
         FUNCTION = " &H33  %WM_GETHOTKEY"

    CASE %WM_QUERYDRAGICON
         FUNCTION = " &H37  %WM_QUERYDRAGICON"
    CASE %WM_COMPAREITEM
         FUNCTION = " &H39  %WM_COMPAREITEM"

    CASE %WM_COMPACTING
         FUNCTION = " &H41  %WM_COMPACTING"
    CASE %WM_OTHERWINDOWCREATED
         FUNCTION = " &H42  %WM_OTHERWINDOWCREATED"   '  no longer suported

    CASE %WM_OTHERWINDOWDESTROYED
         FUNCTION = " &H43  %WM_OTHERWINDOWDESTROYED" '  no longer suported
    CASE %WM_COMMNOTIFY
         FUNCTION = " &H44  %WM_COMMNOTIFY            '  no longer suported

    '
    ' notifications passed in low word of lParam on WM_COMMNOTIFY messages
    ' %CN_RECEIVE                                  = &H1
    ' %CN_TRANSMIT                                 = &H2
    ' %CN_EVENT                                    = &H4
    '

    CASE %WM_WINDOWPOSCHANGING
         FUNCTION = " &H46  %WM_WINDOWPOSCHANGING"
    CASE %WM_WINDOWPOSCHANGED
         FUNCTION = " &H47  %WM_WINDOWPOSCHANGED"

    CASE %WM_POWER
         FUNCTION = " &H48  %WM_POWER"
    '
    ' wParam for WM_POWER window message and DRV_POWER driver notification

    ' %PWR_OK                                      = 1
    ' %PWR_FAIL                                    = -1
    ' %PWR_SUSPENDREQUEST                          = 1
    ' %PWR_SUSPENDRESUME                           = 2
    ' %PWR_CRITICALRESUME                          = 3
    '

    CASE %WM_COPYDATA
         FUNCTION = " &H4A   %WM_COPYDATA"
    CASE %WM_CANCELJOURNAL
         FUNCTION = " &H4B   %WM_CANCELJOURNAL"

    CASE %WM_NOTIFY
         FUNCTION = " &H4E   %WM_NOTIFY"
    CASE %WM_INPUTLANGUAGECHANGEREQUEST
         FUNCTION = " &H50   %WM_INPUTLANGUAGECHANGEREQUEST"

    CASE %WM_INPUTLANGUAGECHANGE
         FUNCTION = " &H51   %WM_INPUTLANGUAGECHANGE"
    CASE %WM_TCARD
         FUNCTION = " &H52   %WM_TCARD"

    CASE %WM_HELP
         FUNCTION = " &H53   %WM_HELP"
    CASE %WM_USERCHANGED
         FUNCTION = " &H54   %WM_USERCHANGED"

    CASE %WM_NOTIFYFORMAT
         FUNCTION = " &H55   %WM_NOTIFYFORMAT"
    CASE %WM_CONTEXTMENU
         FUNCTION = " &H7B   %WM_CONTEXTMENU"

    CASE %WM_STYLECHANGING
         FUNCTION = " &H7C   %WM_STYLECHANGING"
    CASE %WM_STYLECHANGED
         FUNCTION = " &H7D   %WM_STYLECHANGED"

    CASE %WM_DISPLAYCHANGE
         FUNCTION = " &H7E   %WM_DISPLAYCHANGE"
    CASE %WM_GETICON
         FUNCTION = " &H7F   %WM_GETICON"

    CASE %WM_SETICON
         FUNCTION = " &H80   %WM_SETICON"
    CASE %WM_NCCREATE
         FUNCTION = " &H81   %WM_NCCREATE"

    CASE %WM_NCDESTROY
         FUNCTION = " &H82   %WM_NCDESTROY"
    CASE %WM_NCCALCSIZE
         FUNCTION = " &H83   %WM_NCCALCSIZE"

    CASE %WM_NCHITTEST
         FUNCTION = " &H84   %WM_NCHITTEST"
    CASE %WM_NCPAINT
         FUNCTION = " &H85   %WM_NCPAINT"

    CASE %WM_NCACTIVATE
         FUNCTION = " &H86   %WM_NCACTIVATE"
    CASE %WM_GETDLGCODE
         FUNCTION = " &H87   %WM_GETDLGCODE"

    CASE %WM_NCMOUSEMOVE
         FUNCTION = " &HA0   %WM_NCMOUSEMOVE"
    CASE %WM_NCLBUTTONDOWN
         FUNCTION = " &HA1   %WM_NCLBUTTONDOWN"

    CASE %WM_NCLBUTTONUP
         FUNCTION = " &HA2   %WM_NCLBUTTONUP"
    CASE %WM_NCLBUTTONDBLCLK
         FUNCTION = " &HA3   %WM_NCLBUTTONDBLCLK"

    CASE %WM_NCRBUTTONDOWN
         FUNCTION = " &HA4   %WM_NCRBUTTONDOWN"
    CASE %WM_NCRBUTTONUP
         FUNCTION = " &HA5   %WM_NCRBUTTONUP"

    CASE %WM_NCRBUTTONDBLCLK
         FUNCTION = " &HA6   %WM_NCRBUTTONDBLCLK"
    CASE %WM_NCMBUTTONDOWN
         FUNCTION = " &HA7   %WM_NCMBUTTONDOWN"

    CASE %WM_NCMBUTTONUP
         FUNCTION = " &HA8   %WM_NCMBUTTONUP"
    CASE %WM_NCMBUTTONDBLCLK
         FUNCTION = " &HA9   %WM_NCMBUTTONDBLCLK"

    CASE %WM_KEYFIRST, %WM_KEYDOWN
         FUNCTION = " &H100  %WM_KEYFIRST, %WM_KEYDOWN"
    CASE %WM_KEYUP
         FUNCTION = " &H101  %WM_KEYUP"

    CASE %WM_CHAR
         FUNCTION = " &H102  %WM_CHAR"
    CASE %WM_DEADCHAR
         FUNCTION = " &H103  %WM_DEADCHAR"

    CASE %WM_SYSKEYDOWN
         FUNCTION = " &H104  %WM_SYSKEYDOWN"
    CASE %WM_SYSKEYUP
         FUNCTION = " &H105  %WM_SYSKEYUP"

    CASE %WM_SYSCHAR
         FUNCTION = " &H106  %WM_SYSCHAR"
    CASE %WM_SYSDEADCHAR
         FUNCTION = " &H107  %WM_SYSDEADCHAR"

    CASE %WM_KEYLAST
         FUNCTION = " &H108  %WM_KEYLAST"
    CASE %WM_INITDIALOG
         FUNCTION = " &H110  %WM_INITDIALOG"

    CASE %WM_COMMAND
         FUNCTION = " &H111  %WM_COMMAND  " + STR$(Msg.wparam)
    CASE %WM_SYSCOMMAND
         FUNCTION = "&H112  %WM_SYSCOMMAND"

    CASE %WM_TIMER
         FUNCTION = " &H113  %WM_TIMER"
    CASE %WM_HSCROLL
         FUNCTION = " &H114  %WM_HSCROLL"

    CASE %WM_VSCROLL
         FUNCTION = " &H115  %WM_VSCROLL"
    CASE %WM_INITMENU
         FUNCTION = " &H116  %WM_INITMENU"

    CASE %WM_INITMENUPOPUP
         FUNCTION = " &H117  %WM_INITMENUPOPUP"
    CASE %WM_MENUSELECT
         FUNCTION = " &H11F  %WM_MENUSELECT"

    CASE %WM_MENUCHAR
         FUNCTION = " &H120  %WM_MENUCHAR"
    CASE %WM_ENTERIDLE
         FUNCTION = " &H121  %WM_ENTERIDLE"

    CASE %WM_CTLCOLORMSGBOX
         FUNCTION = " &H132  %WM_CTLCOLORMSGBOX"
    CASE %WM_CTLCOLOREDIT
         FUNCTION = " &H133  %WM_CTLCOLOREDIT       "  + STR$(LOWRD(Msg.Lparam))
    CASE %WM_CTLCOLORLISTBOX
         FUNCTION = " &H134  %WM_CTLCOLORLISTBOX"

    CASE %WM_CTLCOLORBTN
         FUNCTION = " &H135  %WM_CTLCOLORBTN"
    CASE %WM_CTLCOLORDLG
         FUNCTION = " &H136  %WM_CTLCOLORDLG"

    CASE %WM_CTLCOLORSCROLLBAR
         FUNCTION = " &H137  %WM_CTLCOLORSCROLLBAR"
    CASE %WM_CTLCOLORSTATIC
         FUNCTION = " &H138  %WM_CTLCOLORSTATIC"

    CASE %WM_MOUSEFIRST,%WM_MOUSEMOVE
         FUNCTION = " &H200  %WM_MOUSEFIRST,%WM_MOUSEMOVE"
    CASE %WM_LBUTTONDOWN
         FUNCTION = " &H201  %WM_LBUTTONDOWN"

    CASE %WM_LBUTTONUP
         FUNCTION = " &H202  %WM_LBUTTONUP"
    CASE %WM_LBUTTONDBLCLK
         FUNCTION = " &H203  %WM_LBUTTONDBLCLK"

    CASE %WM_RBUTTONDOWN
         FUNCTION = " &H204  %WM_RBUTTONDOWN"
    CASE %WM_RBUTTONUP
         FUNCTION = " &H205  %WM_RBUTTONUP"

    CASE %WM_RBUTTONDBLCLK
         FUNCTION = " &H206  %WM_RBUTTONDBLCLK"
    CASE %WM_MBUTTONDOWN
         FUNCTION = " &H207  %WM_MBUTTONDOWN"

    CASE %WM_MBUTTONUP
         FUNCTION = " &H208  %WM_MBUTTONUP"
    CASE %WM_MBUTTONDBLCLK
         FUNCTION = " &H209  %WM_MBUTTONDBLCLK"

    CASE %WM_MOUSEWHEEL, %WM_MOUSELAST
         FUNCTION = " &H20A  %WM_MOUSEWHEEL, %WM_MOUSELAST"
    CASE %WM_PARENTNOTIFY
         FUNCTION = " &H210  %WM_PARENTNOTIFY"

    CASE %WM_ENTERMENULOOP
         FUNCTION = " &H211  %WM_ENTERMENULOOP"
    CASE %WM_EXITMENULOOP
         FUNCTION = " &H212  %WM_EXITMENULOOP"

    CASE %WM_SIZING
         FUNCTION = " &H214  %WM_SIZING"
    CASE %WM_CAPTURECHANGED
         FUNCTION = " &H215  %WM_CAPTURECHANGED"

    CASE %WM_MOVING
         FUNCTION = " &H216  %WM_MOVING"
    CASE %WM_POWERBROADCAST
         FUNCTION = " &H218  %WM_POWERBROADCAST"

    CASE %WM_DEVICECHANGE
         FUNCTION = " &H219  %WM_DEVICECHANGE"
    CASE %WM_MDICREATE
         FUNCTION = " &H220  %WM_MDICREATE"

    CASE %WM_MDIDESTROY
         FUNCTION = " &H221  %WM_MDIDESTROY"
    CASE %WM_MDIACTIVATE
         FUNCTION = " &H222  %WM_MDIACTIVATE"

    CASE %WM_MDIRESTORE
         FUNCTION = " &H223  %WM_MDIRESTORE"
    CASE %WM_MDINEXT
         FUNCTION = " &H224  %WM_MDINEXT"

    CASE %WM_MDIMAXIMIZE
         FUNCTION = " &H225  %WM_MDIMAXIMIZE"
    CASE %WM_MDITILE
         FUNCTION = " &H226  %WM_MDITILE"

    CASE %WM_MDICASCADE
         FUNCTION = " &H227  %WM_MDICASCADE"
    CASE %WM_MDIICONARRANGE
         FUNCTION = " &H228  %WM_MDIICONARRANGE"

    CASE %WM_MDIGETACTIVE
         FUNCTION = " &H229  %WM_MDIGETACTIVE"
    CASE %WM_MDISETMENU
         FUNCTION = " &H230  %WM_MDISETMENU"

    CASE %WM_DROPFILES
         FUNCTION = " &H233  %WM_DROPFILES"
    CASE %WM_MDIREFRESHMENU
         FUNCTION = " &H234  %WM_MDIREFRESHMENU"

    CASE %WM_MOUSEHOVER
         FUNCTION = " &H2A1  %WM_MOUSEHOVER"
    CASE %WM_MOUSELEAVE
         FUNCTION = " &H2A3  %WM_MOUSELEAVE"

    CASE %WM_CUT
         FUNCTION = " &H300  %WM_CUT"
    CASE %WM_COPY
         FUNCTION = " &H301  %WM_COPY"

    CASE %WM_PASTE
         FUNCTION = " &H302  %WM_PASTE"
    CASE %WM_CLEAR
         FUNCTION = " &H303  %WM_CLEAR"

    CASE %WM_UNDO
         FUNCTION = " &H304  %WM_UNDO"
    CASE %WM_RENDERFORMAT
         FUNCTION = " &H305  %WM_RENDERFORMAT"

    CASE %WM_RENDERALLFORMATS
         FUNCTION = " &H306  %WM_RENDERALLFORMATS"
    CASE %WM_DESTROYCLIPBOARD
         FUNCTION = " &H307  %WM_DESTROYCLIPBOARD"

    CASE %WM_DRAWCLIPBOARD
         FUNCTION = " &H308  %WM_DRAWCLIPBOARD"
    CASE %WM_PAINTCLIPBOARD
         FUNCTION = " &H309  %WM_PAINTCLIPBOARD"

    CASE %WM_VSCROLLCLIPBOARD
         FUNCTION = " &H30A  %WM_VSCROLLCLIPBOARD"
    CASE %WM_SIZECLIPBOARD
         FUNCTION = " &H30B  %WM_SIZECLIPBOARD"

    CASE %WM_ASKCBFORMATNAME
         FUNCTION = " &H30C  %WM_ASKCBFORMATNAME"
    CASE %WM_CHANGECBCHAIN
         FUNCTION = " &H30D  %WM_CHANGECBCHAIN"

    CASE %WM_HSCROLLCLIPBOARD
         FUNCTION = " &H30E  %WM_HSCROLLCLIPBOARD"
    CASE %WM_QUERYNEWPALETTE
         FUNCTION = " &H30F  %WM_QUERYNEWPALETTE"

    CASE %WM_PALETTEISCHANGING
         FUNCTION = " &H310  %WM_PALETTEISCHANGING"
    CASE %WM_PALETTECHANGED
         FUNCTION = " &H311  %WM_PALETTECHANGED"

    CASE %WM_HOTKEY
         FUNCTION = " &H312  %WM_HOTKEY"
    CASE %WM_PRINTCLIENT
         FUNCTION = " &H318  %WM_PRINTCLIENT"

    CASE %WM_PENWINFIRST
         FUNCTION = " &H380  %WM_PENWINFIRST"
    CASE %WM_PENWINLAST
         FUNCTION = " &H38F  %WM_PENWINLAST"

    CASE %WM_USER
         FUNCTION = " &H400  %WM_USER"
    CASE  %WM_ENTERSIZEMOVE
         FUNCTION  = "&H231  %WM_ENTERSIZEMOVE"

    CASE    %WM_EXITSIZEMOVE
        FUNCTION   = "&H232  %WM_EXITSIZEMOVE"
    CASE ELSE
         FUNCTION = STR$(hndl)+"  "+HEX$(hndl)
    END SELECT

END FUNCTION


'Show Variable Function
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
FUNCTION ShowVar (Var_label$, Var_value&) AS LONG          'FINISHED
   STATIC ControlCount&
   LOCAL i&,CntrlText$,NewLbl$,MatchLbl&,yy&
   MatchLbl&=0: yy&=ControlCount&*10+22
   IF  ControlCount& = 0 THEN

    DIALOG NEW 0, "VARIABLE DISPLAY",500,50, 137, yy&+4,%ws_border , TO hVDsp&
    CONTROL ADD FRAME ,hVDsp&,1000,"Variables",2,1,130,yy&, %ss_sunken,
    DIALOG SHOW MODELESS hVDsp&, 'CALL Var_Dspl()

   END IF
       NewLbl$=Var_label$+"   :"
        FOR i&= 1 TO ControlCount&+1
          CONTROL GET TEXT hVDsp&,(1100+i&) TO CntrlText$
             IF CntrlText$= NewLbl$ THEN

                 CONTROL SET TEXT hVDsp&,(1200+i&),STR$(Var_value&)
                 MatchLbl&=1
                 EXIT FOR
             END IF
        NEXT i&

        IF MatchLbl&=0   THEN

                 DIALOG SET SIZE hVDsp&,137,yy&+18
                 CONTROL SET SIZE hVDsp&,1000,130,yy&
                 CONTROL ADD LABEL ,hVDsp&,(1100+i&),NewLbl$,4,i&*10-10,60,10,%SS_RIGHT,
                 CONTROL ADD LABEL ,hVDsp&,(1200+i&),STR$(Var_value&),70,i&*10-10,60,10,,


                 INCR ControlCount&
        END IF

      SendMessage hVDsp&,%wm_paint,0,0
END FUNCTION
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~