Older Version Newer Version

JanetTerra JanetTerra Jul 4, 2011

[[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" Gosub [drawShape] 'Set background to Transparent Call SetBkMode hDCgb, 1 'Release memory Call 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" Wait [closeShapeWindow] 'Delete API created objects before closing program Call DelObject hBw Close #ShapeWindow End [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) Call SelObject hDCw, hBrush1 Call PaintRegion hDCw, hRgn1 Call DelObject hBrush1 'Set hRgn to the Combination of itself and hRgn1 newRgn = CombineRgn(hRgn, hRgn, hRgn1, _RGN_OR) 'Delete hRgn1 Call 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) Call SelObject hDCw, hBrush2 Call PaintRegion hDCw, hRgn2 Call DelObject hBrush2 'Set hRgn to the Combination of itself and hRgn2 newRgn = CombineRgn(hRgn, hRgn, hRgn2, _RGN_OR) 'Delete hRgn2 Call DelObject hRgn2 'Set hRgn as the Window Call SetWindowRgn hBw, hRgn, 1 Return Function GetDC(hW) Calldll #user32, "GetDC", _ hW as ulong, _ GetDC as ulong End Function Function RectRegion(ulx, uly, width, height) CallDLL #gdi32, "CreateRectRgn", _ ulx as long, _ uly as long, _ width as long, _ height as long, _ RectRegion as ulong End Function Function EllipticRegion(ulx, uly, width, height) CallDLL #gdi32, "CreateEllipticRgn", _ ulx as long, _ uly as long, _ width as long, _ height as long, _ EllipticRegion as ulong End Function Function CombineRgn(hDest, hSource1, hSource2, combineMode) CallDLL #gdi32, "CombineRgn", _ hDest as ulong, _ hSource1 as ulong, _ hSource2 as ulong, _ combineMode as long, _ CombineRgn as ulong End Function Function createBrush(brushColor) Calldll #gdi32, "CreateSolidBrush", _ brushColor as long, _ createBrush as ulong End Function Sub PaintRegion hDC, hRgn Calldll #gdi32, "PaintRgn", _ hDC as ulong, _ hRgn as ulong, _ null as long End Sub Sub DelObject hObject Calldll #gdi32, "DeleteObject",_ hObject as ulong,_ null as long End Sub Sub SelObject hDC, hBrush Calldll #gdi32, "SelectObject", _ hDC as ulong, _ hBrush as ulong, _ null as long End Sub Sub ReleaseDC hWnd, hDC Calldll #user32,"ReleaseDC", _ hWnd as ulong,_ hDC as ulong, _ null as long End Sub Sub SetWindowRgn hWnd, hRgn, redrawMode Calldll #user32, "SetWindowRgn",_ hWnd as ulong,_ hRgn as ulong,_ redrawMode as boolean,_ SetWindowRgn as long End Sub Sub SetBkMode hDC, flag Calldll #gdi32, "SetBkMode", _ hDC as ulong,_ flag as long, _ null as long End Sub [[code]]