Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++, WinAPI] Edytowanie tekstu oraz weryfikacja z użyciem funkcji MessageBox

Ostatnio zmodyfikowano 2012-12-10 18:29
Autor Wiadomość
xxxmgdxxx
Temat założony przez niniejszego użytkownika
[C++, WinAPI] Edytowanie tekstu oraz weryfikacja z użyciem funkcji MessageBox
» 2012-12-10 16:57:28
Witam mam wykonać okno aplikacji zawierające

1. Tekst tytułowy na środku obszaru roboczego pod paskiem tytułu
2. pole tekstowe z etykietą
3. przycisk ekranowy

Procedura okna powinna obsługiwać następujące zdarzenia:

1. czytać tekst wprowadzony w polu tekstowym
2. po naciśnięciu przycisku wyświetlić MessageBox zawierający wpisany w polu tekstowym ciąg znaków naciśnięcie OK powinno zamknąć aplikację
3. jeżeli nic nie zostało wpisane wyświetlić MessageBox z z odpowiednim komunikatem naciśnięcie OK powinno spowodować powrót do edycji tekstu
4. Wymuszenie zamknięcia okna powinno wyświetlić MessageBox z komunikatem: "Musisz wpisać coś" i spowodować powrót do edycji tekstu.

Jednak miałam dopiero jedne zajęcia z programowania obiektowego i wg nie wiem o co chodzi. Mam nadzieje że ktoś pomoże mi napisać ten program.
P-70708
kubawal
» 2012-12-10 17:07:20
programowania obiektowego
WinAPI jest tak (beznadziejnie) napisane, że aplikacje z jego użyciem rzadko kiedy pisze się z użyciem klas.
Nie musisz znać programowania obiektowego, żeby napisać jakąkolwiek aplikację z użyciem WinAPI
P-70710
xxxmgdxxx
Temat założony przez niniejszego użytkownika
» 2012-12-10 17:17:24
może ja wyślę to co pisaliśmy za zajęciach...
C/C++
#include <windows.h>

LRESULT CALLBACK ProceduraOkna( HWND, UINT, WPARAM, LPARAM );
char szNazwaKlasy[] = "Okno aplikacji";

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow )
{
    HWND hwnd;
    MSG komunikat;
    WNDCLASSEX okno;
   
   
    okno.cbSize = sizeof( WNDCLASSEX ); //określenie rozmiaru dla struktury, rezerwacja pamięci
    okno.hInstance = hInstance; //Identyfikator aplikacji, która ma być właścicielem okna (pierwszy parametr funkcji WinMain)
    okno.lpszClassName = szNazwaKlasy; //przypisanie zdefiniowanej wcześniej nazwy klasy dla aplikacji
    okno.lpfnWndProc = ProceduraOkna; //przypisanie procedury obsługi okna
    okno.style = 0; //style zachowania się okna
    okno.hIcon = LoadIcon( NULL, IDI_APPLICATION ); //ikona aplikacji
    okno.hIconSm = LoadIcon( NULL, IDI_APPLICATION ); //miniatura ikony aplikacji
    okno.hCursor = LoadCursor( NULL, IDC_HAND ); //kursor myszki
    okno.lpszMenuName = NULL; //menu okna
    okno.cbClsExtra = 0; // dodatkowa pamięć dla okna
    okno.cbWndExtra = 0; // dodatkowa pamięć dla okna
    okno.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 ); //kolor tła okna w tym przypadku biały
   
    RegisterClassEx( & okno );
    hwnd = CreateWindowEx( 0, szNazwaKlasy, "Pierwsze okno", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 544, 375, HWND_DESKTOP, NULL, hInstance, NULL );
    ShowWindow( hwnd, nCmdShow );
    while( GetMessage( & komunikat, NULL, 0, 0 ) ) //funkcja pobiera komunikat z systemowej kolejki komunikatów i umieszca w zmiennej: komunkat
    {
        TranslateMessage( & komunikat ); //funkcja dokonuje klku operacji na komunikacie
        DispatchMessage( & komunikat ); //funkcja przesyła przetworzony komunikat do procedury obsługi okna
    }
   
   
    return 0;
}
LRESULT CALLBACK ProceduraOkna( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch( msg )
    {
    case WM_PAINT: {
            PAINTSTRUCT psPaint; //tworzenie struktury zawierajacej informacje o obszarze do przemalowania
            HDC hdc = BeginPaint( hwnd, & psPaint ); //rozpoczęcie procedury malowania dla okna o podanym uchwycie tutaj: hwnd
           
            char Obiekt_napis[ 20 ] = "Hello, World"; //przygotowanie argumentów dla funkcji wypisującej tekst
            int dlugosc_tekstu = sizeof( Obiekt_napis );
            TextOut( hdc, 10, 10, Obiekt_napis, dlugosc_tekstu ); //wyświetlenie tekstu
            EndPaint( hwnd, & psPaint ); //zakończenie malowania
            break;
        }
       
        case WM_CLOSE
    : if(( MessageBox( hwnd, "Czy na pewno zamknac okno?", "Uwaga!", MB_OKCANCEL ) == IDOK ) ) { DestroyWindow( hwnd ); }
        break;
    case WM_DESTROY: //systemowy komunikat o zamknieciu okna
        PostQuitMessage( 0 ); //funkcja genrujaca komunikat do systemu po zamknieciu okna
        break;
       
        default:
        return DefWindowProc( hwnd, msg, wParam, lParam ); //domyślna systemowawa funkcja do obsługi niezdefiniowanych akcji
    }
   
    return 0;
}

I właściwie nie wiem o co chodzi.
P-70713
CodeMeister
» 2012-12-10 17:52:18
Usuń to :) okienko wyswietl funkcja CreateWindowEx  a nie jakąś paint :P

Zerknij w kurs na tym portalu. Z nim zrobisz bez problemu ;)

//EDIT:
Usun tylko procedure malowania okienka. inicjalizacje i rejestrowanie klasy zostaw w świętym spokoju.
P-70717
kubawal
» 2012-12-10 18:26:42
Przecież dobrze robi!
Okno tworzy funkcją CreateWindowEx(), a gdy procedura okna odbiera komunikat WM_PAINT, to znaczy, że powinniśmy odmalować to, co sobie narysowaliśmy w
naszym obszarze roboczym.
P-70725
kubawal
» 2012-12-10 18:29:38
I właściwie nie wiem o co chodzi.
Weź się dobrze poucz, a nie idź ze wszystkim od razu na forum.

Poza tym, nazwa tematu jest zła.
P-70726
« 1 »
  Strona 1 z 1