JanetTerra
Jul 4, 2011
=ShapedDemo1.bas= This code accompanies the article [[ShapedWindow|Creating a Nonrectangular Window]] [[code format="lb"]] 'ShapedDemo1.bas - Janet Terra 'Demo to accompany 'Demo - Creating a Nonrectangular Window 'LBPE July, 2011 'Originally appeared in 'LB Newsletter #132, May, 2005 Nomainwin 'Define the Window WindowWidth = 500 WindowHeight = 500 UpperLeftX = int((DisplayWidth-WindowWidth)/2) UpperLeftY = int((DisplayHeight-WindowHeight)/2) graphicbox #ShapeWindow.gb, 0, 0, 500, 500 stylebits #ShapeWindow.gb, 0, _WS_BORDER, 0, 0 'Keep the Shaped Window in the Forefront stylebits #ShapeWindow, 0, 0, _WS_EX_TOPMOST, 0 open "Shape Window" for window_popup as #ShapeWindow #ShapeWindow "trapclose [closeShapeWindow]" 'Obtain the Handles and Device Controls hBw = hWnd(#ShapeWindow) hBgb = hWnd(#ShapeWindow.gb) hDCw = GetDC(hBw) hDCgb = GetDC(hBgb) 'Draw the Shape #ShapeWindow.gb "Down"Gosubgosub [drawShape] 'Set background to TransparentCallcall SetBkMode hDCgb, 1 'Release memoryCallcall ReleaseDC hBgb, hDCbg 'Format Text #ShapeWindow.gb "font Courier_New 14 Bold" #ShapeWindow.gb "color Black; place 120 150" #ShapeWindow.gb "\Alt-F4 to Close" #ShapeWindow.gb "flush"Waitwait [closeShapeWindow] 'Delete API created objects before closing programCallcall DelObject hBwCloseclose #ShapeWindowEndend [drawShape] 'Original values for hRgn is meaningless hRgn = RectRegion(0, 0, 0, 0) 'hRgn1 = Elliptical Source Region hRgn1 = EllipticRegion(100, 50, 200, 250) 'Paint the Ellipse Red brushColor1 = 255 'Red Brush hBrush1 = createBrush(brushColor1)Callcall SelObject hDCw, hBrush1Callcall PaintRegion hDCw, hRgn1Callcall DelObject hBrush1 'Set hRgn to the Combination of itself and hRgn1 newRgn = CombineRgn(hRgn, hRgn, hRgn1, _RGN_OR) 'Delete hRgn1Callcall DelObject hRgn1 'hRgn2 = Rectangular Source Region hRgn2 = RectRegion(150, 75, 300, 200) 'Paint the rectangle blue brushColor2 = 255 * 256^2 'Blue Brush hBrush2 = createBrush(brushColor2)Callcall SelObject hDCw, hBrush2Callcall PaintRegion hDCw, hRgn2Callcall DelObject hBrush2 'Set hRgn to the Combination of itself and hRgn2 newRgn = CombineRgn(hRgn, hRgn, hRgn2, _RGN_OR) 'Delete hRgn2Callcall DelObject hRgn2 'Set hRgn as the WindowCallcall SetWindowRgn hBw, hRgn, 1ReturnreturnFunctionfunction GetDC(hW)Calldllcalldll #user32, "GetDC", _ hW as ulong, _ GetDC as ulongEnd Functionend functionFunctionfunction RectRegion(ulx, uly, width, height)CallDLLcalldll #gdi32, "CreateRectRgn", _ ulx as long, _ uly as long, _ width as long, _ height as long, _ RectRegion as ulongEnd Functionend functionFunctionfunction EllipticRegion(ulx, uly, width, height)CallDLLcalldll #gdi32, "CreateEllipticRgn", _ ulx as long, _ uly as long, _ width as long, _ height as long, _ EllipticRegion as ulongEnd Functionend functionFunctionfunction CombineRgn(hDest, hSource1, hSource2, combineMode)CallDLLcalldll #gdi32, "CombineRgn", _ hDest as ulong, _ hSource1 as ulong, _ hSource2 as ulong, _ combineMode as long, _ CombineRgn as ulongEnd Functionend functionFunctionfunction createBrush(brushColor)Calldllcalldll #gdi32, "CreateSolidBrush", _ brushColor as long, _ createBrush as ulongEnd Functionend functionSubsub PaintRegion hDC, hRgnCalldllcalldll #gdi32, "PaintRgn", _ hDC as ulong, _ hRgn as ulong, _ null as longEnd Subend subSubsub DelObject hObjectCalldllcalldll #gdi32, "DeleteObject",_ hObject as ulong,_ null as longEnd Subend subSubsub SelObject hDC, hBrushCalldllcalldll #gdi32, "SelectObject", _ hDC as ulong, _ hBrush as ulong, _ null as longEnd Subend subSubsub ReleaseDC hWnd, hDCCalldllcalldll #user32,"ReleaseDC", _ hWnd as ulong,_ hDC as ulong, _ null as longEnd Subend subSubsub SetWindowRgn hWnd, hRgn, redrawModeCalldllcalldll #user32, "SetWindowRgn",_ hWnd as ulong,_ hRgn as ulong,_ redrawMode as boolean,_ SetWindowRgn as longEnd Subend subSubsub SetBkMode hDC, flagCalldllcalldll #gdi32, "SetBkMode", _ hDC as ulong,_ flag as long, _ null as longEnd Subend sub [[code]]