
Kurs Visual C++
Lekcja 4 - Kurs Visual C++ by SLASH
Witam wszystkich - dopiero dziś powiemy sobie o textboxie - no więc zaczynamy.
Uruchamiamy naszego VC++, tworzymy aplikację o nazwie textbox. Teraz dojdźmy do formy skasujmy wszystkie elementy i ułóżmy na niej pole TextBox - ikonka ( abl ) - zobacz do lekcji 1 - tam jest ściąga. Pewnie już kojarzysz to pole ! Tak - będziesz tu mógł wpisywać dowolne stringi ! Napiszemy aplikację w której w pole tekstowe będziemy musieli wpisać imię, a po naciśnięciu przycisku wyświetli nam komunikat : "Witaj (imię)"
Mamy więc już na formie pole tekstowe - zmień jego ID na IDC_IMIE. Teraz stwórz jeszcze przycisk o ID IDC_PRZYCISK i Caption - Witaj. I tu zacznie się pewien problem - jeśli programowałeś wcześniej w Visual Basicu to pewnie wiesz, że teraz wystarczy dodać odpowiedni kod, aby pobrać z pola Edit tekst. W VC++ jest jednak inaczej - tutaj ta część jest oddzielona od elementu i albo musimy najpierw stworzyć zmienną dla obiektu. W tym celu kliknij prawym klawiszem na formie, z powstałego menu wybierz ClassWizard - ojojoj ! Cóż to jest ? Pierwszą częścią zajmiemy się później - teraz przejdź do drugiej zakładki o nazwie "Member Variables". Zobaczymy tam wszystkie zadeklarowane obiekty które istniały i istnieją w naszym programie. Nas interesuje TextBox - czyli ID IDC_IMIE - zaznacz więc ten identyfikator i kliknij przycisk "Add Variable". Najpierw musimy podać nazwę tworzonej zmiennej - wpisz m_strImie. Category i Value zostaw w spokojo - tworzymy zmienną dla wartości i wyrażamy ją stringiem. Kliknij więc OK. I już widzisz utworzoną zmienną - możemy więc zamknąć to okno klikając na OK.
Teraz oprogramujemy przycisk - dodaj do niego zdarzenie i wpisz kod:
UpdateData(TRUE); MessageBox("Witaj " + m_strImie);
Teraz wyjaśnię wszystko po kolei - pierwsza linijka to odświeżenie danych z okienka - po prostu musimy poinformować program, że zmieniliśmy zawartość pola - zawsze przed pobraniem jakichkolwiek danych z obiektów na formie musimy odświeżyć dane ! A druga linijka to wyświetlenie komunikatu Witaj + imie. Użyłem tu najzwyczajniejszego dodawania stringów - tak np "a" + "b" to "ab" - tutaj jest tylko taka różnica, że drugi parametr pobieramy z pola. Skompiluj teraz swój program i wpisz jakieś imie. Fajnie działa - ale nic nie wpisz w okienko - pojawi się sam komunikat witaj. Chmmm... czy da się to jakoś zmienić ? Ależ oczywiście - mam nadzieję, że wiesz jak to zrobić - ostatnio poznałem funkcję warunkową if - i tu także ją zastosujemy - nasz program więc będzie wyglądał tak:
UpdateData(TRUE); if (m_strImie == "") MessageBox("Nie wpisałeś imienia !"); else MessageBox("Witaj " + m_strImie);
Teraz znacznie lepiej ! Już program potrafi stwierdzić czy wpisaliśmy imię czy też nie !
Możemy dodawać dowolną ilość stringów - tak więc w ostatnim MessageBox-ie może wpisać dłuższe pzywitanie np. takie:
MessageBox("Witaj " + m_strImie + " .Miło cię poznać." + m_strImie + " to bardzo ładne imię");
Dobra. Umiemy już pobierać dane z okienka tekstowego. Teraz zastanówmy się jak zrobić funkcję odwrotną, czyli zapisać coś do okienka tekstowego. Kasujemy więc kod napisany przez nas wcześniej i piszemy coś takiego:
m_strImie = "NOWY TEKST"; UpdateData(FALSE);
Jak widzimy listing jest nadzwyczaj prosty - pierwsza linijka kodu to chyba dla ciebie żadna tajemnica - po prostu kopiujemy string do zmiennej, ale dlaczego teraz użyliśmy UpdateData(FALSE) ? Jeśli tego nie damy po prosu w textbox-ie nic nam się nie pokaże - teraz musimy odświeżyć dane, ale nie do pobrania, tylko do wysłania.
Myślę, że na dziś tyle starczy - poćwicz sobie to jeszcze - a na następnej lekcji o innych obiektach kontrolnych.
Lekcja 5 - Kurs Visual C++ by SLASH
Witam wszystkich już na 5 lekcji. Dziś jak obiecałem zajmiemy się innymi obiektami.
Najpierw powiem o polu static. Posłużyć on może do przedstawienia tekstu w aplikacji. Np. chcemy zwrócić wynik jakiegoś równania - niekoniecznie musimy stosować funkcję MessageBox, ani wyświetlać wynik w EditBox - specjalnie do tego celu został zaprojektowany static. Napiszmy więc małą aplikację - jak zwykle tworzymy ją kreatorem MFC, zmieniamy język na Polish i zrobimy taką aplikację:

