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

Pomoc ze switch-em

Ostatnio zmodyfikowano 2011-10-10 15:12
Autor Wiadomość
comlaterbok
Temat założony przez niniejszego użytkownika
Pomoc ze switch-em
» 2011-10-10 14:56:44
Mam pytanie. Programuje od pewnego czasu , początkowo w dosowych okienkach a teraz w WinAPI. Początkowo szło mi bez żadnych problemów , dopóki nie natrafiłem w poradniku na linijkę:
C/C++
case WM_COMMAND:
if(( HWND ) lParam == g_hPrzycisk )
     MessageBox( hwnd, "Nacisnąłeś przycisk!", "Ha!", MB_ICONINFORMATION );

break;

Wszystko wydaje mi się dobrze , poza tym , co mnie do szału doprowadza , dlaczego widzę tu "case" , jak nie ma switch-a? Próbowałem już wszystkiego , i proszę was o pomoc , bo kochany kompilator nie pozwoli mi dalej pracować.

TO SĄ BŁĘDY.
C:\Users\Kamil\Desktop\Programy c++\Allegro\main.cpp In function `int WinMain(HINSTANCE__*, HINSTANCE__*, CHAR*, int)':
52 C:\Users\Kamil\Desktop\Programy c++\Allegro\main.cpp case label `273' not within a switch statement
53 C:\Users\Kamil\Desktop\Programy c++\Allegro\main.cpp `lParam' undeclared (first use this function)
  (Each undeclared identifier is reported only once for each function it appears in.)
55 C:\Users\Kamil\Desktop\Programy c++\Allegro\main.cpp break statement not within loop or switch
 C:\Users\Kamil\Desktop\Programy c++\Allegro\Makefile.win [Build Error]  [main.o] Error 1

A TO KOD:
C/C++
#include <windows.h>

LPSTR NazwaKlasy = "Klasa Okienka";
MSG Komunikat;
HWND g_hPrzycisk;

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;
    }
   
    // TWORZENIE OKNA
    HWND hwnd;
   
    hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, NazwaKlasy, "Super BOT", WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT, 550, 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 );
    g_hPrzycisk = CreateWindowEx( 0, "BUTTON", "Zakończ program", WS_CHILD | WS_VISIBLE,
    360, 400, 150, 30, hwnd, NULL, hInstance, NULL );
case WM_COMMAND:
    if(( HWND ) lParam == g_hPrzycisk )
         MessageBox( hwnd, "Nacisnąłeś przycisk!", "Ha!", MB_ICONINFORMATION );
   
    break;
   
    // 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:
        DestroyWindow( hwnd );
        break;
    case WM_DESTROY:
        PostQuitMessage( 0 );
        break;
       
        default:
        return DefWindowProc( hwnd, msg, wParam, lParam );
    }
   
    return 0;
}
P-41898
DejaVu
» 2011-10-10 15:11:40
Autor kursu WinAPI założył, że ma do czynienia z inteligentną istotą, która będzie potrafiła dopisać tego case-a do switch-a w WndProc-u... W końcu to WndProc przetwarza komunikaty, które przychodzą od okien. Na początku ciężko załapać jak funkcjonuje WinAPI :)
P-41902
SeaMonster131
» 2011-10-10 15:12:22
Że tak powiem... obsługujesz kliknięcie przyciska w tworzeniu okienka..hm pomysłowe :D Ale nie tędy droga, nawet wyraźny komentarz masz, zaraz po utworzeniu okienka:
// OBSŁUGA ZDARZEŃ
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )


@up: haha :)
P-41903
« 1 »
  Strona 1 z 1