'Program = MSFlexGrid_JRI
#Compile Exe "MSFlexGrid_JRI"
#Register None
#Dim All
'%DEBUG = 1
%UNICODE = 1
#If %Def(%UNICODE)
Macro ZStr = WStringz
Macro BStr = WString
%SIZEOF_CHAR = 2
#Else
Macro ZStr = Asciiz
Macro BStr = String
%SIZEOF_CHAR = 1
#EndIf
Type WndEventArgs
wParam As Long
lParam As Long
hWnd As Dword
hInst As Dword
End Type
Type GridInterfaces
pGrid As Dword Ptr
pSink As Dword Ptr
End Type
Type EditFlags
iRecords As Long
pEdits As Byte Ptr
End Type
'$DB_PATH = "C:\Program Files (x86)\Microsoft Visual Studio\VB98\db1.mdb"
$DB_PATH = "C:\Program Files\Microsoft Visual Studio\VB98\db1.mdb"
$DB_DRIVER = "Microsoft Access Driver (*.mdb)"
#Include "Windows.inc" ‘ use Jose Roca’s includes
#Include "OleCon.inc"
#Include "SqlIncs.inc"
#Include "CSql.inc"
#Include "MSFlexGridLib.inc"
#Include "MSFlexGridLibEvents.inc"
%ID_CONTAINER = 2000
Macro CObj(pUnk, dwAddr) = Poke Dword, Varptr(pUnk), dwAddr
#If %Def(%Debug)
Sub Prnt(strLn As BStr)
Local iLen, iWritten As Long
Local hStdOutput As Dword
Local strNew As BStr
hStdOutput=GetStdHandle(%STD_OUTPUT_HANDLE)
strNew=strLn + $CrLf
iLen = Len(strNew)
WriteConsole(hStdOutput, Byval Strptr(strNew), iLen, iWritten, Byval 0)
End Sub
#EndIf
Sub GridSetup(Byref pGrid As IMSFlexGrid, Byval iRecCt As Long)
pGrid.SelectionMode = 0
pGrid.AllowUserResizing = %AllowUserResizeSettings.flexResizeColumns
pGrid.FontName = "Times New Roman"
pGrid.FontSize = 10
pGrid.Cols = 9
pGrid.Rows = iRecCt
pGrid.ColWidth(0) = 200
pGrid.ColWidth(1) = 7000
pGrid.ColWidth(2) = 1350
pGrid.ColWidth(3) = 1600
pGrid.ColWidth(4) = 700
pGrid.ColWidth(5) = 3000
pGrid.ColWidth(6) = 3000
pGrid.ColWidth(7) = 2000
pGrid.ColWidth(8) = 4000
pGrid.Col = 1
pGrid.Row = 0
pGrid.Text = "Title"
pGrid.Col = 2
pGrid.Text = "Year Published"
pGrid.Col = 3
pGrid.Text = "ISBN"
pGrid.Col = 4
pGrid.Text = "PubID"
pGrid.Col = 5
pGrid.Text = "Description"
pGrid.Col = 6
pGrid.Text = "Notes"
pGrid.Col = 7
pGrid.Text = "Subject"
pGrid.Col = 8
pGrid.Text = "Comments"
End Sub
Function blnGetRecordCount(Byref pSql As ISql, Byref iRecCt As Long) As Long
Local szQuery As ZStr*64
Local hStmt As Dword
Local iJnk As Long
szQuery="SELECT Count(*) As RecordCount FROM Titles"
Call SQLAllocHandle(%SQL_HANDLE_STMT,pSql.hConn(),hStmt)
Call SQLBindCol(hStmt,1,%SQL_C_ULONG,iRecCt,0,iJnk)
Call SQLExecDirect(hStmt,szQuery,%SQL_NTS)
Call SQLFetch(hStmt)
Call SQLFreeHandle(%SQL_HANDLE_STMT,hStmt)
If iRecCt Then
Function=%True
Else
Function=%False
End If
End Function
Function blnLoadTitles(Byref pSql As ISql, Byref pGrid As IMSFlexGrid) As Long
Local szQuery As ZStr * 256
Local szTitle As ZStr * 256
Local szISBN As ZStr * 24
Local iYrPub As Integer
Local iPubID As Long
Local szDescription As ZStr * 128
Local szNotes As ZStr * 128
Local szSubject As ZStr * 128
Local szComments As ZStr * 256
Local iVar As Long
Local hStmt As Dword
Local iLen() As Long
Register i As Long
#If %Def(%Debug)
Prnt " Entering blnLoadTitles()"
#Endif
szQuery = "SELECT Title, [Year Published], ISBN, PubID, Description, Notes, Subject, Comments FROM Titles ORDER BY ISBN;
Redim iLen(8) As Long
Call SQLAllocHandle(%SQL_HANDLE_STMT,pSql.hConn(),hStmt)
Call SQLBindCol(hStmt,1,%SQL_C_WCHAR,szTitle,510,iLen(1))
Call SQLBindCol(hStmt,2,%SQL_C_SHORT,iYrPub,0,iLen(2))
Call SQLBindCol(hStmt,3,%SQL_C_WCHAR,szISBN,46,iLen(3))
Call SQLBindCol(hStmt,4,%SQL_C_LONG,iPubID,0,iLen(4))
Call SQLBindCol(hStmt,5,%SQL_C_WCHAR,szDescription,110,iLen(5))
Call SQLBindCol(hStmt,6,%SQL_C_WCHAR,szNotes,110,iLen(6))
Call SQLBindCol(hStmt,7,%SQL_C_WCHAR,szSubject,110,iLen(7))
Call SQLBindCol(hStmt,8,%SQL_C_WCHAR,szComments,510,iLen(8))
iVar=SQLExecDirect(hStmt,szQuery,%SQL_NTS)
If iVar=%SQL_SUCCESS Or iVar=%SQL_SUCCESS_WITH_INFO Then
i=1
pGrid.ColAlignment(1)=1
Do While SQLFetch(hStmt)<>%SQL_NO_DATA
pGrid.Row=i
pGrid.Col=1 : If iLen(1) Then pGrid.Text=szTitle
pGrid.Col=2 : If iLen(2) Then pGrid.Text=Str$(iYrPub)
pGrid.Col=3 : If iLen(3) Then pGrid.Text=szISBN
pGrid.Col=4 : If iLen(4) Then pGrid.Text=Str$(iPubID)
pGrid.Col=5 : If iLen(5) Then pGrid.Text=szDescription
pGrid.Col=6 : If iLen(6) Then pGrid.Text=szNotes
pGrid.Col=7 : If iLen(7) Then pGrid.Text=szSubject
pGrid.Col=8 : If iLen(8) Then pGrid.Text=szComments
Incr i
Loop
Call SQLFreeHandle(%SQL_HANDLE_STMT,hStmt)
Else
Call SQLFreeHandle(%SQL_HANDLE_STMT,hStmt)
Function=%False : Exit Function
End If
pGrid.Refresh()
Erase iLen()
#If %Def(%Debug)
Prnt " " & szQuery
Prnt " Leaving blnLoadTitles()"
#Endif
Function=%True
End Function
Function fnWndProc_OnCreate(Wea As WndEventArgs) As Long
Local pGridInterfaces As GridInterfaces Ptr
Local lpCreateStruct As CREATESTRUCT Ptr
Local pEvents As DMSFlexGridEventsImpl
Local pEditFlags As EditFlags Ptr
Local hContainer,hHeap As Dword
Local pFlexGrid As IMSFlexGrid
Local iRecordCount As Long
Local hr,hCtl As Long
Local pSql As ISql
#If %Def(%Debug)
Call AllocConsole()
Prnt "Entering fnWndProc_OnCreate()"
#EndIf
lpCreateStruct=Wea.lParam : Wea.hInst=@lpCreateStruct.hInstance
Call OC_WinInit()
hHeap=GetProcessHeap()
pGridInterfaces=HeapAlloc(hHeap,%HEAP_ZERO_MEMORY,sizeof(GridInterfaces))
If pGridInterfaces=0 Then
MsgBox("Memory Allocation Failure")
Function=-1 : Exit Function
End If
Call SetWindowLong(Wea.hWnd,0,pGridInterfaces)
hContainer=CreateWindowEx _
( _
0, _
$OC_ClassNAME, _
"MSFlexGridLib.MSFlexGrid;RTLKEY:72E67120-5959-11cf-91F6-C2863C385E30", _
%WS_CHILD OR %WS_VISIBLE, _
10, _
10, _
850, _
500, _
Wea.hWnd, _
%ID_CONTAINER, _
Wea.hInst, _
Byval %NULL _
)
If hContainer=0 Then
#If %Def(%Debug)
Prnt " hContainer=0"
#EndIf
Function=-1 : Exit Function
End If
pFlexGrid=OC_GetDispatch(hContainer)
If IsObject(pFlexGrid) Then
#If %Def(%Debug)
Prnt " pFlexGrid Is Something!"
#EndIf
pFlexGrid.AddRef()
@pGridInterfaces.pGrid=Objptr(pFlexGrid)
pEvents = Class "CDMSFlexGridEvents"
If IsObject(pEvents) Then
@pGridInterfaces.pSink=Objptr(pEvents)
Events From pFlexGrid Call pEvents
pSql=Class "CSql"
pSql.strDBQ=$DB_PATH
pSql.strDriver=$DB_DRIVER
Call pSql.ODBCConnect()
If pSql.blnConnected Then
If blnGetRecordCount(pSql, iRecordCount) Then
#If %Def(%Debug)
Prnt " pFlexGrid = " & Str$(Objptr(pFlexGrid))
Prnt " iRecordCount = " & Str$(iRecordCount)
#EndIf
iRecordCount=iRecordCount*1.01
pEditFlags=HeapAlloc(hHeap,%HEAP_ZERO_MEMORY,sizeof(EditFlags))
#If %Def(%Debug)
Prnt " iRecordCount = " & Str$(iRecordCount)
Prnt " pEditFlags = " & Str$(pEditFlags)
#EndIf
If pEditFlags Then
SetWindowLong(Wea.hWnd,4,pEditFlags)
@pEditFlags.iRecords=iRecordCount
@pEditFlags.pEdits=HeapAlloc(hHeap,%HEAP_ZERO_MEMORY,iRecordCount+1)
#If %Def(%Debug)
Prnt " @pEditFlags.iRecords = " & Str$(@pEditFlags.iRecords)
Prnt " @pEditFlags.pEdits = " & Str$(@pEditFlags.pEdits)
#EndIf
If @pEditFlags.pEdits Then
Call GridSetup(pFlexGrid,iRecordCount)
Call blnLoadTitles(pSql, pFlexGrid)
End If
End If
End If
pSql.ODBCDisconnect()
End If
#If %Def(%Debug)
Prnt " pGridInterfaces = " & Str$(pGridInterfaces)
Prnt " Objptr(pEvents) = " & Str$(Objptr(pEvents))
#EndIf
End If
End If
#If %Def(%Debug)
Prnt "Leaving fnWndProc_OnCreate()" & $CrLf
#EndIf
fnWndProc_OnCreate=0
End Function
Function blnUpdateRecord(Byval iRecord As Long, Byval pRecord As Byte Ptr, Byref Sql As ISql, Byref pGrid As IMSFlexGrid) As Long
Local strQuery, strField, strPrimaryKey As BStr
Local iReturn As Long
Local hStmt As Dword
Register i As Long
#If %Def(%Debug)
Prnt " Entering blnUpdateRecord()"
Prnt " Record #" & Str$(iRecord) & " Was Edited"
Prnt " @pRecord = " & Str$(@pRecord)
#EndIf
pGrid.Row=iRecord
strQuery="UPDATE Titles SET "
For i=0 To 7
If IsTrue(@pRecord And 2^i) Then
Select Case As Long i
Case 0
pGrid.Col=1
strField=pGrid.Text()
If InStr(1,strField,Chr$(39)) Then
Replace Chr$(39) With "''" In strField
End If
strQuery = strQuery & "Title=" & Chr$(39) & strField & Chr$(39) & ","
Case 1
pGrid.Col=2
strField=pGrid.Text()
strQuery = strQuery & "[Year Published]=" & strField & ","
Case 3
pGrid.Col=4
strField=pGrid.Text()
strQuery = strQuery & "PubID=" & strField & ","
Case 4
pGrid.Col=5
strField=pGrid.Text()
If InStr(1,strField,Chr$(39)) Then
Replace Chr$(39) With "''" In strField
End If
strQuery = strQuery & "Description=" & Chr$(39) & strField & Chr$(39) & ","
Case 5
pGrid.Col=6
strField=pGrid.Text()
If InStr(1,strField,Chr$(39)) Then
Replace Chr$(39) With "''" In strField
End If
strQuery = strQuery & "Notes=" & Chr$(39) & strField & Chr$(39) & ","
Case 6
pGrid.Col=7
strField=pGrid.Text()
If InStr(1,strField,Chr$(39)) Then
Replace Chr$(39) With "''" In strField
End If
strQuery = strQuery & "Subject=" & Chr$(39) & strField & Chr$(39) & ","
Case 7
pGrid.Col=8
strField=pGrid.Text()
If InStr(1,strField,Chr$(39)) Then
Replace Chr$(39) With "''" In strField
End If
strQuery = strQuery & "Comments=" & Chr$(39) & strField & Chr$(39) & ","
End Select
End If
Next i
strQuery=Left$(strQuery,Len(strQuery)-1)
pGrid.Col=3
strPrimaryKey=" WHERE ISBN=" & Chr$(39) & pGrid.Text() & Chr$(39) & ";"
strQuery=strQuery+strPrimaryKey
#If %Def(%Debug)
Prnt " strQuery = " & strQuery
#EndIf
Call SQLAllocHandle(%SQL_HANDLE_STMT,Sql.hConn(),hStmt)
iReturn=SQLExecDirect(hStmt,Byval Strptr(strQuery),%SQL_NTS)
If iReturn<>%SQL_SUCCESS And iReturn<>%SQL_SUCCESS_WITH_INFO Then
Sql.ODBCGetDiagRec(hStmt)
#If %Def(%Debug)
Prnt " iReturn = " & Str$(iReturn)
Prnt " %SQL_SUCCESS = " & Str$(%SQL_SUCCESS)
Prnt " %SQL_SUCCESS_WITH_INFO = " & Str$(%SQL_SUCCESS_WITH_INFO)
Prnt " Sql.iNativeErrCode = " & Str$(Sql.iNativeErrCode)
Prnt " Sql.strErrMsg = " & Sql.strErrMsg
Prnt " Sql.strErrCode = " & Sql.strErrCode
Prnt " Leaving blnUpdateRecord()"
#EndIf
Call SQLFreeHandle(%SQL_HANDLE_STMT,hStmt)
Function=%False : Exit Function
End If
Call SQLFreeHandle(%SQL_HANDLE_STMT,hStmt)
#If %Def(%Debug)
Prnt " Leaving blnUpdateRecord()"
#EndIf
Function=%True
End Function
Function blnInsertRecord(Byval iRecord As Long, Byval pRecord As Byte Ptr, Byref Sql As ISql, Byref pGrid As IMSFlexGrid) As Long
Local strQuery, strField As BStr
Local iReturn As Long
Local hStmt As Dword
Register i As Long
#If %Def(%Debug)
Prnt " Entering blnInsertRecord()"
Prnt " Record #" & Str$(iRecord) & " Was Edited"
Prnt " @pRecord = " & Str$(@pRecord)
Prnt $CrLf
#EndIf
pGrid.Row=iRecord
strQuery="INSERT INTO Titles ("
For i=0 To 7
If IsTrue(@pRecord And 2^i) Then
Select Case As Long i
Case 0
strQuery=strQuery+"Title,"
Case 1
strQuery=strQuery+"[Year Published],"
Case 2
strQuery=strQuery+"ISBN,"
Case 3
strQuery=strQuery+"PubID,"
Case 4
strQuery=strQuery+"Description,"
Case 5
strQuery=strQuery+"Notes,"
Case 6
strQuery=strQuery+"Subject,"
Case 7
strQuery=strQuery+"Comments,"
End Select
End If
Next i
strQuery=Left$(strQuery,Len(strQuery)-1)+") VALUES ("
For i=0 To 7
If IsTrue(@pRecord And 2^i) Then
Select Case As Long i
Case 0 ' Title
pGrid.Col=1
strField=pGrid.Text()
If InStr(1,strField,Chr$(39)) Then
Replace Chr$(39) With "''" In strField
End If
strQuery = strQuery & Chr$(39) & strField & Chr$(39) & ","
Case 1 ' [Year Published]
pGrid.Col=2
strField=pGrid.Text()
strQuery = strQuery & strField & ","
Case 2 ' ISBN
pGrid.Col=3
strField=pGrid.Text()
If InStr(1,strField,Chr$(39)) Then
Replace Chr$(39) With "''" In strField
End If
strQuery = strQuery & Chr$(39) & strField & Chr$(39) & ","
Case 3 ' PubID
pGrid.Col=4
strField=pGrid.Text()
strQuery = strQuery & strField & ","
Case 4 ' Description
pGrid.Col=5
strField=pGrid.Text()
If InStr(1,strField,Chr$(39)) Then
Replace Chr$(39) With "''" In strField
End If
strQuery = strQuery & Chr$(39) & strField & Chr$(39) & ","
Case 5 ' Notes
pGrid.Col=6
strField=pGrid.Text()
If InStr(1,strField,Chr$(39)) Then
Replace Chr$(39) With "''" In strField
End If
strQuery = strQuery & Chr$(39) & strField & Chr$(39) & ","
Case 6 ' Subject
pGrid.Col=7
strField=pGrid.Text()
If InStr(1,strField,Chr$(39)) Then
Replace Chr$(39) With "''" In strField
End If
strQuery = strQuery & Chr$(39) & strField & Chr$(39) & ","
Case 7 ' Comments
pGrid.Col=8
strField=pGrid.Text()
If InStr(1,strField,Chr$(39)) Then
Replace Chr$(39) With "''" In strField
End If
strQuery = strQuery & Chr$(39) & strField & Chr$(39) & ","
End Select
End If
Next i
strQuery=Left$(strQuery,Len(strQuery)-1) & ");"
#If %Def(%Debug)
Prnt " strQuery = " & strQuery
#EndIf
Call SQLAllocHandle(%SQL_HANDLE_STMT,Sql.hConn(),hStmt)
iReturn=SQLExecDirect(hStmt,Byval Strptr(strQuery),%SQL_NTS)
If iReturn<>%SQL_SUCCESS And iReturn<>%SQL_SUCCESS_WITH_INFO Then
Sql.ODBCGetDiagRec(hStmt)
#If %Def(%Debug)
Prnt " iReturn = " & Str$(iReturn)
Prnt " %SQL_SUCCESS = " & Str$(%SQL_SUCCESS)
Prnt " %SQL_SUCCESS_WITH_INFO = " & Str$(%SQL_SUCCESS_WITH_INFO)
Prnt " Sql.iNativeErrCode = " & Str$(Sql.iNativeErrCode)
Prnt " Sql.strErrMsg = " & Sql.strErrMsg
Prnt " Sql.strErrCode = " & Sql.strErrCode
#Else
iReturn=MsgBox(Sql.strErrMsg, %MB_ICONERROR, "I Don't Want To Sugar Coat It ...")
#EndIf
Call SQLFreeHandle(%SQL_HANDLE_STMT,hStmt)
Function=%False : Exit Function
End If
Call SQLFreeHandle(%SQL_HANDLE_STMT,hStmt)
#If %Def(%Debug)
Prnt " Leaving blnInsertRecord()"
Prnt $CrLf
#EndIf
Function=%True
End Function
Sub UpdateDatabase(Byval iRecords As Long, Byval pEdits As Byte Ptr, Byref pGrid As IMSFlexGrid)
Local blnDataEdited, iReturn As Long
Register i As Long
Local Sql As ISql
#If %Def(%Debug)
Prnt " Entering UpdateDatabase()"
Prnt " iRecords = " & Str$(iRecords)
Prnt " pEdits = " & Str$(pEdits)
#EndIf
For i = 1 To iRecords
If @pEdits[i] Then
blnDataEdited=%True
Exit For
End If
Next i
If blnDataEdited Then
Sql=Class "CSql"
Sql.strDBQ=$DB_PATH
Sql.strDriver=$DB_DRIVER
Call Sql.ODBCConnect()
If Sql.blnConnected Then
#If %Def(%Debug)
Prnt " Sql.blnConnected = True!"
#Endif
For i=1 To iRecords
If @pEdits[i] Then
If IsFalse(blnUpdateRecord(i,Varptr(@pEdits[i]),Sql,pGrid)) Then
If IsFalse(blnInsertRecord(i,Varptr(@pEdits[i]),Sql,pGrid)) Then
iReturn=MsgBox _
( _
"Failed To Update/Insert Record #" & Str$(i) & "!", _
%MB_ICONERROR, _
"I Don't Want To Sugar Coat It!" _
)
End If
End If
@pEdits[i]=0
End If
Next i
Sql.ODBCDisconnect()
End If
End If
#If %Def(%Debug)
Prnt " Leaving UpdateDatabase()"
#EndIf
End Sub
Function fnWndProc_OnDestroy(Wea As WndEventArgs) As Long
Local pGridInterfaces As GridInterfaces Ptr
Local pEvents As DMSFlexGridEventsImpl
Local pEditFlags As EditFlags Ptr
Local pGrid As IMSFlexGrid
Local hHeap As Dword
Local bFree As Long
#If %Def(%Debug)
Prnt $CrLf & "Entering fnWndProc_OnDestroy()"
#EndIf
pGridInterfaces=GetWindowLong(Wea.hWnd,0)
#If %Def(%Debug)
Prnt " pGridInterfaces = " & Str$(pGridInterfaces)
#EndIf
If pGridInterfaces Then
If @pGridInterfaces.pSink Then
CObj(pEvents,@pGridInterfaces.pSink)
Events End pEvents
Set pEvents=Nothing
End If
If @pGridInterfaces.pGrid Then
CObj(pGrid,@pGridInterfaces.pGrid)
hHeap=GetProcessHeap()
pEditFlags=GetWindowLong(Wea.hWnd,4)
If pEditFlags Then
#If %Def(%Debug)
Prnt " pFlexGrid = " & Str$(Objptr(pGrid))
Prnt " pEditFlags = " & Str$(pEditFlags)
Prnt " @pEditFlags.iRecords = " & Str$(@pEditFlags.iRecords)
#EndIf
If @pEditFlags.pEdits Then
#If %Def(%Debug)
Prnt " @pEditFlags.pEdits = " & Str$(@pEditFlags.pEdits)
#EndIf
Call UpdateDatabase(@pEditFlags.iRecords, @pEditFlags.pEdits, pGrid)
bFree=HeapFree(hHeap,0,@pEditFlags.pEdits)
#If %Def(%Debug)
Prnt " bFree = " & Str$(bFree)
#EndIf
End If
bFree=HeapFree(hHeap,0,pEditFlags)
#If %Def(%Debug)
Prnt " bFree = " & Str$(bFree)
#EndIf
End If
Set pGrid=Nothing
End If
bFree=HeapFree(hHeap,0,pGridInterfaces)
End If
Call PostQuitMessage(0)
#If %Def(%Debug)
Prnt "Leaving fnWndProc_OnDestroy()"
#EndIf
fnWndProc_OnDestroy=0
End Function
Function fnWndProc(ByVal hWnd As Long,ByVal wMsg As Long,ByVal wParam As Long,ByVal lParam As Long) As Long
Local Wea As WndEventArgs
Select Case As Long wMsg
Case %WM_CREATE
Wea.hWnd=hWnd : Wea.wParam=wParam : Wea.lParam=lParam
fnWndProc=fnWndProc_OnCreate(Wea)
Exit Function
Case %WM_DESTROY
Wea.hWnd=hWnd : Wea.wParam=wParam : Wea.lParam=lParam
fnWndProc=fnWndProc_OnDestroy(Wea)
Exit Function
End Select
fnWndProc=DefWindowProc(hWnd, wMsg, wParam, lParam)
End Function
Function WinMain(ByVal hInstance As Long, ByVal hPrevInst As Long, ByVal lpCmdLn As ZStr Ptr, ByVal iShow As Long) As Long
Local szAppName As ZStr*16
Local wc As WNDCLASSEX
Local Msg As tagMsg
Local hWnd As Dword
szAppName="OCX Test" : wc.cbSize=SizeOf(wc)
wc.lpfnWndProc=CodePtr(fnWndProc) : wc.cbWndExtra=8
wc.hInstance=hInstance : wc.hIcon=LoadIcon(%NULL,ByVal %IDI_APPLICATION)
wc.hCursor=LoadCursor(%NULL, ByVal %IDC_ARROW) : wc.hbrBackground=%COLOR_BTNFACE+1
wc.lpszClassName=VarPtr(szAppName)
Call RegisterClassEx(wc)
hWnd=CreateWindowEx(0,szAppName,"Try MSFlexGrid",%WS_OVERLAPPEDWINDOW Xor %WS_MAXIMIZEBOX,200,100,880,560,0,0,hInstance,ByVal 0)
Call ShowWindow(hWnd,iShow)
While GetMessage(Msg,%NULL,0,0)
Call TranslateMessage(Msg)
Call DispatchMessage(Msg)
Wend
#If %Def(%Debug)
MsgBox("Come And Get It Before I Throw It Out!")
#EndIf
Function=msg.wParam
End Function