Flackern bei Größenänderung des Fensters
Verfasst: 25.02.2007 16:25
Ich erstelle mit den Winapi-Funktionen ein Fenster und fülle dieses mit einer einfachen Grafik aus. Während der Größenänderung passt sich die Grafik ständig der neuen Größe an. Dabei flackert es sehr deutlich. Kann man dieses Flackern eigentlich verhindern ?
Hardy
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