WinBatch Tech Support Home

Database Search

If you can't find the information using the categories below, post a question over in our WinBatch Tech Support Forum.

TechHome

Samples from Users
plus
plus
plus
plus
plus
plus
plus
plus
plus
plus
plus
plus
plus
plus
plus
plus

Can't find the information you are looking for here? Then leave a message over on our WinBatch Tech Support Forum.

Drawing Pictures using the GDI32.DLL

Keywords:   GDI32.DLL

Here's another interesting examples of making calls to the GDI32.DLL, for drawing pictures in dialogs.
winx1 = 100
winy1 = 100
winx2 = 900
winy2 = 900
wincoords = StrCat(winx1, ",", winy1, ",", winx2, ",", winy2)
BoxesUp(wincoords, @Normal)
UserDLL = (StrCat(DirWindows(1),"user32.dll"))
GDIDLL = (StrCat(DirWindows(1),"GDI32.dll"))
UserH = DllLoad (UserDLL)
GdiH = DllLoad (GDIDLL)
win = WinName()
hwnd = DllHwnd(win)
MM_TEXT = 1
MM_ISOTROPIC = 7
PS_DASH = 1                    
PS_DASHDOT = 3                 
PS_DASHDOTDOT = 4              
PS_DOT = 2                     
PS_INSIDEFRAME = 6
PS_NULL = 5
PS_SOLID = 0
GDI_ERROR = 65535
penWidth = 1
penStyle = PS_SOLID


hRgn = 0
bbMax = 100000
bb = BinaryAlloc(bbMax)

WinhDC = DllCall (Userh, long:"GetDC", long:hWnd)
MaxX = WinMetrics(0)
MaxY = WinMetrics(1)
MapMode = MM_Isotropic
OldMapMode = DllCall (GdiH, long:"SetMapMode", long:WinhDC, long:MapMode)
SizeStruct = BinaryAlloc(8)
nXextent = 1000
nYextent = 1000
result = DllCall (GdiH, long:"SetWindowExtEx", long:WinhDC, long:nXextent, long:nYextent, lpBinary:SizeStruct)
nXextent = MaxX
nYextent = MaxY
result = DllCall (GdiH, long:"SetViewportExtEx", long:WinhDC, long:nXextent, long:nYextent, lpBinary:SizeStruct)
Params = "128 128 128"
Gosub CreateBrush
FirstObject = DllCall (GdiH, long:"SelectObject", long:WinhDC, long:HBrush)

Params = "8 155 8"
Gosub CreateBrush
Params = "253 10 15 3 0"
Gosub CreatePen
Params = "100 100 250 250"
Gosub DrawEllipse
Params = "128 155 128"
Gosub CreateBrush

x1 = 100
y1 = 100
x2 = 250
y2 = 250
r = (y2 - y1) / 2 ;if a true circle
p1x = x1
p1y = y1 + r
i2 = x2
i1 = x1
for loop = i1+5 to i2 by 5
  p2x = loop
  temp = (r**2) - ((loop - i1 - r)**2)
  temp2 = sqrt(abs(temp))
  p2y = int(temp2) + i1 + r
  Params = "%x1%,%y1% %x2%,%y2% %p1x%,%p1y% %p2x%,%p2y%"
  Gosub DrawPie
;  TimeDelay(0.1)
next loop
for loop = i2 to i1 by -5
  p2x = loop
  temp = (r**2) - ((loop - i1 - r)**2)
  temp2 = sqrt(abs(temp))
  p2y = int(temp2) * -1 + i1 + r
  Params = "%x1%,%y1% %x2%,%y2% %p1x%,%p1y% %p2x%,%p2y%"
  Gosub DrawPie
;  TimeDelay(0.1)
next loop



BoxTitle("Press control key to exit.")
While @True
  TimeDelay(0.2)
  If IsKeyDown(@ctrl) then break
EndWhile
Dummy = DllCall (GdiH, long:"DeleteObject", long:HPen)
Dummy = DllCall (GdiH, long:"DeleteObject", long:HBrush)
Dummy = DllCall (GdiH, long:"SelectObject", long:WinhDC, long:FirstObject)
Dummy = DllCall (GdiH, long:"SetMapMode", long:WinhDC, long:OldMapMode)
Result = DllCall (Userh, long:"ReleaseDC", long:hWnd, long:WinhDC)

DllFree (GdiH)
DllFree (UserH)
BinaryFree(bb)
BinaryFree(SizeStruct)
EXIT

:CreateBrush
ParseData(Params)
If Param0 != 3 then Message("Incorrect # of parameters for CreateBrush", "3 needed, %Param0% sent")
r = Param1
g = Param2
b = Param3
brushColor = (0 << 24) | (b << 16) | (g << 8) | r
if IsDefined(HBrush) then Dummy = DllCall (GdiH, long:"DeleteObject", long:HBrush)
HBrush = DllCall (GdiH, long:"CreateSolidBrush", long:brushColor)
Params = HBrush
Gosub SelectObject
RETURN

:CreatePen
;params = Red Green Blue penWidth penStyle
ParseData(Params)
If Param0 < 3 || Param0 > 5 then Message("Incorrect # of parameters for CreatePen", "3 to 5 needed, %Param0% sent")
r = Param1
g = Param2
b = Param3
if Param0 > 3 then penWidth = Param4
if Param0 == 5 then penStyle = Param5
penColor = (0 << 24) | (b << 16) | (g << 8) | r
if IsDefined(HPen) then Dummy = DllCall (GdiH, long:"DeleteObject", long:HPen)
HPen = DllCall (GdiH, long:"CreatePen", long:penStyle, long:penWidth, long:penColor)
Params = HPen
Gosub SelectObject
RETURN

:SelectObject
ParseData(Params)
if Param0 != 1 then Message("Incorrect # of parameters for SelectObject", "1 needed, %Param0% sent")
LastObject = DllCall (GdiH, long:"SelectObject", long:WinhDC, long:Param1)
if LastObject == 0 || LastObject == GDI_ERROR
  Message("Last object error is:", LastObject)
endif
RETURN

:DrawEllipse
ParseData(Params)
if Param0 != 4 then Message("Incorrect # of parameters for Ellipse", "4 needed, %Param0% sent")
Result = DllCall (GdiH, long:"Ellipse", long:WinhDC, long:Param1, long:Param2, long:Param3, long:Param4)
;Result = DllCall (GdiH, long:"Ellipse", long:WinhDC, long:x1, long:y1, long:x2, long:y2)
if Result == 0 then Message("Ellipse failed", "")
RETURN

:DrawPie
Params = StrReplace(Params, ",", " ")
ParseData(Params)
if Param0 != 8 then Message("Incorrect # of parameters for Pie", "8 needed, %Param0% sent")
Result = DllCall (GdiH, long:"Pie", long:WinhDC, long:Param1, long:Param2, long:Param3, long:Param4, long:Param5, long:Param6, long:Param7, long:Param8)
if Result == 0 then Message("Pie failed", "")
RETURN


Article ID:   W14721
Filename:   Drawing Pictures using the GDI Dll_2.txt
File Created: 2001:03:13:16:35:36
Last Updated: 2001:03:13:16:35:36