Grafiske grensesnitt består av en rekke GUI elementer som kalles `widgets`. Dette kan være knapper,
<imgsrc="../../images/gui.png"alt="Bilde som viser en kurve tegnet med draw_arc funksjonen og endret farge"style="max-width:400px; width:100%;"/>
## Callback
Et «callback» er en funksjon som kalles etter en spesifikk hendelse har inntruffet. Disse brukes ofte med brukergrensesnitt, for eksempel for å spesifisere hva som skal skje etter brukeren har trykket på en knapp. Hvert GUI-element lar deg definere _én_ slik funksjon som blir kjørt etter hver interaksjon. Nøyaktig hvilken interaksjon er avhengig av GUI-elementet.
For å vise hvordan man definerer og bruker en callback funksjon, fortsetter vi med samme eksempelet som før:
Vi kan nå definere callback funksjonen. Den skal ha ingen parametere, og returnere `void`. Det er mulig å definere flere callback funksjoner i en enkelt fil, og navnet på funksjonene er ikke viktig. Flere GUI elementer kan ha samme callback funksjonen.
```c++
#include"std_lib_facilities.h"
#include"AnimationWindow.h"
#include"widgets/Button.h"
voidcallbackFunction(){
std::cout<<"This is printed when this function is executed."<<std::endl;
Den siste steget er å bruke `callbackFunction()` funksjonen som callback av knappen vi laget tidligere. Vi gjør dette ved å bruke `setCallback()` funksjonen, med navn på funksjonen som vi ønsker å bruke som parameter:
```c++
#include"std_lib_facilities.h"
#include"AnimationWindow.h"
#include"widgets/Button.h"
voidcallbackFunction(){
std::cout<<"This is printed when this function is executed."<<std::endl;
Her definerer `TDT4102::Point location` hvor knappen skal plasseres på skjermen, `width` og `height` størrelsen, og `label` teksten som skal vises på knappen. Vi bruker `add()` og `setCallback()` funksjonene å sørge for at knappen blir synlig i vinduet, og at det skjer noe når vi klikker på den.
Callback funksjonen blir kallet hver gang brukeren klikker på knappen.