Rozdział 5.
Inne narzędzia
W tym rozdziale:
Korzystanie z programu Spy++
Dostosowywania menu Tools
Przeglądanie klas
Przeglądanie kodu źródłowego MFC
Wraz z pakietem Visual C++ 6.0 dostarczanych jest wiele narzędzi, które znacznie mogą ułatwić Ci pracę twórcy aplikacji. W tym rozdziale opiszemy te narzędzia i pokażemy, w jaki sposób możesz je efektywnie wykorzystać.
Spy++
System Windows przekazuje komunikaty do poszczególnych okien, informując je w ten sposób o działaniach użytkownika. Tak więc poznanie rodzajów występujących komunikatów ma zasadnicze znaczenie dla odniesienia sukcesu w programowaniu Windows. Jednak przy ponad dwustu różnych komunikatach czasem trudno zdecydować się, na które komunikaty powinno się zwrócić uwagę. Program Spy++ (szpieg) pokazuje każdy komunikat, który został przekazany do okna. Oprócz tego, za jego pomocą można sprawdzić jakie okna, wątki i procesy należą do analizowanej aplikacji. Aby uruchomić program, wybierz w menu Tools polecenie Spy++.
Przy pierwszym uruchomieniu programu wyświetlana jest lista okien działających w systemie (rysunek 5.1). Możesz otworzyć także inne okna programu, aby otrzymać informacje na temat aktualnie działających w systemie wątków i procesów. Te listy są ze sobą ściśle powiązane, gdyż procesy posiadają wątki, zaś wątki posiadają własne okna. Zaczynając właśnie od listy okien, możesz łatwo zrozumieć koncepcję powiązań pomiędzy oknami nadrzędnymi i podrzędnymi.
W celu przedstawienia typowego sposobu korzystania z programu na rysunku 5.2 przedstawiliśmy widok programu z wyświetlonymi trzema listami: listą procesów, listą wątków oraz listą okien. Choć Spy++ może podejrzeć każdy program działający w systemie, jednak w tym przypadku Spy++ szpieguje sam siebie. Na rysunku 5.2 widać listę okien pokazującą, że główne okno posiada trzy okna potomne. Jedno z tych okien także posiada własne okna potomne. Innymi słowy, program Spy++ może być pomocny w informowaniu o strukturze okien tworzących interfejs użytkownika.
Przekonasz się, że programiści dążą raczej do zmniejszenia niż zwiększenia ilości stosowanych okien. Weźmy na przykład arkusz kalkulacyjny: czy oknami powinny być poszczególne komórki czy też raczej grupy komórek? Jeśli uruchomisz program Spy+ + i podejrzysz którykolwiek z komercyjnych arkuszy kalkulacyjnych, okaże się, że oknami są całe grupy komórek. Dzieje się tak z powodu stosunkowo dużego narzutu związanego z utrzymaniem każdego okna. W związku z tym podobną strategię powinieneś zachować także przy tworzeniu własnych aplikacji.
Podczas projektowania programu dla Windows ewentualny błąd może spowodować że aplikacja nie zostanie poprawnie zakończona. Choć wszystkie okna programu mogą być ukryte, sam proces w dalszym ciągu działa w systemie. Korzystając z informacji wyświetlanych w oknie procesów, możesz szybko sprawdzić, czy program został poprawnie zamknięty. Do otwarcia okna Processes (procesy) służy polecenie Processes w menu Spy programu Spy++. Okno procesów zawiera listę wszystkich procesów aktualnie działających w systemie. Każdy proces zawiera podrzędną listę należących do niego wątków. (Pamiętaj, że wątek jest podstawową jednostką wykonywania programów w systemach Windows 95, Windows 98 oraz Windows NT). Z kolei każdy wątek znajdujący się na liście może posiadać dodatkowo listę posiadanych przez siebie okien.
Podobnie, przy dodawaniu do programu nowych wątków, nie zawsze możesz mieć pewność, że kolejne wątki są tworzone i niszczone w odpowiednich momentach. Okno Threads (wątki) programu Spy++ precyzyjnie informuje o ilości wątków aktualnie działających w Twoim programie. Aby otworzyć okno wątków, w menu Spy wybierz polecenie Threads. W oknie pojawi się lista wszystkich wątków w systemie, posortowanych według identyfikatorów wątków. Elementy w oknie Threads także posiadają elementy podrzędne, którymi tym razem są okna należące do danego wątku. Rzut oka na tę listę wystarczy, aby przekonać się, że większość wątków nie posiada własnych okien. Takie wątki nie posiadają interfejsu użytkownika; zamiast tego dostarczają usług innym wątkom, posiadającym własne okna.
Aby otrzymać więcej informacji na temat procesów, wątków lub okien, kliknij któryś z elementów w dowolnym oknie programu Spy++.
Hierarchie pokazywane przez program Spy++ sugerują wygląd hierarchii obiektów w systemie - na przykład, procesy posiadają wątki, zaś wątki posiadają okna. Nie może istnieć proces bez wątku, gdyż taki proces nie mógłby wykonać żadnego zadania. Może jednak istnieć wątek nie posiadający okien. Wątek, którego jedno z okien otrzymało komunikat, otrzymuje tymczasowo nieco większy priorytet, dzięki czemu interfejs użytkownika w Windows 95, Windows 98 i Windows NT szybko reaguje na polecenia wydawane przez osobę pracującą z systemem.
Aby poznać komunikaty przekazywane do okna, w programie Spy++ otwórz okno Messages. Istnieje kilka sposobów wyboru okna przeznaczonego do podglądania, lecz sposobem zalecanym jest użycie "celownika". W menu Spy wybierz polecenie Find Window (znajdź okno), otwierające okno dialogowe zawierające "celownik". Po kliknięciu opcji Show Messages (pokaż komunikaty) w dolnej części okna, kliknij "celownik" i przeciągnij go do tego okna, którym jesteś zainteresowany.
Jak widać na rysunku 5.3, okno komunikatów pokazuje wszystkie komunikaty przekazane do okna, zjedna lub dwiema liniami przypadającymi na każdy komunikat. Kolumna po lewej stronie zawiera uchwyt - czyli identyfikator - okna otrzymującego komunikat. Dla każdego komunikatu druga kolumna zawiera literę P, S lub R. Powiemy o nich za moment. Trzecia kolumna zawiera nazwę otrzymanego komunikatu oraz rozkodowane wartości dwóch czterobajtowych parametrów przekazanych wraz z komunikatem.
Nawet nie znając znaczenia poszczególnych komunikatów, dzięki programowi Spy++ możesz przekonać się, że większość ruchu związanego z przekazywaniem komunikatów wiąże się z najmniejszymi nawet działaniami użytkownika. Podczas przeglądania okna komunikatów możesz dowiedzieć się czegoś więcej na temat danego komunikatu, klikając go prawym przyciskiem myszy i w menu kontekstowym wybierając polecenie Help (pomoc).
Druga kolumna okna informuje, czy komunikat został wysłany (P - posted) do okna. Różnica pomiędzy wysłaniem a przekazaniem polega na tym, że wątek przekazujący komunikat czeka na odpowiedź. Komunikaty wysłane oczekują w kolejce komunikatów (ang. message gueue) aż odbiorca (okno) je stamtąd pobierze. Takie komunikaty służą do informowania odbiorcy, że coś się zdarzyło, lecz nie trzeba na nie odpowiadać.
Komunikaty przekazywane nie oczekują w kolejce komunikatów; zamiast tego nadawca komunikatu oczekuje na odpowiedź. Komunikat przekazany działa podobnie do wywołania funkcji; nadawca komunikatu czeka aż odbiorca przetworzy komunikat i dostarczy wartość zwrotną. Zwracane odpowiedzi są w programie Spy++ oznaczane literą R (ang. reply) w drugiej kolumnie okna komunikatów.
Rysunek 5.3 przedstawia komunikaty wygenerowane w momencie, gdy użytkownik zamyka okno. Pierwszy komunikat pokazany w oknie, WM_SYSCOMMAND, rozpoczyna proces zamykania okna. Jest jedynym kolejkowanym komunikatem w całym strumieniu komunikatów. Każdy następny komunikat wiąże się z dodatkowymi krokami związanymi z procesem kończenia działania i zamykania okna. Proces zamykania trwa aż do całkowitego zniszczenia okna, co na rysunku 5.3 reprezentują komunikaty WM_DESTROY oraz
WM_NCDESTROY.
Gorąco zalecamy, abyś zapoznał się ze sposobami użycia programu Spy++, żebyś mógł skorzystać ze wszystkich jego udogodnień związanych ze zbieraniem informacji o systemie. Gdy zaczniesz tworzyć własne aplikacje dla Windows, z pewnością docenisz wartość tego programu.
Dostosowywanie menu Tools
Do menu Tools (narzędzia) można dodać nie więcej niż szesnaście poleceń. Te polecenia mogą być związane z dowolnymi programami działającymi w systemie operacyjnym. Oprócz tego, do każdego polecenia dodanego do menu Tools możesz dołączyć odpowiednie parametry.
Dodawanie polecenia do menu Tools
Jako przykład, w poniższej procedurze przedstawimy sposób dodania Notatnika Windows do menu Tools:
1. W menu Tools wybierz polecenie Customize (dostosuj), po czym kliknij zakładkę Tools.
2. Aby dodać polecenie, przejdź do końca listy Menu contents (zawartość menu) i dwukrotnie kliknij pustą linię (oznaczoną pustym prostokątem). Wpisz nazwę polecenia (takąjaka ma pojawić się w menu), po czym wciśnij Enter. Na przykład, aby dodać polecenie uruchamiające Notatnik Windows, możesz wpisać nazwę
Notatnik.
3. Jeśli trzeba, zaznacz wpisaną przed chwilą nazwę.
4. W polu Command (polecenie) wpisz ścieżkę dostępu i nazwę programu (po kliknięciu przycisk oznaczonego wielokropkiem będziesz mógł po prostu wskazać program na dysku) - na przykład c: \WINDOWS \NOTEPAD . EXE.
5. W polu Arguments (argumenty) wskaż lub wpisz wszelkie argumenty, które chcesz przekazać do programu. Możesz użyć przycisku oznaczonego strzałką w celu rozwinięcia menu argumentów. Aby wstawić argument do linii poleceń programu, kliknij odpowiedni element listy. Visual C++ udostępnia także makra argumentów.
6. W polu Initial Directory (początkowa kartoteka) wpisz kartotekę plików, w której znajduje się program, po czym kliknij przycisk Close.
7. Możesz użyć przycisku oznaczonego strzałką w celu wyświetlenia menu kartotek. Wybierz z menu kartotekę w celu wstawienia odpowiedniej składni do pola Ini-
tial Directory. Gdy polecenie pojawi się w menu Tools, możesz je wybrać, aby uruchomić program.
8. Dokonując edycji pola Menu Text (tekst menu), możesz zmienić domyślną nazwę nowo dodanego narzędzia. Możesz dodać argumenty przekazywane do programu, wpisując je w polu Arguments, zaś zmieniając zawartość pola Initial Directory możesz zmienić początkową kartotekę programu.
Modyfikowanie poleceń w menu Tools
Możesz modyfikować polecenia w menu Tools. W tej sekcji dowiesz się to zrobić:
1. W menu Tools wybierz polecenie Customize (dostosuj), po czym kliknij zakładkę Tools.
2. Na liście Menu contents zaznacz polecenie, które chcesz zmodyfikować.
3. Wykonaj jedną lub kilka z poniższych czynności: aby przenieść polecenie o jedną pozycję w górę menu, kliknij przycisk Move Item Up (oznaczonym strzałką skierowaną w górę). Aby przenieść polecenie o jedną pozycję w dół menu, kliknij przycisk Move Item Down (oznaczonym strzałką skierowaną w dół). Aby zmienić treść polecenia w menu, linię polecenia (nazwę i ścieżkę dostępu do programu), argumenty linii polecenia lub kartotekę początkową, wpisz nową zawartość w odpowiednie pola. Aby oznaczyć jakąś literę jako wyróżnioną literę polecenia, w nazwie na liście Menu Contents poprzedź ją znakiem ampersand(&).
4. Domyślnie wyróżnioną literą jest pierwsza litera nazwy polecenia.
5. Aby wskazać, by wynik działania programu konsoli był wyświetlany w oknie Out-put a nie w oknie konsoli, włącz opcję Use Output Window (użyj okna Output).
6. Aby wskazać, że okno związane z programem było zamykane w momencie zamknięcia programu, włącz opcję Close Window on Exiting (przy wyjściu zamknij okno).
7. Aby móc podawać argumenty programu przed każdym jego uruchomieniem, włącz opcję Prompt for Arguments (proś o argumenty).
Inne operacje w menu Tools
Oto jak usunąć polecenie z menu Tools. W menu Tools kliknij przycisk Customize, a następnie kliknij zakładkę Tools. Na liście Menu Context zaznacz polecenie, które chcesz usunąć, po czym kliknij przycisk Delete (oznaczonym czerwonym krzyżykiem).
Aby wskazać argumenty poleceń w menu Tools: w menu Tools wybierz polecenie Customize, po czym kliknij zakładkę Tools. Na liście Menu Context zaznacz polecenie, dla którego chcesz wskazać argumenty. W polu Arguments wpisz argumenty, które chcesz przekazać (możesz także kliknąć przycisk oznaczony strzałką w celu wstawienia do pola składni makr argumentów).
Przeglądanie klas
Okna przeglądania wyświetlają informacje o symbolach (klasach, funkcjach, danych, makrach oraz rodzajach) zawartych w Twoim programie. Jeśli podczas budowania projektu była włączona opcja generowania informacji dla przeglądania, kompilator stworzy pliki .SBR zawierające informacje o każdym z plików źródłowych w projekcie. Program BSCMAKE (BSCMAKE.EXE) łączy pliki .SBR w pojedynczy plik informacji przeglądania. Plik informacji przeglądania ma nazwę zgodną z nazwą projektu oraz rozszerzenie .BSC.
Aby stworzyć plik przeglądania, w menu Project wybierz polecenie Settings. Na zakładce Browse Info włącz opcję Build browse info file. Następnie przejdź do zakładki C/C++ i w kategorii General włącz opcję Generate Browse Info. Następnie ponownie zbuduj aplikację.
Do przeglądania informacji służą specjalne okna, posiadające różny wygląd i elementy kontrolne w zależności od rodzaju wyświetlanych informacji. Używając poleceń przeglądania, możesz przejrzeć informacje dotyczące wszystkich symboli w dowolnym pliku źródłowym.
Korzystanie z plików przeglądania
Przy każdym otwarciu projektu otwierany jest także plik przeglądania dotyczący tego projektu (oczywiście jeśli istnieje). Jeśli zamkniesz plik przeglądania, w razie potrzeby zostanie on ponownie otwarty. Aby otrzymać informacje na temat symbolu, wykonaj poniższe kroki:
1. W menu Tools wybierz polecenie Source Browser (przeglądarka kodu źródłowego). Pojawi się okno dialogowe przeglądania.
2. W polu Identifier (identyfikator) wpisz nazwę symbolu, którego chcesz poszukać. Aby przejrzeć dowolny ciąg, możesz użyć znaku gwiazdki.
3. Na liście Select Query wybierz rodzaj poszukiwań.
4. Jeśli trzeba, kliknij przycisk Case Sensitive (zależne od wielkości liter).
5. Kliknij przycisk OK. Pojawi się okno przeglądania specyficzne dla wybranego rodzaju poszukiwań zawierające wyniki wyszukiwania dla podanego symbolu. Jeśli wskażesz symbol w pliku źródłowym, w momencie otwierania okna przeglądania symbol pojawi się automatycznie w polu Identifier. Dzięki temu możesz wyeliminować drugi krok procedury.
Gdy zostanie otwarty plik informacji przeglądania, możesz użyć go do wyszukania w pliku źródłowym miejsca definicji symbolu lub miejsca, w którym występuje pierwsze odwołanie do symbolu.
Aby znaleźć definicję symbolu, zaznacz symbol w pliku źródłowym lub w polu Find (znajdź) na standardowym pasku narzędzi. Następnie w menu Edit wybierz polecenie Go To (przejdź do). Pojawi się okno dialogowe Go To. Na liście Go to what: wybierz pozycję Definition (definicja), po czym kliknij przycisk Go To.
Aby znaleźć pierwsze miejsce, w którym następuje odwołanie do symbolu, zaznacz symbol w pliku źródłowym lub w polu Find (znajdź) na standardowym pasku narzędzi. Następnie w menu Edit wybierz polecenie Go To (przejdź do). Pojawi się okno dialogowe Go To. Na liście Go to what: wybierz pozycję Reference (odwołanie), po czym kliknij przycisk Go To.
Plik informacji przeglądania opisuje stan plików źródłowych z chwili ostatniej budowy projektu. Jeśli zmodyfikujesz pliki źródłowe, a następnie przejdziesz do definicji lub odwołania, pozycja w pliku źródłowym może już być nieaktualna. Jeśli plik przeglądania nie został odbudowany, w oknie dialogowym będziesz miał możliwość jego odbudowania.
Korzystając z przycisków nawigacyjnych w oknie dialogowym Go To, możesz przejść do następnego lub poprzedniego odwołania. Dostępne przyciski to Previous (poprzednie) oraz Next (następne).
Wyświetlanie definicji symbolu lub odwołania do symbolu
Korzystając z paska narzędzi przeglądania (Browse), możesz szybko wyświetlić definicję lub odwołanie do symbolu. Środowisko programisty otworzy plik źródłowy zawierający definicję lub pierwsze odwołanie do symbolu, podświetlając przy tym wybrany symbol. Aby przejść do następnej definicji lub odwołania do symbolu, kliknij przycisk Next Defini-tion/Reference na pasku narzędzi. Aby wyświetlić definicję lub odwołanie do symbolu, korzystając z paska narzędzi przeglądania, wykonaj poniższe kroki:
1. Zaznacz symbol w pliku źródłowym lub w polu Find (znajdź) na standardowym pasku narzędzi. Możesz użyć znaku gwiazdki zastępującej dowolny ciąg znaków.
2. Na pasku narzędzi przeglądania kliknij przycisk Go To Definition (przejdź do definicji) lub Go To Reference (przejdź do odwołania).
3. Jeśli symbol jest składową więcej niż jednej klasy, pojawi się okno dialogowe Resolve Ambiguity (rozwiąż niejednoznaczność). Wybierz z listy odpowiedni symbol.
Aby wyświetlić definicję lub odwołanie do symbolu, używając prawego przycisku myszy, wskaż symbol w pliku źródłowym (w oknie edytora tekstu lub w panelu ClassView) i kliknij prawym przyciskiem myszy. W menu kontekstowym wybierz polecenie Go To Definition lub Go To Reference.
Aby wyświetlić definicję lub odwołanie do symbolu używając okna dialogowe, Go To, w menu Edit wybierz polecenie Go To. Na liście Go to what: wybierz pozycję Definition (definicja) lub Reference (odwołanie). Wskaż dodatkowe kryteria wyboru. Kliknij jeden z przycisków nawigacyjnych: Go To (przejdź do), Previous (poprzednie) lub Next (następne).
Aby wyświetlić definicję lub odwołanie do symbolu, używając okna Definitions And Refe-rences (definicje i odwołania), zaznacz symbol w pliku źródłowym lub w polu Find (znajdź) na standardowym pasku narzędzi. Możesz użyć znaku gwiazdki zastępującej dowolny ciąg znaków. W menu Tools wybierz polecenie Source Browser (przeglądarka kodu źródłowego). Z listy Select Query wybierz pozycję Definitions and References. Kliknij przycisk OK. Jeśli symbol jest składową więcej niż jednej klasy, pojawi się okno dialogowe Resolve Ambiguity (rozwiąż niejednoznaczność). Wybierz z listy odpowiedni
symbol. W oknie References And Definitions dwukrotnie kliknij definicję lub odwołanie, które chcesz znaleźć. W oknie edytora tekstowego zostanie otwarty plik źródłowy zawierający definicję lub odwołanie do wskazanego symbolu.
Wyświetlanie grafu wywołań
Aby wyświetlić graf wszystkich funkcji wywoływanych przez wskazaną funkcję, wykonaj poniższe kroki:
1. W pliku źródłowym lub w polu Find standardowego paska narzędzi wskaż nazwę funkcji.
2. W menu Tools wybierz polecenie Source Browser.
3. Z listy Select Query wybierz pozycję Cali Graph.
4. Kliknij przycisk OK.
5. Jeśli funkcja jest funkcją przeciążoną lub jest składową więcej niż jednej klasy, pojawi się okno dialogowe Resolve Ambiguity. Wybierz z listy właściwą funkcję. Zostanie wyświetlone okno grafu wywołań (Cali Graph), ze wskazaną funkcją zaznaczoną w górnej części lewego panelu.
Wyświetlanie grafu funkcji wywołujących
Aby wyświetlić graf wszystkich funkcji wywołujących wskazaną funkcję, wykonaj poniższe kroki:
1. W pliku źródłowym lub w polu Find standardowego paska narzędzi wskaż nazwę funkcji.
2. W menu Tools wybierz polecenie Source Browser.
3. Z listy Select Query wybierz pozycję Callers Graph.
4. Kliknij przycisk OK.
5. Jeśli funkcja jest funkcją przeciążoną lub jest składową więcej niż jednej klasy, pojawi się okno dialogowe Resolve Ambiguity. Wybierz z listy właściwą funkcję. Zostanie wyświetlone okno grafu wywołań (Cali Graph), ze wskazaną funkcją zaznaczoną w górnej części lewego panelu.
Przeglądanie kodu źródłowego MFC
Plikiem informacji przeglądania dla bibliotek Microsoft Foundation Class jest plik MFC.BSC. Możesz go wykorzystać w celu pobieżnego przejrzenia kodu źródłowego MFC dla celów debuggowania lub aby dowiedzieć się czegoś więcej na temat tego, co dzieje się "w tle" aplikacji.
W pliku informacji przeglądania nie są zawarte wszystkie klasy i symbole MFC. Na przykład, nie ma w nim informacji o klasach ISAPI (Internet Sewer Application Pro-gramming Interface), gdyż znajdują się one w osobnej bibliotece. Jeśli chcesz rzucić okiem na symbole nie dołączone do pliku informacji przeglądania, jednym z rozwiązań może być użycie polecenia Find In Files (znajdź w plikach) w menu File.
Plik MFC.BSC nie jest instalowany przez program instalacyjny, lecz możesz go ręcznie skopiować z dysku dystrybucyjnego. Znajdziesz go w kartotece \Program Files\Microsoft Yisual Studio\VC98\MFC\Src\. Skopiuj plik do tej samej kartoteki na dysku, w której jest zainstalowane Yisual C++. Po skopiowaniu możesz go otwierać i używać tak samo jak innych plików informacji przeglądania.
Podsumowanie
Narzędzia Visual C++ mogą pomóc przy tworzeniu aplikacji. Szczególnie użyteczny jest program Spy++, którego możesz użyć w celu podejrzenia wewnętrznych mechanizmów działania aplikacji.
Przegląd
programowania w MFC Menu
Mysz i klawiatura Grafika Bitmapy, palety, DIB-y
oraz podwójne
buforowanie
Obsługa wyjątków MFC Kontrolki Modalne i niemodalne
okna dialogowe Karty i arkusze
właściwości
Zapis i odczyt danych Dźwięk Timery oraz
przetwarzanie
w jałowym czasie
aplikacji
Wyszukiwarka
Podobne podstrony:
wil pl inne 0505 narzedzia programuWykład 05 Narzędzia i maszyny do umieszczania sadzonek w glebie2009 05 04 Rozp MON inne znaki używane w SZ RPWykład 05 Opadanie i fluidyzacjaPrezentacja MG 05 20122011 05 P05 2ei 05 08 s029ei 05 s052examin C inne pytania 2więcej podobnych podstron