Jak by tu ... (Visual C++ 6.0)
Spis pytań
Jak pobrać od użytkownika nazwę pliku?
Jak wypisać tekst w polu etykietki?
Jak wypisać tekst na powierzchni okienka?
Jak dostać się do aktywnego okienka?
Jak czytać (i zapisywać) dane do plików?
Jak wypisać komunikat dla użytkownika?
Jak pobrać od użytkownika nazwę pliku?
void CTestDlg::OnWyborPliku()
// Procedura obsługi kliknięcia na przycisku WyborPliku
{
CFileDialog fd(true);
// Deklaracja zmiennej z pudełkiem dialogowym do wyboru plików.
// Nie wyświetla jeszcze samego dialogu. Argument true oznacza,
// że będzie to dialog do otwierania plików (false - do zamykania).
// Opis pozostałych parametrów -> CFileDialog::CFileDialog.
// Uwaga: część atrybutów ustawia się po konstrukcji tego dialogu,
// ale przed jego wywołaniem (np. początkowy katalog ustawia się
// używając metody m_ofn i pola lpstrInitialDir uzyskanej
struktury.
if (fd.DoModal() == IDOK)
// DoModal wyświetla dialog. Wynikiem jest IDOK (użytkownik wybrał plik)
// lub IDCANCEL (zrezygnował lub wystąpił błąd).
MessageBox("Użytkownik wybrał " + fd.GetPathName());
// GetPathName daje pełną ścieżkę do pliku wybranego przez użytkownika.
// Można także odczytać samo rozszerzenie nazwy (GetFileExt) lub samą
// nazwę (GetFileName).
else
MessageBox("Użytkownik zrezygnował");
}
Powrót do początku strony
Jak wypisać tekst w polu etykietki?
void CTestDlg::OnZmianaEtykietki()
// Procedura obsługi kliknięcia na przycisku ZmianaEtykietki
{
static int liczKlik = 0;
// Zmienna zliczjąca kliknięcia na ten przycisk, ich liczba będzie
// wyświetlana w etykietce IDC_etykietka. Zmienna jest zadeklarowana
// jako static, tak by przy kolejnych wywołaniach obsługi przycisku
// pamiętała swoją poprzednią wartość (inne rozwiązanie to zadeklarowanie
// tej zmiennej, już bez static, jako globalnej).
CWnd *et = GetDlgItem(IDC_Etykietka);
// GetDlgItem daje wskanik do komponentu o podanym identyfikatorze,
// czyli w tym przykladzie zakladamy, że IDC_etykietka jest identyfikatorem
// jakiejś etykietki (CStatic). Identyfikator zmienia się klikając
// prawym guzikiem myszy i wybierając Properties.
liczKlik++;
CString s;
s.Format("Liczba kliknięć = %d", liczKlik);
// Tworzymy napis korzystając z możliwości formatowania. Fragment
// %d mówi o tym, że w tym miejscu tworzonego napisu zamiast %d ma
// być tekstowa reprezentacja liczby całkowitej.
et->SetWindowText(s);
// Korzystamy tu z polimorfizmu i dziedziczenia (CStatic jest podklasą
// CWnd (a więc etykietka, przycisk też są okienkami!). Zwróćmy uwagę,
// że nie ma potrzeby deklarowania et jako CStatic*, bo metoda
// SetWindowText jest metodą z klasy CWnd. Tej samej metody użyjemy
// więc by zmienić np. etykietkę przycisku albo całego okna.
}
Powrót do początku strony
Jak wypisać tekst na powierzchni okienka?
void CTestDlg::OnWyswietlenieNapisu()
// Procedura obsługi kliknięcia na przycisku WyswietlenieNapisu
{
CDC* dc = GetDC();
// Pobieramy kontekst (płótno).
dc->SetBkMode(TRANSPARENT);
// Ustalamy tło napisu na przezroczyste.
dc->TextOut(50, 50, "Napis");
// Wypisujemy tekst w dowolnym miejscu na powierzchni okna. Parametry
// oznaczają odpowiednio: x, y, wyświetlany napis.
ReleaseDC(dc);
// Zwalniamy kontekst.
}
Powrót do początku strony
Jak dostać się do aktywnego okienka?
void f()
// Ta fukcja nie wie jakie okno jest aktywne w momencie jej wywołania,
// musi to sama wyliczyć
{
CWnd* p = CWnd::GetActiveWindow();
if (!p)
return;
// Pobiera wskanik do wktywnego okna, i sprawdza czy takie było
p->SetWindowText("Nowa nazwa okna");
// Test działania
CDC* dc = p->GetWindowDC();
// Pobranie kontekstu (płótna) aktywnego okienka
if (dc)
{
dc->Rectangle(20,20,50,50);
// Test działania
p->ReleaseDC(dc);
// Trzeba zwolnić
}
}
void CTestDlg::OnPobranieAktywnegoOkna()
// Procedura obsługi kliknięcia na przycisku PobranieAktywnegoOkna
{
f(); // Wywołania fukcji (a nie metody, więc nie związanej z jakimś okienkiem)
}
Powrót do początku strony
Jak czytać (i zapisywać) dane do plików?
void CTestDlg::OnCzytanieIPisanie()
// Procedura obsługi kliknięcia na przycisku OnCzytanieIPisanie
{
// Ta procedura wymaga dodania #include "fstream.h" na początku pliku
const CString nazwa = "c:\\del.del";
// Nazwa przykładowego pliku tekstowego (będzie niszczony)
ofstream outp(nazwa);
// Zadeklarowanie strumienia wyjściowego z jednoczesnym otwarciem.
outp << 13 << " " << 3.1415 << endl
<< "Tekst1" << " " << "Tekst2";
// Zapisanie testowych danych na plik
outp.close();
// Ten strumień już nie będzie potrzebny.
int i;
float pi;
char str1[100];
char str2[100];
// Deklaracja zmiennych (różnych typów), które będą wczytane ze strumienia
ifstream inpt(nazwa);
inpt >> i >> pi >> str1 >> str2;
// Otwarcie strumienia i wczytanie danych
inpt.close();
// Zamknięcie strumienia (niekonieczne) cbo ten strumień i tak za chwilę
// byłby zamknięty
CString wyn;
// Napis z wynikiem testu wczytywania
wyn.Format("int = %d\n"
"float = %f\n"
"char* = %s\n"
"char* = %s",
i, pi, str1, str2);
MessageBox(wyn);
}
Powrót do początku strony
Jak wypisać komunikat dla użytkownika?
W procedurach obsługi zdarzeń okienka (metoda okienka):
MessageBox("Tekst")
// Można podać więcej parametrów, p. pomoc VC++
Poza procedurami zdarzeń okienka (funkcja z SDK):
MessageBox(NULL, "Tekst nagłówka okna", "Tekst komunikatu", 0);
// Można podać inne wartości więcej parametrów, p. pomoc VC++
Powrót do początku strony