Lotherad Temat założony przez niniejszego użytkownika |
[WinAPI, C++] Nie da się zaznaczyć checkbox'a. » 2012-09-18 22:42:13 Witam. Mam taki oto kod: #include <windows.h> HWND g_hPrzycisk; MSG Komunikat; LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ); int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShow ) { WNDCLASSEX wc; wc.cbSize = sizeof( WNDCLASSEX ); wc.style = 0; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.lpfnWndProc = DefWindowProc; wc.hInstance = hInstance; wc.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wc.hCursor = LoadCursor( NULL, IDC_ARROW ); wc.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 ); wc.lpszMenuName = 0; wc.lpszClassName = "NKlasy"; wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION ); if( !RegisterClassEx( & wc ) ) { MessageBox( NULL, "Code 1", "Error", MB_ICONEXCLAMATION | MB_OK ); return 1; } HWND hwnd; hwnd = CreateWindowEx( 0, "NKlasy", "First", WS_SYSMENU, CW_USEDEFAULT, CW_USEDEFAULT, 240, 320, NULL, NULL, hInstance, NULL ); g_hPrzycisk = CreateWindowEx( 0, "BUTTON", "Przycisk", WS_CHILD | WS_VISIBLE | BS_CHECKBOX, 50, 50, 150, 50, hwnd, NULL, hInstance, NULL ); ShowWindow( hwnd, nShow ); UpdateWindow( hwnd ); 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: if(( HWND ) lParam == g_hPrzycisk ) MessageBox( hwnd, "a", "a", MB_ICONINFORMATION ); break; case WM_CLOSE: DestroyWindow( hwnd ); break; case WM_DESTROY: PostQuitMessage( 0 ); break; default: return DefWindowProc( hwnd, msg, wParam, lParam ); } return 0; }
Robiłem wszystko według kursu na tej stronie. Jednak gdy kompiluję i uruchamiam program mogę zobaczyć kwadracik na zaznaczenie, ale nie mogę zaznaczyć. Kwadracik nie jest wcale szary i gdy klikam nie odtwarza się dźwięk błędu, jest checkbox, ale nie mogę go zaznaczyć. Jak to naprawić? Proszą o szybką pomoc. |
|
xevuel |
» 2012-09-18 23:05:46 |
|
Lotherad Temat założony przez niniejszego użytkownika |
» 2012-09-19 08:10:35 Przeczytałem i dalej nie wiem (wina wczesnej pory). Możesz wytłumaczyć? |
|
DejaVu |
» 2012-09-19 12:24:42 checkbox jest przyciskiem, a więc po jego kliknięciu trzeba do kontrolki wysłać notyfikację informującą o zmianie jego wyglądu (zaznacz/odznacz). |
|
Lotherad Temat założony przez niniejszego użytkownika |
» 2012-09-19 14:13:18 Zmieniłem z checkbox'a na button i nic się nie dzieje po wciśnięciu przycisku: #include <windows.h> HWND g_hPrzycisk; MSG Komunikat; LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ); int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShow ) { WNDCLASSEX wc; wc.cbSize = sizeof( WNDCLASSEX ); wc.style = 0; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.lpfnWndProc = DefWindowProc; wc.hInstance = hInstance; wc.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wc.hCursor = LoadCursor( NULL, IDC_ARROW ); wc.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 ); wc.lpszMenuName = 0; wc.lpszClassName = "NKlasy"; wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION ); if( !RegisterClassEx( & wc ) ) { MessageBox( NULL, "Code 1", "Error", MB_ICONEXCLAMATION | MB_OK ); return 1; } HWND hwnd; hwnd = CreateWindowEx( 0, "NKlasy", "Save saver alpha", WS_SYSMENU, CW_USEDEFAULT, CW_USEDEFAULT, 240, 320, NULL, NULL, hInstance, NULL ); g_hPrzycisk = CreateWindowEx( 0, "BUTTON", "Przycisk", WS_CHILD | WS_VISIBLE, 50, 50, 150, 50, hwnd, NULL, hInstance, NULL ); ShowWindow( hwnd, nShow ); UpdateWindow( hwnd ); 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: if(( HWND ) lParam == g_hPrzycisk ) MessageBox( hwnd, "Nacisnąłeś przycisk!", "Ha!", MB_ICONINFORMATION ); break; case WM_CLOSE: DestroyWindow( hwnd ); break; case WM_DESTROY: PostQuitMessage( 0 ); break; default: return DefWindowProc( hwnd, msg, wParam, lParam ); } return 0; }
|
|
Mrovqa |
» 2012-09-19 18:54:04 Nie rozumiesz... Gdy naciśnie się na Checkboxa, to zostaje wysłane powiadomienie do pętli obsługującej komunikaty. Musisz odebrać ten komunikat, odczytać aktualny stan checkboxa i wysłać komunikat do niego, by zmienił stan na przeciwny. Wszystko jest w lekcji - źle czytasz. |
|
przemool11196 |
Przykład » 2014-05-30 23:45:40 Mógłbyś podać jakiś przydał jak to powinło wyglądać?? |
|
Moorfox |
» 2014-05-31 02:26:59 Napisane jest na samym końcu HWND g_hPrzycisk = CreateWindowEx( 0, "BUTTON", "Checkbox", WS_CHILD | WS_VISIBLE | BS_CHECKBOX, 100, 100, 150, 30, hwnd, 500, hInstance, NULL );
BOOL bChecked =( IsDlgButtonChecked( hwnd, 500 ) == BST_CHECKED ); if( bChecked ) { CheckDlgButton( hwnd, 500, BST_UNCHECKED ); } else { CheckDlgButton( hwnd, 500, BST_CHECKED ); }
Pomyśl jeszcze gdzie tego if'a trzeba wrzucić masz to w temacie Kontrolki, a widnieje tam wielki napis "Identyfikowanie kontrolek w komunikatach" |
|
« 1 » 2 |