Obiekty pomocniczeMFC posiada wiele obiektów pomocniczych, które nie sÄ… w żaden sposób zwiÄ…zane z architekturÄ… programów pisanych przy użyciu...

Pokaż mi serce nie opętane zwodniczymi marzeniami, a pokażę ci człowieka szczęśliwego.

Klasy, takie jak: CFile lub CString, mogÄ… Ci jednak bardzo uÅ‚atwić tworzenie programów. OczywiÅ›cie nie bÄ™­dziesz musiaÅ‚ używać tych klas, jeÅ›li nie bÄ™dzie Ci to do niczego potrzebne. W koÅ„cu możesz przetwarzać Å‚aÅ„cuchy znaków za pomocÄ… normalnych tablic znakowych, a pliki obsÅ‚ugiwać za pomocÄ… klasycznych uchwytów lub strumieni dostÄ™pnych w C++. Może tak robić, ale jeÅ›li raz przyzwyczaisz siÄ™ do korzystania z klas MFC, zapewne bÄ™dziesz wolaÅ‚ ich używać.
JednÄ… z najwiÄ™kszych zalet MFC jest fakt, iż biblioteka ta zna swoje wÅ‚asne możliwoÅ›ci i ograniczenia. MFC zdaje sobie sprawÄ™ z tego, że nie jest w stanie zrobić wszystkiego, i że od czasu do czasu bÄ™dziesz musiaÅ‚ skorzystać bezpoÅ›rednio z API systemu Win­dows lub z funkcji dostÄ™pnych w dodatkowej bibliotece DLL. Dlatego też niektóre kla­sy mogÄ… być bardzo Å‚atwo konwertowane na inne, odpowiadajÄ…ce im typy danych sto­sowanych w programach nie korzystajÄ…cych z MFC.
Doskonałym przykładem takiego działania jest klasa CString. Obiekty tej klasy doskonale wiedzą w jaki sposób mogą zostać zamienione w stały wskaźnik na znak. Oznacza to że obiektów klasy CString możesz używać wszędzie tam, gdzie wcześniej używałeś wskaźnika na niemodyfikowalny łańcuch znaków. Takiego łańcucha znaków nie możesz zmodyfikować, gdyż klasa CString nie byłaby w stanie określić długości łańcucha. Swoją drogą, jeśli będziesz potrzebował dostępu do wskaźnika na znak, którego zawartość możesz zmodyfikować, to możesz posłużyć się metodą GetBuffer, określając jednocześnie ilość znaków, na której będzie można operować.
Innym przykÅ‚adem klas, które bardzo Å‚atwo można poddawać konwersjom, sÄ… klasy CRect, CPoint oraz CSize. Klasy te wyprowadzone zostaÅ‚y ze struktur danych używanych w systemie Windows - RECT, POINT oraz SIZE. Nic nie stoi na przeszkodzie, aby klasa byÅ‚a wyprowadzona ze struktury - jest to jak najbardziej legalne. CaÅ‚y kruczek wymienionych powyżej klas polega na tym, iż MFC nie dodaje do nich żadnych dodat­kowych skÅ‚adowych - ani danych ani funkcji wirtualnych. DziÄ™ki temu, instancje tych klas w C++ bÄ™dÄ… identyczne jak struktury definiowane w C. Oznacza to, że możesz taktować RECT jako CRect, i na odwrót. Jest to bardzo wygodne. Jednakże ze wzglÄ™du na to, iż klasy te nie majÄ… funkcji wirtualny, nie dziaÅ‚ajÄ… one jak wiÄ™kszość klas MFC (patrz sekcja Pomoc ze strony klasy CObject, znajdujÄ…ca siÄ™ w dalszej części rozdziaÅ‚u).
 
