
Kurs Visual C++
Lekcja 2 - Kurs Visual C++ by SLASH
Dzisiaj dowiemy się co to są zmienne i ciąg dalszy funkcji MessageBox. Zaczynamy więc
Otwieramy naszego VC i tworzymy nowy projekt, tak jak to robiliśmy w poprzedniej lekcji. Tyle tylko, że zmieniamy nazwę projektu na Msg. Nie opisuję tego jeszcze raz gdyż to jest dobry moment do sprawdzenia czy zapamiętałeś to z ostatniej lekcji. Jeśli mamy już utworzony projekt na formie dodajemy przycisk od identyfikatorze IDC_PRZYCISK oraz etykiecie (pole caption) - Komunikat. Teraz dodajemy do niego zdarzenie kliknięcia - dotąd wszystko robimy tak jak w lekcji 1. No - jesteśmu już przy kodzie, teraz pokazuję pełną składnię funkcji MessageBox:
zwrot = MessageBox("Tekst do wyświetlenia","Tytuł",przyciski | ikony);
Znaczek | zrobimy wciskając znak \ z Shiftem (nie pomylić z /)
PRZYCISKI | OBJAŚNIENIE | MB_ABORTRETRYIGNORE | Przerwij, ponów, zrezygnuj | MB_OK | Sam przycisk OK | MB_OKCANCEL | Przyciski OK i Anuluj | MB_YESNO | Przyciski Tak, Nie | MB_YESNOCANCEL | Przyciski Tak, Nie, Anuluj |
IKONKI | OBJAŚNIENIE | MB_ICONINFORMATION | dymek z literką " i " | MB_ICONQUESTION | dymek z pytajnikiem | MB_ICONSTOP | ikonka krytyczna - przekreślone czerwone kółko | MB_ICONEXCLAMATION | trójkącik z wykrzyknikiem |
Funkcja MessageBox zwraca identyfikator do klikniętego przycisku i zapisuje do zmiennej zwrot (jeśli taką zainicjowaliśmy) - czyli np MB_OKCANCEL zwraca IDOK jeśli wcisnęliśmy OK lub IDCANCEL jeśli wcisnęliśmy anuluj. Dokładniej wyjaśnię to w przykładzie.
Teraz aby MessageBox mógł cokolwiek zwrócić musimy utworzyć zmienną do której zostanie zapisane to co jest zwracane. Dla przykładu jeśli MessageBox zwróci np IDYES musi to gdzieś zapisać w pamięci - ale żeby mógł zapisać w pamięci musimy poinformować program gdzie się to znajduje - po to właśnie tworzymy zmienne. Zobrazujmy to:
Jeśli napiszesz: MessageBox("Tekst","Tytuł",MBOKCANCEL | MB_ICONSTOP);
Niby wszystko w porządku, a jednak źle ! Funkcja nie ma gdzie zwrócić identyfikatora klikniętego przycisku !
zwrot = MessageBox("Tekst","Tytuł",MBOKCANCEL | MB_ICONSTOP);
Tym razem lepiej - ale dalej źle ! MessageBox zwraca identyfikator, próbuje zapisać do pamięci, ale nie da rady. Program po prostu nie wie gdzie to ma zapisać - musimy tą zmienną zainicjować !
CString zwrot; zwrot = MessageBox("Tekst","Tytuł",MBOKCANCEL | MB_ICONSTOP);
Teraz dopiero jest dobrze - w pierwszej linijce zrobiliśmy rezerwację pamięci dla łańcuch - czyli tego co zwróci MessageBox.
Ale uwaga ! Jeśli programowałeś wcześniej w Visual Basicu miałeś uproszczoną sprawę - tam wystarczyło tylko napisać : Dim zwrot - i już miałeś zainicjowaną "uniwersalną" zmienną. Niestety, ale w C++ musimy stosować od razu zmienną danego typu. Jeśli to twój pierwszy kurs to pewnie nie rozumiesz o czym ja mówię - zaraz Ci to wyjaśniam:
Wszelkie stringi - czyli tekst wpisujemy w cudzysłów (możesz zobaczyć to w funkcji MessageBox). A tekst bez czudzysłowu C++ traktuje jak jakieś zmienne. Liczby także zapisujemy bez czudzysłowów. Pewnie zapytasz po co to jest wprowadzone - przeanalizuj przykład
CString liczba1 = "1"; //Utworzenie i zapisanie do zmiennej CString CString liczba2 = "2"; CString wynik; wynik = liczba1 + liczba2; //Teraz dodajemy
Pewnie myślisz, że wyjdzie 3 - to nie prawda - wyjdzie 12 - to było dodawanie stringów - czyli np. na kartce napisz sobie liczbę 1 a potem za nią 2 - i ile wychodzi ? 12 !
Liczby całkowite zapisujemy w zmiennej int , a zmiennoprzecinkowe w float
int liczba1 = 1 int liczba2 = 2 int wynik wynik = liczba1 + liczba2 // i znów dodawanie...
No i teraz faktycznie w zmiennej wynik znajdzie się liczba 3.
Czyli dotąd musisz zapamiętać jak się inicjuje najważniejsze zmienne - nie jest możliwe napisanie programu bez zmiennych - a więc jeszcze raz:
CString zmienna //Inicjalizacja stringa - do niego zapisujemy tekst zawarty w cudzysłowach np.
CString zmienna; zmienna = "Jakiś tekst"
lub szybciej
CString zmienna = "Jakiś tekst"
int zmienna //Inicjalizacja liczby całkowitej np.
int liczba = 1245
float liczba //Inicjalizacja liczby zmiennoprzecinkowej np.
float liczba = 12.45
UWAGA ! W VC++ nie używamy przecinka do oddzielania ułamków tylko kropkę !!!
Ale zmienne dopiero użyjemy w następnej lekcji - zapiszmy projekt aby go sobie zachować - z menu File wybieramy SaveAll.
Lekcja 3 - Kurs Visual C++ by SLASH
Dzisiaj jak już obiecałem dokończymy program z ostatniej lekcji oraz zajmiemy się nowym zagadnieniem - pierwszym obiektem kontrolnym - EditBox-em
Tak więc teraz musimy otworzyć uprzednio zapisany projekt - najprościej to zrobić wchodząc do katalogu projektu - jeśli postępowałeś zgodnie z moimi zaleceniami to masz utworzony taki folder na pulpicie o nazwie Msg - wchodzimy pod niego - teraz odnajdujemy plik Msg.dsp - klikamy na niego prawym klawiszem myszki i z menu kontekstowego wybieramy Open with MSDev - powinien teraz pojawić się komunikat z informacją, że znaleziono projekt - potwierdzamy go klikając na OK. Drugi sposób to uruchomienie Visual C++ - teraz z menu File wybieramy Open. Teraz pliki typu zmieniamy na Projects (dsp) i już zobaczymy zaledwie jeden pliki - wybieramy więc go i klikamy otwórz - znów pojawia się komunikat, że znaleziono pliki projektu, potwierdzamy to i już nasza aplikacja - projekt zostaje załadowana.
Teraz w obszarze roboczym (to po lewej) odnajdujemy folder Dialog i IDD_MSG - otwieramy go i już naszym oczom ukazuje się program który stworzyliśmy na poprzedniej lekcji - teraz kliknij dwukrotnie na przycisku i już za chwilę powinniśmy znaleść się w kodzie.
Program ma wyglądać tak - zadaje nam pytanie "czy mnie lubisz" - jeśli odpowiemy tak program powinien wyświetlić komunikat "to fajnie", a jeśli odpowiemy nie to "przykro mi".
Z początkiem chyba nie powinieneś mieć żadnych problemów - piszemy:
CString odpowiedz; MessageBox("Czy mnie lubisz ?","Pytanie do Ciebie",MB_YESNO | MB_ICONQUESTION);
Teraz wyjaśnienie które mam nadzieję jest zbędne. Pierwsza linijka to rezerwowanie pamięci dla odpowiedzi, druga to komunikat z odpowiednim tekstem, tytułem, MB_YESNO to są przyciski Tak, Nie, a MB_ICONQUESTION to ikonka zapytania.
Możesz już skompilować i uruchomić swój program. Pamiętasz jak to się robiło ? Na pasku poszukaj brązowego wykrzyknika. Po naciśnięciu przycisku naszym oczom ukazuje się komunikat, taki właśnie jaki chcieliśmy stworzyć - łatwo jednak zauważyć, że nie reaguje na kliknięcie na Tak lub Nie. Teraz poznamy nową instrukcję warunkową - będzie to instrukcja if. Napisz poniżej Drugiej linijki swojego programu coś takiego:
if (odpowiedz == IDYES) { MessageBox("Bardzo się cieszę","Super",MB_ICONINFORMATION); } else { MessageBox("Strasznie mi przykro","Smutek",MB_ICONINFORMATION); }
Ojojoj ! Jest to trochę trudniejsze w zrozumieniu niż np. w Visual Basicu - ale prześledźmy nasz program:
Najpierw mamy zainicjowanie zmienne - potem komunikat który zwraca IDYES, lub IDNO w zależności co wybierzemy. Kolejna linia to if - tłumaczymy to na polski jako "jeśli". Czyli: jeśli odpowiedź == IDYES (czyli przycisk Tak) to wykonaj to co zawarte jest między nawiasami klamrowymi - czyli komunikat "Bardzo się cieszę". A słowo else oznacza "w przeciwnym przypadku" czyli jeśli nacisnęliśmy inny przycisk niż IDYES to łatwo wywnioskować, że chodzi o przycisk IDNO - a wtedy pokazuje się drugi komunikat - "Przykro mi"
Pojawiają się tu dwa "chwyty" - mianowicie pierwszy to jest to, że po instrukcji if nie ma średnika - no, ale dlaczego ?
Zazwyczaj mamy do czynienia z jednolinijkowymi instrukcjami które wykonują się niezależnie - tutaj jak sam możesz zauważyć instrukcja if składa się z kilku elementów takich jak if(warunek), {, }, else. W takich przypadkach średnika nie dajemy - dalej jeszcze spotkasz kilka takich instrukcji.
Drugi chwyt to warunek (odpowiedz == IDYES) - ale dlaczego nie (odpowiedz = IDYES) ?
Jest to bardzo ważna rzecz - pomyłka grozi niekiedy nieprawidłowym obliczeniom programu. Znaki == używamy do porównań, a znak = do przypisywania. Tak np. jeśli napisalibyśmy odpowiedz = IDYES to stało by się to prawdą - prawy string zostałby zapisany do zmiennej, a nam nie chodzi o zapis tylko porównanie !!!
Po skompilowaniu programu zobaczymy, że nasz program odpowiednio nam odpowiada na pytanie. To by było tyle jeli chodzi na dzisiaj - następnym razem będziemy utrwalać sobie poznane już informacje - dowiemy się co nieco o textboxie oraz o formatowaniu stringów - zapraszam
Pamiętaj ! Jeśli masz jakikolwiek problem ze zrozumieniem tego kursu to napisz do mnie - na każdego maila odpisuję chętnie. Także wszelkie opinie, zażalenia itp. kieruj na mój adres - chcę wiedzieć czy ten kurs Wam się podoba czy też nie
Slash
e-mail: slash@ptik.ivg.pl

Copyright (c) 1999 - 2000 NoName |
|