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. #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 ) { 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 ); if( !RegisterClassEx( & wc ) ) { MessageBox( NULL, "Wysoka Komisja odmawia rejestracji tego okna!", "Niestety...", MB_ICONEXCLAMATION | MB_OK ); return 1; } 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 ); 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; } while( GetMessage( & Komunikat, NULL, 0, 0 ) ) { TranslateMessage( & Komunikat ); DispatchMessage( & Komunikat ); } return Komunikat.wParam; }
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; } |
|
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: switch( WM_COMMAND ) { case WM_COMMAND: if(( HWND ) lParam == g_hPrzycisk ) MessageBox( hwnd, "Nacisnąłeś przycisk!", "Ha!", MB_ICONINFORMATION ); break; } Prawie. Poczytaj Kontrolki. |
|
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. |
|
malan |
» 2011-10-31 18:28:05 Kontrolki => Identyfikowanie kontrolek w komunikatach - tam masz pokazane jak to zrobić. Pomyśl tylko gdzie to wstawić i gotowe :) |
|
comlaterbok Temat założony przez niniejszego użytkownika |
» 2011-10-31 18:42:51 Poprawione , ale nadal nie reaguje. #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 ) { 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 ); if( !RegisterClassEx( & wc ) ) { MessageBox( NULL, "Wysoka Komisja odmawia rejestracji tego okna!", "Niestety...", MB_ICONEXCLAMATION | MB_OK ); return 1; } 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 ); 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; } while( GetMessage( & Komunikat, NULL, 0, 0 ) ) { TranslateMessage( & Komunikat ); DispatchMessage( & Komunikat ); } return Komunikat.wParam; }
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; }
|
|
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. |
|
« 1 » |