Lekcja
9 - Kurs Visual C++ by SLASH
Dziś przed
Wami najtrudniejsza lekcja jak do tej pory - może nie poznamy dużo nowych
funkcji, ale sprawa jest naprawdę ciężka - ja sam do dziś mam problemy z
tym, ale cóż - to czego się dzisiaj nauczmy będzie nam potrzebne w przyszłości.
Otóż dziś zajmiemy się własnymi oknami dialogowymi. Mam nadzieję, że
wiesz co to jest okno dialogowe... a jeśli nie to się nie przejmuj - takie
okno dialogowe to zazwyczaj małe okienko wyświetlone przez pewien program w
celu podania do niego jakichś parametrów. Tak np. okienko Otwórz, Zapisz to
okna dialogowe. My stworzymy dziś sami okienko i przekażemy parametry z niego
do gównego okna programu. Tak więc zaczynamy:
Stwórz
projekt MFC i nazwij go Okienko. Jak zwykle usuwamy wszystkie obiekty z formy i
wstawiamy tam duże pole Static - nadajmy mu identyfikator IDC_ZWROT. Stwórzmy
dla niego zmienną klasy CString - m_zwrot. Na formie musimy jeszcze dodać
przycisk wywołujący nasze okienko - dodaj go więc - identyfikator zostaw taki
jak jest - zmień tylko etykietę (Caption) na Pokaż.
Pierwsza
forma załatwiona - teraz musimy stworzyć drugą. Aby to zrobić w obszarze
roboczym (już nie przypominam gdzie to jest !) odnajdź katalog Dialog. Teraz
kliknij na nim prawym klawiszem myszki i z menu wybierz Insert Dialog. OK -
teraz Twoim oczom ukazała się 2 forma. Nie usuwaj z niej żadnych obiektów -
skoro to ma być okienko to musi posiadać przyciski OK i Cancel. Na tej formie
umieść teraz textbox-a oraz checkBox-a. Zmień ID textboxa na IDC_TEXTPOLE, a
CheckBox-a na IDC_WYBOR oraz Etykietę na Wybór.
Teraz
musimy stworzyć zmienne - w tym celu wybieramy ClassWizard-a. Ale co to ?
Wyskoczyło jakieś okienko ! Tutaj VC++ wykrył, że nasze obiekty leżą na
innej formie i proponuje nam stworzenie nowej klasy - a więc klikamy na OK.
Teraz wyskoczy drugie okno (dialogowe !). Jako nazwę klasy wpisujemy:
CWiadomoscDlg. Upewniamy się jeszcze czy klasą bazową jest CDialog i klikamy
na OK. Teraz już możemy dodać zmienne - dla IDC_TEXTPOLE dajemy zmienną o
nazwie m_poleedit, a dla IDC_WYBOR - m_wybor. Możemy już zamknąć
ClassWizarda klikając na OK.
Przed
zrobieniem czegokolwiek musimy poinformować nasz program o istnieniu nowego
okna. Pamiętasz jak na poprzedniej lekcji informowaliśmy kompilator o nowej
funkcji ? Teraz zrobimy identycznie ! Tyle tylko, że tera informujemy o nowym
oknie. Tak więc w obszarze roboczym przechodzimy do zakładki Files, potem do
folderu Source Files i otwieramy plik OkienkoDlg.h. Prawdopodobnie znaleźliśmy
się już przy dyrektywach #include. UWAGA ! W tym wypadku nie dopiszemy nowej
dyrektywy na końcu tylko nad #include OkienkoDlg.h .
Dlaczego
tak musimy zrobić ! Otóż w naszym głównym programie będziemy stosować
zmienne które znajdują się w tym małym okienku. Tak więc kompilator
sprawdzając poprawność najpierw otworzy duże okno - znajdzie
niezadeklarowane zmienne (bo one znajdują się w małym okienku) i zwróci błąd.
Jeśli to zrobimy tak jak napisałem to kompilator najpierw sprawdzi małe
okienko, potem duże (ale już w tym momencie wie, że jakieś inne okienko te
zmienne stworzyło).
Tak więc
nasze dyrektywy powinny wyglądać tak:
// OkienkoDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Okienko.h"
#include "WiadomoscDlg.h" //
<- Nowe !!!!!!!!!
#include "OkienkoDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
I w ten
oto sposób program już wie, że jakieś tam okienko istnieje. Dla każdego
obiektu tworzyliśmy ClassWizardem zmienne - niestety dla okienka jest to niemożliwe
- zmienną musimy stworzyć ręcznie. W obszarze roboczym przechodzimy do zakłądki
ClassView - rozwijamy listę, teraz kliknij prawym klawiszem myszki na
COkienkoDlg i z powstałego menu wybierz Add Member Variable - czyli dodaj
zmienną. Jako typ wpisz po prostu nazwę klasy czyli CWiadomoscDlg, a zmienną
nazwij okienko.
Teraz
przechodzimy do głównej formy - tam do przycisku Pokaż dodajemy zdarzenie
kliknięcia i następujący kod:
CString zaz;
CString pole;
if (okienko.DoModal( ) == IDOK)
{
if (okienko.m_wybor == FALSE)
{
zaz = "nie był zaznaczony";
}
else
{
zaz = "był zaznaczony";
}
pole = okienko.m_poleedit;
m_zwrot.Format("W pole wpisałeś: \n\n%s \n\ni CheckBox %s",pole, zaz);
UpdateData(FALSE);
}
okienko.DoModal( ) ma za zadanie wyświetlić okienko - my użyliśmy tego
wraz z if do sprawdzenia czy wybrałeś OK. Potem sprawdzamy czy w okienku
ChcecBox był zaznaczony i tworzymy odpowiednie odpowiedzi. Potem kopiujemy
zawartość TextBoxa do zmiennej pole. A tu Ciekawe formatowanie - dostregłeś
pewnie \n - są to sekwencje ucieczki - a przełącznik \n przenosi nas do
następnej linii. Oto krótki przykładzik:
m_zwrot.Format("Dziś uczę się C++ z kursu SLASH-a. Ciekawe jak
wyjdzie mi ten przykład");
Ta funkcja w pole static wisze coś takiego:
Dziś uczę się C++ z kursu SLASH-a. Ciekawe jak wyjdzie mi ten przykład
A teraz z sekwencją ucieczki \n:
m_zwrot.Format("Dziś uczę się C++ z kursu SLASH-a. \nCiekawe jak
wyjdzie mi ten przykład");
Spowoduje to wyświetlenie czegoś takiego:
Dziś uczę się C++ z kursu SLASH-a.
Ciekawe jak wyjdzie mi ten przykład
Mogą Cię trochę zmylić łączenia ze stringiem - np. coś takiego \nc
- nie jest to żadna sekwencja \nc - tylko \n i zaraz po tym (bez spacji)
literka c.
U mnie programik wygląda tak:
To jest małe okienko:
A to duże:
Jak widzicie programy robię na żywo - więc kod
jest dobry - jeśli coś
nie wyszło tzn, że coś spartoliłeś - kompilator zawsze zwraca komunikaty błędów
- pewnie zapomniałeś gdzieś ; albo przekręciłeś literki...
Dziś odwaliliśmy kawał dobrej roboty - na następnej lekcji zajmiemy się
pętlami...
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 -
zanotowane.pldoc.pisz.plpdf.pisz.plteen-mushing.xlx.pl