Code: Alles auswählen
;***************************************************************
;* WinAPI: Fenster erstellen und darin mit GDI zeichnen *
;* =========================================================== *
;* - Ausgabe von farbigen Rechteck, Ellipse, Linien *
;* - veraendert sich Fenstergroesse, wird Grafik angepasst *
;***************************************************************
;- Grundlage ist Beispiel aus "Einfache Windowsprogrammierung" von www.red-inferno.de
Global rc.RECT, hwnd
Procedure WndProc(wnd,Message,wParam,lParam)
returnval=0
Select Message
Case #WM_PAINT
; ---------- bestimmen der koordinaten (groesse clientarea) ----------
GetClientRect_(hwnd,rc)
; ---------- roten und gruenen pinsel definieren (fuellfarbe) ----------
hRedBrush = CreateSolidBrush_(RGB(255, 0, 0)) ;oder
hgreenbrush = CreateSolidBrush_(RGB(0, 255, 0))
; ---------- roten stift definieren ----------
hRedPen = CreatePen_(PS_SOLID, 30, RGB(255, 0, 0));
*DC=BeginPaint_(hwnd,ps.paintstruct)
; ---------- roten pinsel im DC eintragen und rechteck zeichnen ----------
SelectObject_(*DC, hRedBrush)
Rectangle_(*DC, rc\left, rc\top, rc\right, rc\bottom)
; ---------- gruenen pinsel im DC eintragen und ellipse zeichnen ----------
SelectObject_(*DC, hgreenbrush)
Ellipse_(*DC, rc\left+20, rc\top+20, rc\right-20, rc\bottom-20);
; ---------- rote linien zeichnen ----------
SelectObject_(*DC,hredbrush)
SelectObject_(*DC,hredpen)
MoveToEx_(*DC,rc\left,rc\top,#Null)
LineTo_(*DC,rc\right,rc\bottom)
MoveToEx_(*DC,rc\right,rc\top,#Null)
LineTo_(*DC,rc\left,rc\bottom)
EndPaint_(hwnd,@ps)
Case #WM_ERASEBKGND
returnval=1
Case #WM_CLOSE
DestroyWindow_(hWnd);
Case #WM_DESTROY:
PostQuitMessage_(0)
Default
Returnval = DefWindowProc_(wnd, Message, wParam, lParam)
EndSelect
ProcedureReturn returnval
EndProcedure
cn$="myclass" ;(c)lass(n)ame
wc.WNDCLASS
wc\cbClsExtra = 0
wc\cbWndExtra = 0
wc\hbrBackground = #COLOR_BACKGROUND
wc\hInstance = hInstance
wc\hIcon = LoadIcon_(0,#IDI_APPLICATION)
wc\hCursor = LoadCursor_(0, #IDC_CROSS)
wc\lpszMenuName = 0
wc\lpszClassName = @cn$
wc\lpfnWndProc = @WndProc()
wc\style = #CS_HREDRAW | #CS_VREDRAW
RegisterClass_(wc)
hwnd = CreateWindowEx_(0,cn$,"Zeichnen mit dem GDI",#WS_OVERLAPPEDWINDOW,150,350,600,350,0,0,hInstance,0)
ShowWindow_(hwnd, #SW_SHOWNORMAL)
UpdateWindow_(hwnd)
While GetMessage_(msg.MSG, #Null, 0, 0 )
TranslateMessage_(msg)
DispatchMessage_(msg)
Wend
End