Nonononono ! Fajnie wygląda - to będzie pierwsza poważniejsza apilikacja - będzie ona potrafiła wykonywaj najprostsze zadania matematyczne - na formie widać 3 pola static (Liczba 1, Liczba 2, Tu leży...), widzimy także dwa pola TextBox oraz 4 RadioButtons - no i oczywiście doskonale nam znany przycisk. Teraz Wam podaję odpowiednie parametry jakie ustawić obiekty:
Nazwa obiektu | Identyfikator | Inne właściwości | Static | IDC_STATIC | Caption: Liczba 1 | Static | IDC_STATIC | Caption: Liczba 2 | TextBox | IDC_LICZBA1 | | TextBox | IDC_LICZBA2 | | RadioButton | IDC_DODAJ | Group: Włączone Caption: &Dodaj | RadioButton | IDC_ODEJMIJ | Caption: &Odejmij | RadioButton | IDC_POMNOZ | Caption: &Pomnóż | RadioButton | IDC_PODZIEL | Caption: Pod&ziel | Static | IDC_WYNIK | Caption: Wynik | Button (Przycisk) | IDC_LICZ | Caption: Licz |
Teraz muszę wyjaśnić trzy sprawy - pewnie spytasz dlaczego 2 pola statyczne mają takie same identyfikatory a 3 nie. Otóż zauważ, że z dwoma pierwszymi nic nie będziemy robić, tzn. nie będziemy zmieniać tekstu leżącego w nich. Natomiast pole static IDC_WYNIK będzie służyło do wyświetlenia wyniku. Druga sprawa to RadioButtony - są to takie przyciski z których damy radę wybrać tylko jedno - tzn. nie możemy zaznaczyć naraz np. dodawania i mnożenia. Kolejne pytanie w związku z tym to dlaczego przy polu dodaj włączyliśmy funkcję Group. Otóż jest to pole przyjmujące wartość 0 - kolejne przyjmą 1,2,3 - ale musisz wiedzieć, że możemy robić kilka grup przycisków, może być ich np. 5. Oznaczać to będzie, że możemy włączyć aż 5 przycisków niezależnie od siebie - ale każdy w osobnej grupie. Pewnie nic z tego nie zrozumiałeś - ale nie martw się - wyjaśnię to już wkrótce. Trzecia sprawa to znaczki & w polach Caption - Literka stojąca za znakiem & będzie skrótem - tylko należy pamiętać aby skróty się nie zduplikowały. Aby sprawdzić czy wszystko OK kliknij prawym klawiszem myszki na formie i z menu kontekstowego wybierz "Check Mnemonics" - powinniśmy zobaczyć komunikat, że nie znaleziono duplikatów.
Teraz skompilujmy naszą aplikację - i już możesz przetestować działanie skrótów - naciśnij literkę "P" na klawiaturze a zobaczysz, że zaznaczyła się funkcja "Pomnóż". OKi - nasza aplikacja wygląda dość fajnie, ale nie działa :(
No tak - bo czeka nas jeszcze trochę pracy przy niej. Najpierw musimy pododawać zmienne do obiektów - w tym celu uruchom ClassWizard-a (dostępny pod prawym klawiszem myszki) - przejdź do zakładki Member Variables. I tu już widzimy prawie wszystkie obiekty... prawie ? No właśnie - a dlaczego jest tu tylko jeden z RadioButtonów i nie ma 2 pól static ? Za to było odpowiedzialne pole Group - jak już pisałem to pole będzie mieć numer 0, a kolejne 1,2,3... ak więc wystarczy tylko jedna zmienna dla grupy. A staticów nie ma, bo nie zmieniliśmy ich identyfikatorów - a to dla VC++ oznacza, że nie będziemy ich używać do komunikacji z użytkownikiem.
Dodajmy więc zmienną dla IDC_DODAJ. Nazwij ją m_funkcja, a resztę ustawień zostaw bez zmian. Dzięki temu program będzie wiedział jaką opcję wybraliśmy. Program także musi wiedzieć jakie liczby wpisaliśmy w oba pola tekstowe, tak więc nie obędzie się od kolejnych zmiennych. Najpierw stwórzmy dla IDC_LICZBA1 zmienną typu Variable i typie float (Domyślnie jest CString) - nazwijmy ją m_liczba1, a dla IDC_LICZBA2 identycznie tylko nazwę na m_liczba2. Została jeszcze sprawa wyświetlenia wyniku - będzie ono wyświetlone w polu static tak więc stwórzmy kolejną zmienną dla IDC_WYNIK o nazwie m_wynik, także typu float. Mamy już wszystko więc klikamy na OK.
Teraz wyjaśniam dlaczego zmieniliśmy z CString na float. Pomyśl - program będzie działał na liczbach a nie stringach - float to liczby zmiennoprzecinkowe - gdybyśmy zostali przy CString to po późniejszym dodaniu kodu kompilator zgłaszałby błąd że np nie można pomnożyć zawartości pola1 i pola2 bo to są stringi. A działania jak wiadomo można wykonywać tylko na liczbach !
Skompiluj jeszcze raz swoją aplikację - już na pierwszy rzut oka widać, że żadna z opcji nie jest zaznaczona. Powinniśmy ustawić jakąś opcję na domyślną - niech to będzie Dodaj. Musimy to jeszcze zrobić przed załadowaniem się formy - tzn. że zanim zobaczymy cokolwiek obiekt będzie już zaznaczony. Aby to uczynić musimy otworzyć ClassWizard - przejść do pierwszej zakładki, a tam zobaczysz 3 listy wyboru. Pierwsza to obiekty, obok widzimy zdarzenia a pod spodem użyte już zdarzenie. Odnajdźmy więc tam OnInitDialog. Zaznacz ją i naciśnij Edit Code. Teraz musimy poszukać miejsca gdzie dopisać kod - musimy znaleźć pewien komentarz:
// Set the icon for this dialog. // The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
Jest komentarz: TODO: Add extra initialization here, czyli dodaj dodatkowy kod tutaj. A więc między tym komentarzem a funkcją return true; piszemy:
m_funkcja = 0; UpdateData(FALSE);
Po kompilacji programu zauważysz, że zaznaczona jest pierwsza funkcja czyli dodawanie. Jeśli zamiast 0 napisał byś 1 to zaznaczyła by się funkcja odejmij.
Podstawa programu już zrobiona - dalszym kodem zajmiemy się na następnej lekcji - dojdzie nowa funkcja Format którą chciałby dokładnie wytłumaczyć - a po napisaniu już takiego programu wszystko może Wam się popieprzyć... :)
Zapisz więc swój projekt i do następnej lekcji...
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 Adres - slash@ptik.prv.pl
Slash
e-mail: slash@ptik.ivg.pl

Copyright (c) 1999 - 2000 NoName |
|