Obiekty klasy CWnd
SpoÅ›ród wszystkich obiektów pomocniczych, żadne nie sÄ… tak istotne, jak obiekty klasy CWnd. Klasa ta używana jest w MFC jako reprezentacja wszystkich okien (w tym wido­ków oraz ramek, które także sÄ… wyprowadzone z tej klasy).
Pracując z obiektami tej klasy musisz być świadomy kilku rzeczy. Po pierwsze, nie myśl o tych obiektach jako o rzeczywistych oknach, gdyż nimi nie są. Są one obiektami C++ zawierającymi okna. Ja przyzwyczaiłem się do myślenia o obiektach klasy CWnd jako o butelkach. Gdy stworzysz butelkę, jest ona początkowo pusta. Butelkę tę możesz wypełnić - stworzyć w niej nowe okno - używając do tego odpowiednich funkcji (Create, DoModal lub LoadFrame). Możesz także skojarzyć istniejące już okno z obiektem klasy CWnd.
Załóżmy, że dysponujesz uchwytem do okna, i że chciaÅ‚byÅ› taktować go jako obiekt klasy CWnd. JeÅ›li potrzebujesz go tylko na chwilkÄ™, wskaźnik do obiektu CWnd możesz uzyskać za pomocÄ… statycznej metody CWnd::FromHandle. JeÅ›li okno ma już odpo­wiadajÄ…cy mu obiekt klasy CWnd, metoda FromHandle zwraca wskaźnik do tego obiektu. JeÅ›li okno nie ma skojarzonego z nim obiektu MFC, metoda ta powoduje stworzenie tymczasowego obiektu skojarzonego z tym oknem. PamiÄ™taj jednak, że takie obiekty klasy CWnd nie obsÅ‚ugujÄ… żadnych komunikatów. Co wiÄ™cej - MFC automa­tycznie usunie taki obiekt niedÅ‚ugo po zakoÅ„czeniu obsÅ‚ugiwania aktualnego komunikatu. Nie możesz wiÄ™c zapamiÄ™tać takiego wskaźnika i używać go później.
Jeśli chcesz skojarzyć okno z obiektem klasy CWnd w bardziej trwały sposób, musisz użyć metody SubclassWindow (lub SubclassDlgltem). Metoda ta kojarzy okno 7. obiektem klasy CWnd, aktywuje pętlę obsługi komunikatów i pozwala Ci na pracę z tak stworzonym obiektem, jak gdyby został on stworzony przez MFC.
Jak widać, Å‚atwo jest przeksztaÅ‚cić uchwyt do okna w obiekt klasy CWnd. PrzeksztaÅ‚cenie w przeciwnym kierunku jest jeszcze Å‚atwiejsze. Uchwyt do okna jest zawsze przecho­wywany w publicznej zmiennej skÅ‚adowej m_hWnd klasy CWnd. Jest to kolejny przykÅ‚ad, ilustrujÄ…cy jak MFC umożliwia współpracÄ™ ze standardowymi funkcjami AP1 systemu Windows.
Stworzenie obiektu klasy CWnd nie jest tym samym, co stworzenie okna. Proces ten okreÅ›lany jest mianem “tworzenia dwuetapowego". Polega ono na tym, iż w pierwszej kolejnoÅ›ci tworzysz obiekt C++, a nastÄ™pnie wywoÅ‚ujesz metodÄ™ Create (lub innÄ…) w celu stworzenia okna skojarzonego z obiektem klasy CWnd. Takie postÄ™powanie za­pewnia klasie CWnd maksymalnÄ… elastyczność. Pozwala ono na tworzenie zupeÅ‚nie nowych okien lub kojarzenie okien już istniejÄ…cych z obiektami klasy CWnd. Co wiÄ™cej, kod sÅ‚użący do tworzenia okien umieszczony jest wewnÄ…trz funkcji, co pozwala na Å‚atwe zasygnalizowanie powstania bÅ‚Ä™du. Jak wiadomo, w jÄ™zyku C++ konstruktory klas nie mogÄ… zwracać żadnych wartoÅ›ci, co utrudnia sygnalizowanie powstania bÅ‚Ä™du podczas dziaÅ‚ania konstruktora.
Copyright (c) 2009 Pokaż mi serce nie opętane zwodniczymi marzeniami, a pokażę ci człowieka szczęśliwego. | Powered by Wordpress. Fresh News Theme by WooThemes - Premium Wordpress Themes.