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

[WinApi] Problem z przyciskami

Ostatnio zmodyfikowano 2011-10-31 18:50
Autor Wiadomość
comlaterbok
Temat założony przez niniejszego użytkownika
[WinApi] Problem z przyciskami
» 2011-10-31 18:18:55
Czy mógłby mi ktoś pomóc z drobnym problemem? Albowiem program działa , ale gdy klikam na przycisk , to po prostu on nie reaguje. Dziękuje za szybką odpowiedź.
Ps. a , i gdyby ktoś mógł podać mi poprawiony tekst , bo trudno mi "zielonemu" wprowadzać niektóre poprawki.

C/C++
#include <windows.h>

HWND g_hPrzycisk, g_hPrzycisk2, g_hPrzycisk3, g_hPrzycisk4, g_hPrzycisk5, g_hPrzycisk6, g_hPrzycisk7, g_hPrzycisk8, g_hPrzycisk9, g_hPrzycisk10, g_hPrzycisk11, g_hPrzycisk12;
UINT uMsg;
WPARAM wParam;
LPARAM lParam;
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;
    }
    // TWORZENIE OKNA
    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 );
    g_hPrzycisk = CreateWindowEx( 0, "BUTTON", "Plemiona", WS_CHILD | WS_VISIBLE,
    25, 100, 150, 30, hwnd, NULL, hInstance, NULL );
    g_hPrzycisk2 = CreateWindowEx( 0, "BUTTON", "Onet", WS_CHILD | WS_VISIBLE,
    25, 150, 150, 30, hwnd, NULL, hInstance, NULL );
    g_hPrzycisk3 = CreateWindowEx( 0, "BUTTON", "Interia", WS_CHILD | WS_VISIBLE,
    25, 200, 150, 30, hwnd, NULL, hInstance, NULL );
    g_hPrzycisk4 = CreateWindowEx( 0, "BUTTON", "Wp", WS_CHILD | WS_VISIBLE,
    25, 250, 150, 30, hwnd, NULL, hInstance, NULL );
    g_hPrzycisk5 = CreateWindowEx( 0, "BUTTON", "C++", WS_CHILD | WS_VISIBLE,
    25, 300, 150, 30, hwnd, NULL, hInstance, NULL );
    g_hPrzycisk6 = CreateWindowEx( 0, "BUTTON", "Facebook", WS_CHILD | WS_VISIBLE,
    25, 350, 150, 30, hwnd, NULL, hInstance, NULL );
    g_hPrzycisk7 = CreateWindowEx( 0, "BUTTON", "Tłumacz google", WS_CHILD | WS_VISIBLE,
    250, 100, 150, 30, hwnd, NULL, hInstance, NULL );
    g_hPrzycisk8 = CreateWindowEx( 0, "BUTTON", "Komixxy", WS_CHILD | WS_VISIBLE,
    250, 150, 150, 30, hwnd, NULL, hInstance, NULL );
    g_hPrzycisk9 = CreateWindowEx( 0, "BUTTON", "Demotywatory", WS_CHILD | WS_VISIBLE,
    250, 200, 150, 30, hwnd, NULL, hInstance, NULL );
    g_hPrzycisk10 = CreateWindowEx( 0, "BUTTON", "E-akademia", WS_CHILD | WS_VISIBLE,
    250, 250, 150, 30, hwnd, NULL, hInstance, NULL );
    g_hPrzycisk11 = CreateWindowEx( 0, "BUTTON", "Wikipedia", WS_CHILD | WS_VISIBLE,
    250, 300, 150, 30, hwnd, NULL, hInstance, NULL );
    g_hPrzycisk12 = CreateWindowEx( 0, "BUTTON", "Multibank", WS_CHILD | WS_VISIBLE,
    250, 350, 150, 30, hwnd, NULL, hInstance, NULL );
   
    switch( WM_COMMAND )
    {
    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:
        if( MessageBox( NULL, "Czy napewno chcesz zamknąć program?", "Save Web-Site",
        MB_ICONQUESTION | MB_YESNO ) == IDYES )
        PostQuitMessage( 0 ),
             DestroyWindow( hwnd );
        else
             break;
       
    case WM_DESTROY:
        PostQuitMessage( 0 );
       
        break;
       
        default:
        return DefWindowProc( hwnd, msg, wParam, lParam );
    }
   
    return 0;
}
P-43151
malan
» 2011-10-31 18:22:03
Czy na stronie, z której skopiowałeś ten kod nie było napisane, że obsługę kliknięć trzeba napisać samemu? ;)

/edit:
C/C++
switch( WM_COMMAND )
{
case WM_COMMAND:
    if(( HWND ) lParam == g_hPrzycisk )
         MessageBox( hwnd, "Nacisnąłeś przycisk!", "Ha!", MB_ICONINFORMATION );
   
    break;
}
Prawie. Poczytaj » Kurs WinAPI, C++ » PodstawyKontrolki lekcja.
P-43152
comlaterbok
Temat założony przez niniejszego użytkownika
» 2011-10-31 18:25:05
Zgadzam się , skopiowałem , jednak dodaję własne rzeczy. A jest to z waszego poradnika. Staram się nauczyć i sobie przerabiam , więc przepraszam jeżeli głupi błąd ale każdy się kiedyś uczy , i nie wiem jak dodać ową obsługę chociaż siedzę nad tym już 2 dni. I byłbym wam bardzo wdzięczny gdybyście mogli mi pomóc.
P-43153
malan
» 2011-10-31 18:28:05
» Kurs WinAPI, C++ » PodstawyKontrolki lekcja => Identyfikowanie kontrolek w komunikatach - tam masz pokazane jak to zrobić. Pomyśl tylko gdzie to wstawić i gotowe :)
P-43154
comlaterbok
Temat założony przez niniejszego użytkownika
» 2011-10-31 18:42:51
Poprawione , ale nadal nie reaguje.

