Stronę tą wyświetlono już: 3813 razy
Nowy projekt myNotepad
Na tej stronie zacznę tworzyć pierwszy nieco ciekawszy projekt o nazwie myNotepad. Będzie to pusty projekt, który zasadniczo wykorzysta w znacznej mierze już wcześniej utworzony kod. Projekt nie zostanie do końca ukończony tutaj, ponieważ chcę się zasadniczo skupić na omówieniu następujących zagadnień:
- dodawanie pliku zasobów *.rc oraz resource.h;
- dodanie własnej ikony aplikacji do pliku *.rc;
- dodanie własnego kursora strzałki do pliku *.rc;
- dodanie własnego menu do pliku *.rc;
- dodanie akceleratora do pliku *.rc;
- załączanie pliku resource.h do projektu oraz zastosowanie wszystkich elementów dodanych do zasobów w projekcie;
- dodanie okna potomnego (kontrolki) EDIT i obsłużenie prawidłowego jej pozycjonowania w oknie (komunikat WM_SIZE).
Dodawanie pliku zasobów *rc i resource.h
W celu dodania do projektu pliku zasobów należy wcisnąć kombinację klawiszy Ctrl+Alt+L lub z menu View wybrać pozycję Solution explorer by po chwili ujrzeć okno z poniższego rysunku.
W oknie tym czym prędzej z menu kontekstowego należy wybrać pozycję
Po kliknięciu New powinien pojawić się widok z poniższego rysunku. Jak widać, VS EE udostępnia pewne podstawowe narzędzia do rysowania, ja jednakże nie będę niczego zmieniał i pozostawię domyślną ikonkę. Warto też zwrócić uwagę na fakt, że dostępne są od razu dwie wersje ikonki: pierwsza o rozmiarze 16x16 i druga o rozmiarze 32x32.
W podobny sposób należy dodać kursor programu, z tymże z pozycji rozwijanej okna Add Resource należy wybrać Cursor->IDC_POINTER i kliknąć New by oczom ukazał się widok z poniższego rysunku.
W końcu upragnione menu dodać w podobny sposób należy. I tutaj prosiłbym o dodanie do niego takich samych pozycji jak w poniższym rysunku. Robi się to dość intuicyjnie, więc myślę że bez zbędnego opisywania każdy da sobie radę. Dodanie separatora (linii poziomej w menu) odbywa się poprzez wybranie z menu kontekstowego Insert separator.
Po dodaniu pozycji, proszę kliknąć prawym przyciskiem myszy na menu i wybrać z menu kontekstowego pozycję Edit IDs. Zmienić należy kolejne pozycje na: ID_PLIK_OTWORZ; ID_PLIK_ZAPISZ i ID_PLIK_ZAMKNIJ.
Pora na akceleratory, ale zanim to najpierw kilka słów wyjaśnienia co to są w ogóle akceleratory. Otóż są to skróty klawiaturowe, które będą obsługiwane przez program i mogą być związane np. z wywołaniem jakiejś pozycji w menu. Dodawanie akceleratora do pliku *.rc odbywa się w podobny sposób co poprzednie elementy a więc za pomocą okna Add Resource, gdzie tym razem oczywiście należy kliknąć pozycję Accelerator. Po kliknięciu przycisku New pojawi się okno edycji akceleratora. Tutaj również poproszę Was o dodanie pozycji takich samych jak na poniższym rysunku.
Kod źródłowy programu
Znacząca część kodu została powielona z poprzedniej strony, toteż bez zbytnich ceregieli w poniższym kodzie w komentarzach opisałem pokrótce jedynie te elementy, które uległy zmianie. W funkcji hwndProc okna głównego nie ma już komunikatu WM_PAINT, ponieważ w tym przypadku jest on całkowicie zbyteczny.
Reasumując, program do tej pory ma menu, akcleleratory, własną ikonkę i własny kursor. Na następnej stronie omówię jak otwierać i zapisywać dane do pliku z wykorzystaniem okna dialogowego Open i Save.
Spis nowych makr i funkcji użytych w programie
Poniżej zamieszczam listę makr oraz funkcji, które nie były jeszcze używane na wcześniejszych stronach tego działu:
- MAKEINTRESOURCE - makro zamieniające identyfikator elementu zawartego w pliku *.rc do postaci kompatybilnej z funkcjami ładującymi te zasoby;
- LoadAccelerators - funkcja umożliwiająca ładowanie akceleratora z pliku zasobów *.rc;
- LoadCursor - funkcja umożliwiająca ładowanie kursora z zasobów pliku *.rc;
- LoadIcon - funkcja umożliwiająca ładowanie ikony z zasobów pliku *.rc;
- LoadMenu - funkcja użyta do załadowania menu z zasobów pliku *.rc;
- TranslateAccelerator - funkcja przetwarzająca komunikaty pochodzące od akceleratora okna;
- SystemParametersInfo - funkcja umożliwiająca uzyskiwanie informacji o ustawieniach systemu;
- CreateFontIndirect - funkcja umożliwiająca utworzenie uchwytu czcionki HFONT;
- SendMessage - funkcja umożliwiająca wysyłanie komunikatu do danego okna;
- SetWindowPos - funkcja umożliwiająca zmianę pozycji i rozmiaru okna.
W projekcie zostały wykorzystane następujące struktury, których wcześniej nie używano:
- NONCLIENTMETRICS - struktura powiązana z funkcją SystemParametersInfo