Nie zawsze jest możliwość używania zewnętrznych bibliotek typu ncurses - dlatego piszę to1
Potrzebujesz klasy bazowej z tym, co dla Ciebie najważniejsze - pozycja oraz metoda do odświeżania.
typedef struct{
void(*Repaint)(void *);
int X, Y;
} Component;
void *new_Component(int x, int y){
Component *this = malloc(sizeof(Component));
this->X = x;
this->Y = y;
return this;
}
void delete_Component(Component *this){
free(this);
}
Przykładowy komponent będzie wyglądać tak:
typedef struct{
Component *Base;
const char *Text;
} Label;
void Label_Repaint(void *voidthis){
Label *this = voidthis;
Component *base = this->Base;
printf("Label \"%s\" at {%d, %d}", this->Text, base->X, base->Y);
}
void *new_Label(int x, int y, const char *text){
Label *this = malloc(sizeof(Label));
this->Base = new_Component(x, y);
this->Base->Repaint = Label_Repaint;
this->Text = text;
return this;
}
void delete_Label(Label *this){
delete_Component(this->Base);
free(this);
}
(http://ideone.com/s4SU03)
Co nas interesuje, to metoda Label_Repaint - musi być:
-
wywołana w odpowiednim momencie (gdy zmienia się coś na ekranie)
-
przystosowana do twojego GUI
Kroki w niej powinny wyglądać następująco:
Jedź kursorem w położenie komponentu
zamaluj odpowiednią długość tak, by nie było nic widać
Jedź kursorem w położenie komponentu
wypisz Text
Według schematu możesz stworzyć combobox oraz resztę potrzebnych komponentów
1 - Tak naprawdę napisałem to, bo chciałem zobaczyć jak się ma obiektowość w C :P