C/C++
#include <windows.h>

HWND g_hPrzycisk, g_hPrzycisk2, g_hPrzycisk3, g_hPrzycisk4, g_hPrzycisk5, g_hPrzycisk6, g_hPrzycisk7, g_hPrzycisk8, g_hPrzycisk9, g_hPrzycisk10, g_hPrzycisk11, g_hPrzycisk12;
UINT uMsg;
WPARAM wParam;
LPARAM lParam;
LPSTR NazwaKlasy = "Klasa Okienka";
MSG Komunikat;

#define ID_PRZYCISK1 501
#define ID_PRZYCISK2 502
#define ID_PRZYCISK3 503
#define ID_PRZYCISK4 504
#define ID_PRZYCISK5 505
#define ID_PRZYCISK6 506
#define ID_PRZYCISK7 507
#define ID_PRZYCISK8 508
#define ID_PRZYCISK9 509
#define ID_PRZYCISK10 510
#define ID_PRZYCISK11 511
#define ID_PRZYCISK12 512

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, "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 );
    g_hPrzycisk = CreateWindowEx( 0, "BUTTON", "Plemiona", WS_CHILD | WS_VISIBLE,
    25, 100, 150, 30, hwnd,( HMENU ) ID_PRZYCISK1, hInstance, NULL );
    g_hPrzycisk2 = CreateWindowEx( 0, "BUTTON", "Onet", WS_CHILD | WS_VISIBLE,
    25, 150, 150, 30, hwnd,( HMENU ) ID_PRZYCISK2, hInstance, NULL );
    g_hPrzycisk3 = CreateWindowEx( 0, "BUTTON", "Interia", WS_CHILD | WS_VISIBLE,
    25, 200, 150, 30, hwnd,( HMENU ) ID_PRZYCISK3, hInstance, NULL );
    g_hPrzycisk4 = CreateWindowEx( 0, "BUTTON", "Wp", WS_CHILD | WS_VISIBLE,
    25, 250, 150, 30, hwnd,( HMENU ) ID_PRZYCISK4, hInstance, NULL );
    g_hPrzycisk5 = CreateWindowEx( 0, "BUTTON", "C++", WS_CHILD | WS_VISIBLE,
    25, 300, 150, 30, hwnd,( HMENU ) ID_PRZYCISK5, hInstance, NULL );
    g_hPrzycisk6 = CreateWindowEx( 0, "BUTTON", "Facebook", WS_CHILD | WS_VISIBLE,
    25, 350, 150, 30, hwnd,( HMENU ) ID_PRZYCISK6, hInstance, NULL );
    g_hPrzycisk7 = CreateWindowEx( 0, "BUTTON", "Tłumacz google", WS_CHILD | WS_VISIBLE,
    250, 100, 150, 30, hwnd,( HMENU ) ID_PRZYCISK7, hInstance, NULL );
    g_hPrzycisk8 = CreateWindowEx( 0, "BUTTON", "Komixxy", WS_CHILD | WS_VISIBLE,
    250, 150, 150, 30, hwnd,( HMENU ) ID_PRZYCISK8, hInstance, NULL );
    g_hPrzycisk9 = CreateWindowEx( 0, "BUTTON", "Demotywatory", WS_CHILD | WS_VISIBLE,
    250, 200, 150, 30, hwnd,( HMENU ) ID_PRZYCISK9, hInstance, NULL );
    g_hPrzycisk10 = CreateWindowEx( 0, "BUTTON", "E-akademia", WS_CHILD | WS_VISIBLE,
    250, 250, 150, 30, hwnd,( HMENU ) ID_PRZYCISK10, hInstance, NULL );
    g_hPrzycisk11 = CreateWindowEx( 0, "BUTTON", "Wikipedia", WS_CHILD | WS_VISIBLE,
    250, 300, 150, 30, hwnd,( HMENU ) ID_PRZYCISK11, hInstance, NULL );
    g_hPrzycisk12 = CreateWindowEx( 0, "BUTTON", "Multibank", WS_CHILD | WS_VISIBLE,
    250, 350, 150, 30, hwnd,( HMENU ) ID_PRZYCISK12, hInstance, NULL );
   
   
    switch( wParam )
    {
    case ID_PRZYCISK1:
        MessageBox( hwnd, "Nacisnąłeś przycisk!", "Ha!", MB_ICONINFORMATION );
        break;
    case ID_PRZYCISK2:
        MessageBox( hwnd, "Nacisnąłeś przycisk2!", "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:
        if( MessageBox( NULL, "Czy napewno chcesz zamknąć program?", "Save Web-Site",
        MB_ICONQUESTION | MB_YESNO ) == IDYES )
        PostQuitMessage( 0 ),
             DestroyWindow( hwnd );
        else
             break;
       
    case WM_DESTROY:
        PostQuitMessage( 0 );
       
        break;
       
        default:
        return DefWindowProc( hwnd, msg, wParam, lParam );
    }
   
    return 0;
}
P-43155
DejaVu
» 2011-10-31 18:50:59
Oczekujesz, że będziemy za Ciebie program pisali? Bo tak to obecnie wygląda. Twoje pytania wynikają tylko i wyłącznie z tego, że nie przeczytałeś ze zrozumieniem kursu. Twój program, Twój problem. Kurs opisuje jak działa WinAPI. Wiedzę masz podaną na tacy, a za Ciebie nikt nie będzie pisał programu.
P-43157
« 1 »
  Strona 1 z 1