gylopl Temat założony przez niniejszego użytkownika |
[WinAPI] Brak obsługi wciśnięcia przycisku » 2012-12-28 15:10:50 witam, mam maly problem, otoz nie chce mi dzialac obsluga zdarzen, a mianowicie obsluga wcisniecia buttona. Button nalezy do ramki hRamka, jesli jednak nalezy do okna glownego hwnd to obsluga zdarzenia dziala. nie wiem za bardzo jak zmienic mam ta funckje, aby to dzialalo. #include <windows.h> #define ID_PRZYCISK1 501 #define ID_PRZYCISK2 502
LPSTR NazwaKlasy = "Klasa Okienka"; MSG Komunikat;
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ); HWND g_hPrzycisk; 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( 0, IDI_APPLICATION ); wc.hCursor = LoadCursor( NULL, IDC_ARROW ); wc.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 ); wc.lpszMenuName =( hInstance, MAKEINTRESOURCE( 200 ) ); wc.lpszClassName = NazwaKlasy; wc.hIconSm = LoadIcon( hInstance, "ikona" ); 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, "Moje okienko!", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, 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 ); HWND hRamka = CreateWindowEx( 0, "BUTTON", "RAMKA!", WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 70, 70, 600, 70, hwnd, NULL, hInstance, NULL ); HWND hButton1 = CreateWindowEx( WS_EX_CLIENTEDGE, "BUTTON", "Pierwszy", WS_CHILD | WS_VISIBLE | WS_BORDER, 50, 50, 150, 30, hRamka,( HMENU ) ID_PRZYCISK1, hInstance, NULL ), hButton2 = CreateWindowEx( WS_EX_CLIENTEDGE, "BUTTON", "Drugi", WS_CHILD | WS_VISIBLE | WS_BORDER, 50, 100, 150, 30, hwnd,( HMENU ) ID_PRZYCISK2, hInstance, NULL ); 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_COMMAND: switch( wParam ) { case ID_PRZYCISK1: MessageBox( hwnd, "Wcisnąłeś przycisk 1", "Test", MB_ICONINFORMATION ); break; case ID_PRZYCISK2: MessageBox( hwnd, "Wcisnąłeś przycisk 2", "Test", MB_ICONINFORMATION ); break; default: MessageBox( hwnd, "Zrobiłeś coś innego ;-)", "Test", MB_ICONINFORMATION ); } break; case WM_CLOSE: DestroyWindow( hwnd ); break; case WM_DESTROY: PostQuitMessage( 0 ); break; default: return DefWindowProc( hwnd, msg, wParam, lParam ); } return 0; }
Przycisk pierwszy nalezacy do hRamka nie dziala, a drugi nalezacy do hwnd dziala. |