Virtual Window code
- Posted by euman at bellsouth.net Aug 18, 2003
- 497 views
--Alt-Boundary-24756.22969406 Content-description: Mail message body Ok, I have about given up on the graphics codeing design built-into Win32lib so I have another Question. Why do my scrollbars automatically stop, Im sure its not that Im over the 65k limit... Here's updated code that actually (sorta) works... -- Author: Euman 2003 without warning include Win32Lib.ew constant xPatBlt = registerw32Function(gdi32, "PatBlt", {C_POINTER, C_INT, C_INT, C_INT, C_INT, C_LONG}, C_LONG), PATCOPY = #F00021 object junk constant MainWin = createEx( Window, "Virtual Window Demo", NULL, 25, 25, 640, 480, 0, 0), hWnd = getHandle( MainWin ) sequence InitExtent atom hdc, memdc, hbit, hbrush, ps hdc = 0 memdc = 0 integer vxScreen, vyScreen, x1, y1, x2, y2 vxScreen = 1280 vyScreen = 960 x1 = 0 y1 = 0 x2 = 640 y2 = 480 -- onOpen_MainWin procedure onCreate_MainWin( integer self, integer event, sequence parms ) hdc = w32Func( xGetDC, {hWnd} ) memdc = w32Func( xCreateCompatibleDC, {hdc} ) hbit = w32Func( xCreateCompatibleBitmap, { hdc, vxScreen, vyScreen } ) junk = w32Func( xSelectObject, {memdc, hbit} ) hbrush = w32Func( xGetStockObject, {WHITE_BRUSH}) junk = w32Func( xSelectObject, {memdc, hbrush} ) if not w32Func( xPatBlt, {memdc, 0, 0, vxScreen, vyScreen, PATCOPY}) then end if setScrollRange ( {MainWin, SB_HORZ}, 1, vxScreen ) setScrollRange ( {MainWin, SB_VERT}, 1, vyScreen ) setPenColor( MainWin, Green ) junk = w32Func(xRectangle, {memdc, 10, 10, 600, 415}) junk = w32Func( xReleaseDC, {hWnd, hdc} ) junk = w32Func( xInvalidateRect, {hWnd, NULL, 0} ) end procedure setHandler(MainWin, w32HActivate, routine_id("onCreate_MainWin")) integer pos, orgX, orgY orgX = 0 orgY = 0 procedure on_scroll( integer self, integer event, sequence parms ) pos = getHScrollPos( MainWin ) x1 = pos x2 += pos orgX = pos pos = getVScrollPos( MainWin ) y1 = pos y2 += pos orgY = pos junk = w32Func( xInvalidateRect, {hWnd, NULL, 0} ) end procedure setHandler(MainWin, w32HScroll, routine_id ("on_scroll")) ps = acquire_mem(0, SIZEOF_PAINTSTRUCT) -- onPaint_MainWin procedure onPaint_MainWin( integer self, integer event, sequence parms ) hdc = getDC( self ) if not w32Func( xBitBlt, {hdc, x1, y1, x2, y2, memdc, x1+orgX, y1+orgY, SRCCOPY} ) then end if end procedure setHandler(MainWin, w32HPaint, routine_id("onPaint_MainWin")) -- onClose_MainWin procedure onClose_MainWin( integer self, integer event, sequence parms ) junk = w32Func( xReleaseDC, {0, hdc} ) end procedure setHandler(MainWin, w32HClose, routine_id("onClose_MainWin")) WinMain( MainWin, Normal ) --Alt-Boundary-24756.22969406 Content-type: text/html; charset=US-ASCII Content-transfer-encoding: 7BIT Content-description: Mail message body <?xml version="1.0" ?><html> <head> <title></title> </head> <body> <div align="left"><font face="Arial"><span style="font-size:10pt">Ok, I have about given up on the graphics codeing design built-into</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt">Win32lib so I have another Question.</span></font></div> <div align="left"><br/> </div> <div align="left"><font face="Arial"><span style="font-size:10pt">Why do my scrollbars automatically stop, Im sure its not that Im over the 65k limit...</span></font></div> <div align="left"><br/> </div> <div align="left"><font face="Arial"><span style="font-size:10pt">Here's updated code that actually (sorta) works...</span></font></div> <div align="left"><br/> </div> <div align="left"><font face="Arial"><span style="font-size:10pt">-- Author: Euman 2003</span></font></div> <div align="left"><br/> </div> <div align="left"><font face="Arial"><span style="font-size:10pt">without warning</span></font></div> <div align="left"><br/> </div> <div align="left"><font face="Arial"><span style="font-size:10pt">include Win32Lib.ew</span></font></div> <div align="left"><br/> </div> <div align="left"><font face="Arial"><span style="font-size:10pt">constant</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt">xPatBlt = registerw32Function(gdi32, "PatBlt", {C_POINTER, C_INT, C_INT, C_INT, C_INT, C_LONG}, C_LONG),</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt">PATCOPY = #F00021</span></font></div> <div align="left"><br/> </div> <div align="left"><font face="Arial"><span style="font-size:10pt">object junk</span></font></div> <div align="left"><br/> </div> <div align="left"><font face="Arial"><span style="font-size:10pt">constant</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt">MainWin = createEx( Window, "Virtual Window Demo", NULL, 25, 25, 640, 480, 0, 0),</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt">hWnd = getHandle( MainWin )</span></font></div> <div align="left"><br/> </div> <div align="left"><font face="Arial"><span style="font-size:10pt">sequence InitExtent</span></font></div> <div align="left"><br/> </div> <div align="left"><font face="Arial"><span style="font-size:10pt">atom hdc, memdc, hbit, hbrush, ps</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> hdc = 0</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> memdc = 0</span></font></div> <div align="left"><br/> </div> <div align="left"><font face="Arial"><span style="font-size:10pt">integer vxScreen, vyScreen, x1, y1, x2, y2</span></font></div> <div align="left"><br/> </div> <div align="left"><font face="Arial"><span style="font-size:10pt"> vxScreen = 1280</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> vyScreen = 960</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> x1 = 0</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> y1 = 0</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> x2 = 640</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> y2 = 480</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> </span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt">-- onOpen_MainWin</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt">procedure onCreate_MainWin( integer self, integer event, sequence parms )</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> </span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> hdc = w32Func( xGetDC, {hWnd} )</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> memdc = w32Func( xCreateCompatibleDC, {hdc} )</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> hbit = w32Func( xCreateCompatibleBitmap, { hdc, vxScreen, vyScreen } )</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> junk = w32Func( xSelectObject, {memdc, hbit} ) </span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> hbrush = w32Func( xGetStockObject, {WHITE_BRUSH}) </span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> junk = w32Func( xSelectObject, {memdc, hbrush} ) </span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> </span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> if not w32Func( xPatBlt, {memdc, 0, 0, vxScreen, vyScreen, PATCOPY}) then end if </span></font></div> <div align="left"><br/> </div> <div align="left"><font face="Arial"><span style="font-size:10pt"> setScrollRange ( {MainWin, SB_HORZ}, 1, vxScreen )</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> setScrollRange ( {MainWin, SB_VERT}, 1, vyScreen )</span></font></div> <div align="left"><br/> </div> <div align="left"><font face="Arial"><span style="font-size:10pt"> setPenColor( MainWin, Green )</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> junk = w32Func(xRectangle, {memdc, 10, 10, 600, 415})</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> junk = w32Func( xReleaseDC, {hWnd, hdc} )</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> junk = w32Func( xInvalidateRect, {hWnd, NULL, 0} )</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> </span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt">end procedure</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt">setHandler(MainWin, w32HActivate, routine_id("onCreate_MainWin"))</span></font></div> <div align="left"><br/> </div> <div align="left"><font face="Arial"><span style="font-size:10pt">integer pos, orgX, orgY</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> orgX = 0 </span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> orgY = 0</span></font></div> <div align="left"><br/> </div> <div align="left"><font face="Arial"><span style="font-size:10pt">procedure on_scroll( integer self, integer event, sequence parms )</span></font></div> <div align="left"><br/> </div> <div align="left"><font face="Arial"><span style="font-size:10pt"> pos = getHScrollPos( MainWin )</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> x1 = pos x2 += pos orgX = pos</span></font></div> <div align="left"><br/> </div> <div align="left"><font face="Arial"><span style="font-size:10pt"> pos = getVScrollPos( MainWin )</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> y1 = pos y2 += pos orgY = pos</span></font></div> <div align="left"><br/> </div> <div align="left"><font face="Arial"><span style="font-size:10pt"> junk = w32Func( xInvalidateRect, {hWnd, NULL, 0} )</span></font></div> <div align="left"><br/> </div> <div align="left"><font face="Arial"><span style="font-size:10pt">end procedure</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt">setHandler(MainWin, w32HScroll, routine_id ("on_scroll"))</span></font></div> <div align="left"><br/> </div> <div align="left"><br/> </div> <div align="left"><font face="Arial"><span style="font-size:10pt">ps = acquire_mem(0, SIZEOF_PAINTSTRUCT)</span></font></div> <div align="left"><br/> </div> <div align="left"><font face="Arial"><span style="font-size:10pt">-- onPaint_MainWin</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt">procedure onPaint_MainWin( integer self, integer event, sequence parms )</span></font></div> <div align="left"><br/> </div> <div align="left"><font face="Arial"><span style="font-size:10pt"> hdc = getDC( self ) </span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> if not w32Func( xBitBlt, {hdc, x1, y1, x2, y2, memdc, x1+orgX, y1+orgY, SRCCOPY} ) then end if </span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> </span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt">end procedure</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt">setHandler(MainWin, w32HPaint, routine_id("onPaint_MainWin"))</span></font></div> <div align="left"><br/> </div> <div align="left"><br/> </div> <div align="left"><font face="Arial"><span style="font-size:10pt">-- onClose_MainWin</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt">procedure onClose_MainWin( integer self, integer event, sequence parms )</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> </span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt"> junk = w32Func( xReleaseDC, {0, hdc} ) </span></font></div> <div align="left"><br/> </div> <div align="left"><font face="Arial"><span style="font-size:10pt">end procedure</span></font></div> <div align="left"><font face="Arial"><span style="font-size:10pt">setHandler(MainWin, w32HClose, routine_id("onClose_MainWin"))</span></font></div> <div align="left"><br/> </div> <div align="left"><font face="Arial"><span style="font-size:10pt">WinMain( MainWin, Normal )</span></font></div> <div align="left"></div> --Alt-Boundary-24756.22969406--