Magazyn NoName

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




Darmowe konta e-mail w prezencie od NoName!

Copyright (c) 1999 - 2000 NoName