Witam,
po raz kolejny chciałbym prosić o rozwianie moich wątpliwości w zakresie WinApi ;-).
Tym razem pytanie dot. rejestracji klasy okna, którą (przypomnę) należy bezwzględnie wykonać przed utworzeniem okna. Na podstawie danej klasy może być stworzonych wiele okien.
W zasadzie jedyną rzeczą, którą wyróżnia każdą klasę to procedura okna oraz nazwa klasy, która jest przekazywana do funkcji CreateWindowEx()
i która musi być unikalna.
W moim mini-wrapperze WinApi procedura okna jest uniwersalna dla każdego tworzonego okna. Procedura jest uniwersalna tzn. że jest ta(ka) sama dla każdego tworzonego okna a jej zadaniem jest pobranie wskaźnika do obiektu klasy Window przekazanego w funkcji CreateWindowEx
w ostatnim parametrze. Następnie, mając wskaźnik do obiektu klasy Window wywoływana jest indywidualna procedura utworzonego okna.
W zasadzie to z powyższego wynika, że stosując powyższe rozwiązanie można robić wszystkie okna bazując na jednej klasie ... Chociaż nie wiem, czy to jest dobry pomysł - co Wy o tym sądzicie? Tak jak kontrolki tworzone są na bazie jednej klasy tak inne okna również chyba by mogły. Różnica polega tylko na tym, że ja mam uniwersalną procedurę ;-).
Inne rozwiązanie, które obecnie stosuję to rejestrowanie każdego utworzonego okna w metodzie Create()
klasy window.
Takie rozwiązanie ma tylko taką wadę, że rejestruje każdą utworzoną klasę - nawet jak tworzę dwa identyczne okna to każda jest oddzielnie rejestrowana. Pytanie, czy sama rejestracja pozbawia mnie jakiś zasobów lub czegoś podobnego?
Dodatkowo, dlatego, że nazwa klasy musi być unikalna, doszedłem do wniosku, że każdy obiekt klasy Window (i klasy pochodne) będę tworzyć nazwę automatycznie np. tak: wstring name = L"default_window_name" + ID_window;
. Zmienna ID_window jest statyczna i jest zwiększana o 1 w konstruktorze klasy Window. Takie rozwiązanie chyba zapewnia mi, że unikalność nazwy ;-) - ale czy są jakieś przeciwwskazania?
Co wy o tym sądzicie i jak Wy byście do tego podeszli? Niby można utworzyć kolejną metodę w klasie Window typu Register()
, ale czy jest sens?
Z góry dzięki za wasze komentarze.