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 wskaŸnik 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 wskaŸnik 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