Okno, przyciski i ich rysowanie - jakie obiekty i relacje utworzyć?

0

Chodzi o to, że tworzę sobie okno (a właściwie pasek), na którym będą przyciski różnych stanów (hovered, pushed, normal) zawierające ikonę i opcjonalnie tekst. No i jak zrobić zarządzanie tymi przyciskami tworzenie, usuwanie, zmiana stanu i rysowanie? Zastanawiam się jak utworzyć dobrze obiekty oraz relacje pomiędzy nimi.

Na razie moja koncepcja jest taka:
1.) Mam okno (opakowane w całości w klasę), które jest tymże paskiem.
2.) Obiekt nazwijmy go np. BtnInfo zawiera informacje o przycisku.
3.) Obiekt nazwijmy go np. BtnPainter rysujący przycisk - podaję mu wskaźnik do BtnInfo, i na tej podstawie wie już, gdzie narysować przycisk.
4.) Okno wykonuje główne operacje: tworzy obiekty BtnInfo i dodaje do listy przycisków (listy tych obiektów), obsługuje komunikaty (m.in kliknięcia) oraz "prosi" BtnPainter o narysowanie poszczególnych przycisków, gdy zachodzi taka potrzeba.

Co o tym myślicie? A może lepiej zrobić tak, by każdy button był oknem, które samo się rysuje, a główne okno jedynie zmienia pozycje i stany tych buttonów? Tylko czy to nie będzie przerost formy nad treścią, tzn. niepotrzebnie zwiększone zużycie zasobów?

I jeszcze jedno - to nie jest zwykła aplikacja okienkowa, a przyciski są tworzone m.in po otrzymaniu komunikatu od innych aplikacji. Nie chcę mówić co tworzę bo dałbym sobie rękę uciąć, że wtedy zrobi się offtop, wiem z doświadczenia.

0

Nie używam VCL.
A próbuję wynaleźć koło na nowo. Przynajmniej zobacz jak to VCL, czy dowolna inna tego typu biblioteka jest zbudowana: każda kontrolka ma własną klasę (np. Button), która dziedziczy po jakiejś wspólnej dla różnych kontrolek (nazwijmy Control) a metody takie jak rysowanie (Paint()) są wirtualne i wywoływane przez jakiś wyższy mechanizm (np. metodę Paint() całego okna).

0

U mnie też jest podobna hierarchia. A aplikacja, którą tworzę nie może być opierana o VCL z pewnych technicznych powodów. Tzn jakby ktoś się uparł to dałoby się, ale w tym przypadku jest to kiepski pomysł. Poza tym piszę w Visual C++ Express 2010. Użycia MFC i innych cudów też proszę mi nie proponować.

1 użytkowników online, w tym zalogowanych: 0, gości: 1