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

Problem z WinApi

Ostatnio zmodyfikowano 2011-10-30 23:12
Autor Wiadomość
comlaterbok
Temat założony przez niniejszego użytkownika
Problem z WinApi
» 2011-10-30 21:23:48
Jestem początkujący w tj bibliotece , i może to głupi problem , ale głowię się nad nim i nie wiem...
Program działał , dopóki nie dałem w nim funkcji


C/C++
// TWORZENIE OKNA
LPSTR okno2( void )
{
    HWND hwnd;
   
    hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, NazwaKlasy, "Save Web-Site", WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT, 480, 480, NULL, NULL, hInstance, NULL );
   
    if( hwnd == NULL )
    {
        MessageBox( NULL, "Okno odmówiło przyjścia na świat!", "Ale kicha...", MB_ICONEXCLAMATION );
        return 1;
    }
   
    ShowWindow( hwnd, nCmdShow ); // Pokaż okienko...
    UpdateWindow( hwnd );
   
    // Pętla komunikatów
    while( GetMessage( & Komunikat, NULL, 0, 0 ) )
    {
        TranslateMessage( & Komunikat );
        DispatchMessage( & Komunikat );
    }
    return Komunikat.wParam;
}

Błędy:

 C:\Dev-Cpp\main.cpp In function `int WinMain(HINSTANCE__*, HINSTANCE__*, CHAR*, int)':
38 C:\Dev-Cpp\main.cpp expected primary-expression before "okno2"
38 C:\Dev-Cpp\main.cpp expected `;' before "okno2"
 C:\Dev-Cpp\Makefile.win [Build Error]  [main.o] Error 1

Jeżeli chodzi o typ zmiennej jaką funkcja ma mi zwracać , to próbowałem już każdej. Zostawiłem to , jako że jest to synonim char.
Pomóżcie zielonemu :)
Dzięki
P-43109
malan
» 2011-10-30 21:34:18
int okno2()
?
P-43112
comlaterbok
Temat założony przez niniejszego użytkownika
» 2011-10-30 21:38:34
C/C++
#include <windows.h>

int okno2( void );

LPSTR NazwaKlasy = "Klasa Okienka";
MSG Komunikat;

LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
   
    // WYPEŁNIANIE STRUKTURY
    WNDCLASSEX wc;
   
    wc.cbSize = sizeof( WNDCLASSEX );
    wc.style = 0;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
    wc.hCursor = LoadCursor( NULL, IDC_ARROW );
    wc.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 );
    wc.lpszMenuName = NULL;
    wc.lpszClassName = NazwaKlasy;
    wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION );
   
    // REJESTROWANIE KLASY OKNA
    if( !RegisterClassEx( & wc ) )
    {
        MessageBox( NULL, "Wysoka Komisja odmawia rejestracji tego okna!", "Niestety...",
        MB_ICONEXCLAMATION | MB_OK );
        return 1;
    }
    okno2();
    // TWORZENIE OKNA
    int okno2( void )
    {
        HWND hwnd;
       
        hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, NazwaKlasy, "Save Web-Site", WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, 480, 480, NULL, NULL, hInstance, NULL );
       
        if( hwnd == NULL )
        {
            MessageBox( NULL, "Okno odmówiło przyjścia na świat!", "Ale kicha...", MB_ICONEXCLAMATION );
            return 1;
        }
       
        ShowWindow( hwnd, nCmdShow ); // Pokaż okienko...
        UpdateWindow( hwnd );
       
        // Pętla komunikatów
        while( GetMessage( & Komunikat, NULL, 0, 0 ) )
        {
            TranslateMessage( & Komunikat );
            DispatchMessage( & Komunikat );
        }
        return Komunikat.wParam;
    }
}

// OBSŁUGA ZDARZEŃ
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch( msg )
    {
    case WM_CLOSE:
        MessageBox( NULL, "Czy napewno chcesz zamknąć program?", "Save Web-Site",
        MB_ICONQUESTION | MB_YESNO );
        switch( msg )
        {
        case IDYES:
            DestroyWindow( hwnd );
            break;
           
        case IDNO:
            MessageBox( NULL, "Okej", "Save Web-Site", MB_ICONINFORMATION | MB_OK );
            okno2();
            break;
        }
    case WM_DESTROY:
        PostQuitMessage( 0 );
        break;
       
       
       
        default:
        return DefWindowProc( hwnd, msg, wParam, lParam );
    }
   
    return 0;
}



Nadal nie idzie z int-em.    To cały kod.
P-43113
malan
» 2011-10-30 21:40:31
P-43114
comlaterbok
Temat założony przez niniejszego użytkownika
» 2011-10-30 21:57:57
Dobrze. Powiedzmy , że uporałem się z tym problemem. Mam jeszcze jedno pytanie. Klikam w programie aby mi zamknął okno (krzyżyk). Wyskakuje mi pytanie czy na pewno , ja zmieniam zdanie i klikam "nie".
Jak zrobić, aby po prostu zamknął mi komunikat i powrócił do okna głównego?

Ps. Wybór "Yes" "No" - czyli komunikat , jest zrobiony oczywiście w switch-u.
P-43115
comlaterbok
Temat założony przez niniejszego użytkownika
» 2011-10-30 22:31:02
Pomoże mi ktoś?
P-43116
DejaVu
» 2011-10-30 23:03:17
Tak, » KursyKurs WinAPI, C++ kurs :)
P-43117
szyx_yankez
» 2011-10-30 23:12:05
C/C++
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch( msg )
    {
    case WM_CLOSE:
        if( MessageBox( NULL, "Czy napewno chcesz zamknąć program?", "Save Web-Site",
        MB_ICONQUESTION | MB_YESNO ) == IDYES )
        PostQuitMessage( 0 ),
             DestroyWindow( hwnd ); else
        MessageBox( NULL, "Okej", "Save Web-Site", MB_ICONINFORMATION | MB_OK );
       
        break;
       
    case WM_DESTROY:
        PostQuitMessage( 0 );
       
        break;
       
        default:
        return DefWindowProc( hwnd, msg, wParam, lParam );
    }
   
    return 0;
}
P-43118
« 1 »
  Strona 1 z 1