Here's a simple GDI example that clears a window, and draws a line and text, with no flickering when the window is resized.
Strict Extern "win32" Function ReleaseDC( hwnd:Int, hdc:Int ) Function GetCurrentObject( hdc:Int, objectType:Int ) Function MoveToEx( hdc:Int, x:Int, y:Int, point:Int ) Function LineTo( hdc:Int, x:Int, y:Int ) Function CreatePen:Int(fnPenStyle:Int,nWidth:Int,crColor:Int) Function FillRect(hdc:Int,rect:Byte Ptr,hbr:Int) Function GetDeviceCaps(hdc%,index%) Function DrawTextA(hdc%,txt$z,nCount%,tRECT:Byte Ptr,format%) Function MulDiv(nNumber%,nNumerator%,nDenominator%) Function SetBkMode(hdc%,mode%) Function SetTextColor(hdc%,color%) Function CreateFontA(nHeight%,nWidth%,nEscapement%,nOrientation%,fnWeight%,fdwItalic%,fdwUnderline%,fdwStrikeOut%,fdwCharSet%,fdwOutputPrecision%,fdwClipPrecision%,fdwQuality%,fdwPitchAndFamily%,lpszFace$z) EndExtern Global win:TGadget = CreateWindow("LineTest", 0,0, 400,400 ) Global canvas:TGadget = CreateCanvas( 0,0,400,400, win ) SetGadgetLayout canvas,1,1,1,1 SetGraphics CanvasGraphics(canvas) Local g:TGadget=CreateComboBox(200,200,100,26,canvas) SetGadgetLayout g,1,0,1,0 AddGadgetItem g,"Test" SelectGadgetItem g,0 AddHook EmitEventHook,hook While WaitEvent() Select EventID() Case EVENT_WINDOWCLOSE End EndSelect Wend Function Hook:Object(id:Int,data:Object,context:Object) Local event:TEvent=TEvent(data) If Not event Return data Select event.id Case EVENT_GADGETPAINT,EVENT_WINDOWSIZE SetGraphics CanvasGraphics(canvas) GDICls() gdiDrawLine(10,10,200,100) Return EndSelect Return data EndFunction Function gdiCls() Local pen:Int=CreatePen(0,10,$00FF0000) Local hwnd:Int=QueryGadget( canvas, QUERY_HWND ) Local hdc:Int=GetDC( hwnd ) SelectObject(hdc,pen) fillrect hdc,[0,0,GraphicsWidth(),GraphicsHeight()],pen ReleaseDC(hwnd, hdc) DeleteObject( pen ) EndFunction Function gdiDrawLine(x#,y#,x2#,y2#,draw_last_pixel=True) Local pen:Int=CreatePen(0,1,$0000FF00) Local hwnd:Int=QueryGadget( canvas, QUERY_HWND ) Local hdc:Int=GetDC( hwnd ) SelectObject(hdc,pen) MoveToEx(hdc,x,y,0) LineTo(hdc,x2,y2) gdiDrawText "Hello",0,0 ReleaseDC(hwnd, hdc) DeleteObject( pen ) EndFunction Function gdiDrawText(text$,x,y) Local hwnd:Int=QueryGadget(canvas,QUERY_HWND) Local hdc:Int=GetDC( hwnd ) Local size=12 Const LOGPIXELSYS = 90 Const DEFAULT_CHARSET = 1 Const OUT_DEFAULT_PRECIS = 0 Const CLIP_DEFAULT_PRECIS = 0 Const PROOF_QUALITY = 2 Const DEFAULT_PITCH = 0 Local weight%=FW_NORMAL , italics%=False , underline%=False Local textformat=0 Const DT_NOCLIP=$100 Local width,height Local fontobject%=CreateFontA(-MulDiv(size,GetDeviceCaps(hdc,LOGPIXELSYS),72), 0, 0, 0, weight, italics, underline, False, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH, "Arial") SelectObject hdc,fontobject SetTextColor hdc, 255 | 0 Shl 8 | 0 Shl 16 Local tf%=TextFormat|DT_NOCLIP If width>0 And height>0 tf=TextFormat SetBkMode hdc,$1 DrawTextA hdc,text$,text.Length,[x,y,x+width,y+height],tf EndFunction