' *******************************************************************
 '  BCXGUI Demonstration Program by MrBCX
 ' *******************************************************************
 '  GetBmp SaveBmp Demo added by Robert Wishlaw 2002/05/26
 ' *******************************************************************
 
 GUI  "Sample"
 
 DIM Form1 AS CONTROL
 DIM Group1 AS CONTROL
 DIM Button1 AS CONTROL
 DIM Button2 AS CONTROL
 DIM Button3 AS CONTROL
 DIM Edit1 AS CONTROL
 DIM Check1 AS CONTROL
 DIM Label1 AS CONTROL
 DIM Radio1 AS CONTROL
 DIM Radio2 AS CONTROL
 DIM Combo1 AS CONTROL
 DIM List1 AS CONTROL
 DIM Rect1 AS CONTROL
 DIM Rect2 AS CONTROL
 DIM Rect3 AS CONTROL
 DIM Date1 AS CONTROL
 DIM Rich1 AS CONTROL
 DIM Stat1 AS CONTROL
 DIM Bitm1 AS CONTROL
 DIM Ico1 AS CONTROL
 DIM LView1 AS CONTROL
 DIM Buffer$
 DIM Rect AS RECT
 DIM HDCBmp AS HDC
 DIM retval
 
 
 SUB FORMLOAD()
   CALL LoadBuffer1()
   '*************************************************************************
   Form1 = BCX_FORM("More Good Stuff!", 0, 0, 310, 250)
   Group1 = BCX_GROUP("Group", Form1, 100, 2, 2, 128, 75)
   Edit1 = BCX_EDIT("BCX Edit Box", Form1, 101, 5, 15, 72, 35)
   Button1 = BCX_BUTTON("Button 1", Form1, 102, 85, 10, 40, 15)
   Button2 = BCX_BUTTON("Button 2", Form1, 103, 85, 35, 40, 15)
   Check1 = BCX_CHECKBOX("Checkbox", Form1, 104, 5, 60, 50, 15)
   Radio1 = BCX_RADIO("Radio 1", Form1, 105, 65, 50, 60, 15)
   Radio2 = BCX_RADIO("Radio 2", Form1, 106, 65, 60, 60, 15)
   Label1 = BCX_LABEL("This is a label", Form1, 107, 5, 50, 60, 10)
   Combo1 = BCX_COMBOBOX("", Form1, 108, 135, 6, 73, 35)
   List1 = BCX_LISTBOX("", Form1, 109, 210, 6, 73, 35)
   Date1 = BCX_DATEPICK("", Form1, 110, 135, 55, 115, 10)
   Button3 = BCX_BUTTON("Capture BMP", Form1, 118, 135, 70, 70, 15)
   Rect1 = BCX_BLACKRECT("", Form1, 111, 135, 35, 10, 10)
   Rect2 = BCX_WHITERECT("", Form1, 112, 155, 35, 10, 10)
   Rect3 = BCX_GRAYRECT("", Form1, 113, 175, 35, 10, 10)
   Rich1 = BCX_RICHEDIT(Buffer$, Form1, 114, 5, 90, 190, 150)
   Bitm1 = BCX_BITMAP("demo.bmp", Form1, 115, 205, 175, 0, 0)
   Ico1 = BCX_ICON("demo.ani", Form1, 116, 190, 32, 0, 0)
   LView1 = BCX_LISTVIEW("", Form1, 117, 197, 90, 110, 100)
   Stat1 = BCX_STATUS("Ready", Form1)
   '*******************************************************************************
   SendMessage(Rich1, EM_SETBKGNDCOLOR, 0, 0)  ' Set background to black
   ListView_SetTextColor(LView1, RGB(0, 128, 0))   ' Set Listview text to green
   CALL FakeData()                              ' Put some data into our controls
   CENTER(Form1)                               ' Center it!
   SHOW(Form1)                               ' Show it!
 END SUB
 
 BEGIN EVENTS
   SELECT CASE CBMSG
     '**********************
   CASE WM_SIZE
     '***********************
     SendMessage(Stat1,CBMSG,CBWPARAM,CBLPARAM)   ' Babysit the status bar
     '**********************
   CASE WM_COMMAND
     '**********************
     IF CBCTL = 102 THEN
       CALL LoadBuffer1()
       SETWINDOWRTFTEXT(Rich1,Buffer$)
       SetWindowText(Stat1,"Button 1 Pressed")
       InvalidateRect(Form1,0,1)
       SHOW(Group1)
       SHOW(Button2)
       SHOW(Button3)
       SHOW(Edit1)
       SHOW(Check1)
       SHOW(Radio1)
       SHOW(Radio2)
       SHOW(Label1)
       SHOW(Combo1)
       SHOW(List1)
       SHOW(Date1)
       SHOW(Rect1)
       SHOW(Rect2)
       SHOW(Rect3)
       SHOW(Bitm1)
       SHOW(Ico1)
       SHOW(LView1)
     END IF
 
     IF CBCTL = 103 THEN
       CALL LoadBuffer2()
       SETWINDOWRTFTEXT(Rich1,Buffer$)
       SetWindowText(Stat1,"Button 2 Pressed")
       InvalidateRect(Form1,0,1)
       HIDE(Group1)
       HIDE(Button2)
       HIDE(Button3)
       HIDE(Edit1)
       HIDE(Check1)
       HIDE(Radio1)
       HIDE(Radio2)
       HIDE(Label1)
       HIDE(Combo1)
       HIDE(List1)
       HIDE(Date1)
       HIDE(Rect1)
       HIDE(Rect2)
       HIDE(Rect3)
       HIDE(Bitm1)
       HIDE(LView1)
       HIDE(Ico1)
     END IF
 
     IF CBCTL = 118 THEN
       ' Capture Client area of a window
       GetClientRect(Rich1,&Rect)
       HDCBmp = GETBMP(Rect.left, Rect.top, Rect.right - Rect.left, Rect.bottom - Rect.top, Rich1)
       ' Capture User defined area of a window
       '     HDCBmp = GetBmp(113, 58, 143, 54, Rich1)
       ' Capture User defined area of screen. NULL is HDC for screen
       '     HDCBmp = GetBmp(0, 0, 300, 200, NULL)
       SAVEBMP(HDCBmp,"richedit.bmp")
       ' IMPORTANT ! Release the device context resources back to the system.
       retval = DeleteDC(HDCBmp)
       SHELL  "start richedit.bmp"  ' This should start PaintBrush on all systems
     END IF
 
     EXIT FUNCTION
     '**********************
   CASE WM_CTLCOLOREDIT
     '**********************
     IF(CONTROL) lParam = Edit1 THEN
       FUNCTION = SetColor(RGB(0,255,0),RGB(0,0,0),CBWPARAM,CBLPARAM)
     END IF
     '**********************
   CASE WM_CLOSE
     '**********************
     IF MSGBOX("Are you sure?", "Quit Program!", MB_YESNO) = IDYES THEN
       DestroyWindow(Form1)
     END IF
     EXIT FUNCTION
   END SELECT
 END EVENTS
 
 SUB FakeData
   LOCAL(i, A$, B$)
 
   FOR i = 1 TO 100
     A$ = A$ & "Line number" & STR$(i) & CRLF$
   NEXT
 
   SetWindowText(Edit1, A$)
 
   FOR i = 97 TO 97 + 25
     A$ = "ListBox item " & UCASE$(CHR$(i))
     B$ = "ComboBox item " & UCASE$(CHR$(i))
     SendMessage(List1, LB_ADDSTRING, 0, A$)
     SendMessage(Combo1, CB_ADDSTRING, 0, B$)
   NEXT
 
   '==========================
   LOCAL j, lvItem AS LV_ITEM
   '==========================
 
   lvItem.mask = LVIF_TEXT
 
   WHILE DATA$[j] <> "EOD"
     lvItem.pszText   = DATA$[j]
     lvItem.iSubItem = 0
     ListView_InsertItem(LView1, &lvItem)
     INCR(j)
     lvItem.pszText   = DATA$[j]
     lvItem.iSubItem = 1
     ListView_SetItem(LView1, &lvItem)
     INCR(j)
     lvItem.pszText   = DATA$[j]
     lvItem.iSubItem = 2
     ListView_SetItem(LView1, &lvItem)
     INCR(j)
   END WHILE
 
   Set_ColumnText(LView1, 0, "First")
   Set_ColumnText(LView1, 1, "Last")
   Set_ColumnText(LView1, 2, "is on a")
 
   '=============================================
   DATA "Woodrow", "Wilson", "$100,000" 
   DATA "James", "Madison", "$  5,000" 
   DATA "Grover", "Cleveland", "$  1,000" 
   DATA "William", "McKinley", "$    500" 
   DATA "Benjamin", "Franklin", "$    100" 
   DATA "Ulysses", "Grant", "$     50" 
   DATA "Andrew", "Jackson", "$     20" 
   DATA "Alexander", "Hamilton", "$     10" 
   DATA "Abraham", "Lincoln", "$      5" 
   DATA "Thomas", "Jefferson", "$      2" 
   DATA "George", "Washington", "$      1" 
   DATA "---------", "----------", "-----------" 
   DATA "Dwight", "Eisenhower", "Dollar" 
   DATA "John", "Kennedy", "Half Dollar" 
   DATA "George", "Washington", "Quarter" 
   DATA "Franklin", "Roosevelt", "Dime" 
   DATA "Thomas", "Jefferson", "Nickle" 
   DATA "Abraham", "Lincoln", "Penny" 
   DATA "EOD" 
   '=============================================
 END SUB
 
 FUNCTION SetColor(ByVal TxtColr, ByVal BkColr, ByVal wParam, ByVal lParam) AS LRESULT
   STATIC DIM ReUsableBrush AS HBRUSH
   '**************************************************
   IF ReUsableBrush THEN DeleteObject(ReUsableBrush)
   '**************************************************
   ReUsableBrush = CreateSolidBrush(BkColr)
   SetTextColor((HDC)  wParam, TxtColr)
   SetBkColor  ((HDC)  wParam, BkColr)
   FUNCTION  =(LRESULT) ReUsableBrush
 END FUNCTION
 
 SUB LoadBuffer1()
   Buffer$ = ""
   Buffer$ = Buffer$ & "{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl"
   Buffer$ = Buffer$ & "{\f0\froman\fprq2\fcharset0 Times New Roman;}"
   Buffer$ = Buffer$ & "{\f1\froman\fprq2\fcharset0 Tahoma;}"
   Buffer$ = Buffer$ & "{\f2\fswiss\fprq2\fcharset0 Verdana;}}"
   Buffer$ = Buffer$ & "{\colortbl ;\red255\green255\blue0;"
   Buffer$ = Buffer$ & "\red0\green0\blue0;\red0\green255\blue255;"
   Buffer$ = Buffer$ & "\red128\green128\blue128;\red255\green0\blue0;"
   Buffer$ = Buffer$ & "\red0\green255\blue0;\red0\green0\blue255;"
   Buffer$ = Buffer$ & "\red255\green255\blue255;}"
   Buffer$ = Buffer$ & "\viewkind4\uc1\pard\qc\cf1\b\i\f0\"
   Buffer$ = Buffer$ & "fs72 BCX RICHEDIT\cf2\f1\par"
   Buffer$ = Buffer$ & "\cf3 Control\cf4\i0\f2\par"
   Buffer$ = Buffer$ & "\cf5\ul\b0 D\cf6 E\cf7 M\cf1 O\cf4\ulnone\par"
   Buffer$ = Buffer$ & "\par"
   Buffer$ = Buffer$ & "\cf8\fs20 by MrBCX 2001\par"
   Buffer$ = Buffer$ & "\par"
   Buffer$ = Buffer$ & "\par"
   Buffer$ = Buffer$ & "bcx homepage:\par"
   Buffer$ = Buffer$ & "http://www.users.qwest.net/~sdiggins/bcx.htm \cf4\par"
   Buffer$ = Buffer$ & "}"
 END SUB
 
 SUB LoadBuffer2()
   Buffer$ = ""
   Buffer$ = Buffer$ & "{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl"
   Buffer$ = Buffer$ & "{\f0\fnil\fcharset0 Times New Roman;}}"
   Buffer$ = Buffer$ & "{\colortbl ;\red255\green255\blue0;"
   Buffer$ = Buffer$ & "\red0\green255\blue0;"
   Buffer$ = Buffer$ & "\red0\green0\blue255;}"
   Buffer$ = Buffer$ & "\viewkind4\uc1\pard\f0\fs20\par\par"
   Buffer$ = Buffer$ & "\par\par\par"
   Buffer$ = Buffer$ & "\cf1\fs96     S\cf2 u\cf1 r\cf2 p\cf1 r\cf2 i\cf1 s"
   Buffer$ = Buffer$ & "\cf2 e\cf3 !\cf0\fs20\par\par\par}"
 END SUB
 
 SUB Set_ColumnText(ByVal hWnd AS HWND, ByVal Column, ByVal Text$)
   LOCAL lvc AS LV_COLUMN
   lvc.mask = LVCF_TEXT
   lvc.pszText = Text$
   SendMessage(hWnd, LVM_SETCOLUMN, Column, &lvc)
 END SUB