W przypadku standardowych właściwości otoczenia, MFC dostarcza prostych funkcji, zwracających ich wartości (patrz tabela 8.1). Możesz także uzyskać wartość każdej właściwości otoczenia; służy do tego funkcja GetAmbientProperty. Oczywiście musisz wtedy znać identyfikator DISPID danej właściwości. Tabela 8.1. Standardowe funkcje zwracające właściwości otoczenia. Funkcja AmbientAppearance AmbientBackColor AmbientDisplayName AmbientFont AmbientForeColor AmbientLocaleID AmbientScale Units AmbientTextAlign AmbientUserMode AmbientUIDead AmbientShowGrabHandles AmbientShowHatching Dodawanie metod Gdy zechcesz dodać metodę, na zakładce Automation ClassWizarda kliknij na przycisku AddMethod. Pojawi się okno dialogowe, które możesz wykorzystać do stworzenia metod (rys. 8.4). Każda metoda może posiadać do 16 parametrów. Jeśli prawidłowo korzystasz z właściwości, niezbyt często będziesz używał metod. Przypuśćmy, że chcesz stworzyć metodę o nazwie Open, służącą do otwarcia pliku. Dlaczego zamiast niej nie miałbyś dostarczyć właściwości FileName? Wtedy, gdy właściwość się zmieni, możesz przeprowadzić otwarcie pliku. Przeglądarka WWW nie współpracuje bezpośrednio z metodami kontrolek, jednak języki skryptów potrafią je wywoływać. Strony i serwery WWW mogą wykorzystać języki skryptów do zarządzania skomplikowaną zawartością HTML, zawierającą także kontrolki ActiveX. Dodawanie zdarzeń Dzięki ClassWizardowi dodawanie zdarzeń jest bardzo łatwe. Najpierw kliknij na zakładce ActiveX Events. Następnie nazwij zdarzenie (lub wybierz nazwę zdarzenia magazynowego). Zdarzenia mogą przyjąć do 15 argumentów, podawanych w dolnej części okna (rys. 8.8). ClassWizard automatycznie generuje kompletną funkcję odpalającą zdarzenie (nazwa funkcji rozpoczyna się od słowa Fire, na przykład FireClick). Nie musisz robić nic więcej. Gdy chcesz odpalić zdarzenie, po prostu wywołaj funkcję odpalającą. Oczywiście musisz przekazać odpowiednie argumenty, zgodnie z tymi, które określiłeś podczas tworzenia zdarzenia. Standardowy kod MFC domyślnie odpala kilka magazynowych zdarzeń. I tak, gdy kontrolka wykryje wciśnięcie klawisza (komunikat WM_CHAR), wywołuje funkcję FireKeyPress, chyba że przesłoniłeś komunikat OnChar i nie wywołujesz klasy podstawowej. W tabeli 8.2 znajdziesz listę komunikatów okienkowych konwertowanych przez MFC do zdarzeń. Tabela 8.2. Zdarzenia odpalane automatycznie Komunikat Zdarzenie WM_KEYUP FireKeyUp WM_KEYDOWN FireKeyDown WM_CHAR FireKeyPress WM_?BUTTONDOWN FireMouseDown WM_?BUTTONUP FireMouseUp WM_MOUSEMOVE FireClick Symbol “?" oznacza rodzinę komunikatów Przeglądarka WWW w rzeczywistości nie interesuje się zdarzeniami pochodzącymi od kontrolek. Mogą jednak wyłapywać je języki skryptów (takie jak YBScript lub Java-Script). Dodawanie arkuszy właściwości Choć nie jest to obowiązkowe, wiele kontrolek ActiveX posiada arkusze właściwości. Dzięki nim użytkownicy mogą wyświetlić okno dialogowe i ustawić wszelkie właściwości. Pojemniki implementują to polecenie przy pomocy metody IOleObject::DoVerb, żądając wykonania operacji OLEIVERB_PROPERTIES. Jak zwykle, MFC znacznie ułatwia implementację także i tej cechy kontrolek. Kreator Control Wizard w sekcji zasobów dotyczącej dialogów umieszcza puste okno dialogowe. Możesz do niego dodać kontrolki (na przykład pola edycji), tak jak do każdego innego dialogu. Aby powiązać kontrolki z odpowiednimi właściwościami ActiveX, użyj zakładki Member Yariables okna ClassWizard. Możesz powiązać kontrolkę ze zmienną lub właściwością - ClassWizard zajmie się resztą. Wypełniając odpowiednie pola w oknie ClassWizarda możesz nawet filtrować wprowadzane wartości. Możesz ograniczyć do określonego zakresu wartość zmiennej całkowitej lub ograniczyć ilość znaków wprowadzanego ciągu. Oprócz normalnych arkuszy właściwości, możesz dołączyć dodatkowe arkusze dodając je do sekcji BEGIN_PROPPAGEIDS pliku źródłowego. Istnieje kilka standardowych arkuszy właściwości dla elementów takich jak czcionki czy kolory, które możesz dodać bez żadnego wysiłku. W przypadku kolorów użyj CLSID_CColorPropPage, dla obrazków użyj CLSID_CPisturePropPage, zaś dla czcionek - CLSID_CFontPropPage. Przykład dodania arkusza właściwości koloru znajdziesz w dalszej części rozdziału. Analiza wygenerowanych plików Gdy do rozpoczęcia projektu wykorzystujesz Control Wizarda, generuje on trzy ważne pliki CPP. Pierwszy z nich nosi tę samą nazwę co projekt; plik zawiera obiekt wyprowadzony z COleControIModule. Jest to podstawowa klasa reprezentująca kontrolkę ActiveX. Jeśli potrzebujesz jakiegokolwiek kodu, który ma być wykonywany podczas ładowania lub wyładowywania kontrolki, możesz dodać go właśnie w tym pliku. Ten sam plik zawiera także funkcje zajmujące się samodzielną rejestracją. Zwykle nie ma potrzeby ich modyfikacji, gdyż dobrze wykonują swoje zadanie. Najważniejszy plik generowany przez MFC ma taką nazwę jak nazwa projektu, lecz z dodanymi literami CTL (na przykład PROJCTL.CPP). Ten plik zawiera obiekt wyprowadzony z COleControl. Większość wprowadzanych zmian, zarówno ręcznych, jak i automatycznych, odnosi się właśnie do tego pliku. W nim znajduje się funkcja OnDraw, a także wszystkie funkcje zdarzeń, właściwości i metod kontrolki. Ostatnim plikiem źródłowym tworzonym przez MFC jest plik o nazwie projektu, z dodanymi literami PPG (na przykład PROJPPG.CPP). W tym pliku znajdziesz obiekt reprezentujący główną stronę właściwości. Ten obiekt jest wyprowadzony z klasy podstawowej COlePropertyPage. Zwykle nie trzeba modyfikować tego pliku, chyba że poprzez ClassWizarda. Testowanie i wykorzystanie kontrolki
|