jankustosz Temat założony przez niniejszego użytkownika |
» 2015-06-08 22:33:55 zobaczyłem na to http://cpp0x.pl/kursy/Wzorce-projektowe/Wzorce-kreacyjne/singleton/161 Z tego zrozumiałem to singleton stosuje się gdy wystarczy tylko jeden objekt klasy. Zrobiono więc funkcję zwracającą statyczny objekt samej siebie. Ale co to ma wspólnego z moimi zmiennymi globalnymi. Chcę uniwersalnie opakować WinApi w klasy a nie robić dla każdej kontrolki specjalnego geta który ją zwraca. |
|
pekfos |
» 2015-06-08 22:51:47 Chcę uniwersalnie opakować WinApi w klasy |
Nie masz pojęcia, o czym mówisz. Z tego zrozumiałem to singleton stosuje się gdy wystarczy tylko jeden objekt klasy. |
Gdy może być tylko jeden obiekt klasy. W całe te zmienne globalne wlazłeś tylko dlatego, że musisz działać na jednej procedurze okna. a nie robić dla każdej kontrolki specjalnego geta który ją zwraca. |
Więc nie upieraj się przy jednej konstrukcji jaką znasz. Skoro chcesz uniwersalnie, to zastanów się, po co w ogóle są ci potrzebne te zmienne i ich nazwy. Jeśli możesz działać na nienazwanych, bliżej nieznanych obiektach, to jest to bardziej uniwersalne rozwiązanie, bo wystarczy ci znać adresy obiektów, a te mogą być sobie utworzone gdziekolwiek. Nie zapominaj, co cię ogranicza.. |
|
jankustosz Temat założony przez niniejszego użytkownika |
» 2015-06-08 23:23:19 To ty byś zrobił coś w rodzaju GetElement(int id) czy jak? |
|
pekfos |
» 2015-06-08 23:38:00 Po co chcesz pobierać kontrolki? Dla kompletności, taki mechanizm nie zaszkodzi, ale w normalnych warunkach raczej ma się dostęp do obiektów kontrolek, bo nie powinny być wbite w klasę okna. |
|
jankustosz Temat założony przez niniejszego użytkownika |
» 2015-06-09 16:22:09 To w takim razie jak byś uniknął zmiennych globalnych. Są tylko dwie może trzy możliwości aby WndProc miała dostęp do objektów. 1) Zmienna globalna. 2) Nadawanie kontrolką identyfikatory i zrobienie funkcji która zwraca kontrolkę o danym id. 3) Zamiast robić zmienne globalne można zrobić globalny vector wskaźników i w main do niego zapisywać co chcemy.
Skoro piszesz że każda z tych opcji jest zła to ty napisz swój pomysł. |
|
Monika90 |
» 2015-06-09 16:52:03 Te trzy sposoby to jest naprawdę jeden sposób.
A WinAPI ma funkcje Get/SetWindowLongPtr i parametr GWLP_USERDATA. Można z tego skorzystać, by przekazać coś (np. wskaźnik this) do procedury okna.
PS. W słowie obiekty nie ma litery j.
|
|
jankustosz Temat założony przez niniejszego użytkownika |
» 2015-06-09 17:03:52 To w main użyć SetWindowLongPtr a w procedurze okna jak to się profesjonalnie nazywa użyć GetWindowLongPtr, tak? |
|
Monika90 |
» 2015-06-09 17:38:18 Tak. Możesz wywołać SetWindowLongPtr po CreateWindowEx, a w procedurze okna GetWindowLongPtr i sprawdzasz czy nie zwróciło NULL. To wprawdzie oznacza, że nie będziesz miał dostępu do GWLP_USERDATA przy obsłudze pierwszych kilku komunikatów, ale to nie powinno Ci przeszkadzać.
|
|
1 « 2 » 3 4 |