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

[WinAPI] Brak możliości zaznaczenia checkbox-ów

Ostatnio zmodyfikowano 2014-07-03 19:43
Autor Wiadomość
Vister26
Temat założony przez niniejszego użytkownika
[WinAPI] Brak możliości zaznaczenia checkbox-ów
» 2014-07-02 13:26:48
Napisałem program, który ma stworzyć okno, kilka buttonów i sprawdzać, czy są wciśnięte niektóre z nich. Oto najważniejsza część kodu:
C/C++
//poza WinMain
HWND g_hButton, g_hCheckbox1, g_hCheckbox2, g_hGroupbox1, g_hGroupbox2, g_hRadio1, g_hRadio2, g_hRadio3;

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
    //TWORZENIE PRZYCISKÓW
   
    g_hGroupbox1 = CreateWindowEx( 0, "BUTTON", "pierwsza grupa", WS_CHILD | WS_VISIBLE | BS_GROUPBOX,
    20, 10, 250, 85, hWnd, NULL, hInstance, NULL );
   
    g_hGroupbox2 = CreateWindowEx( 0, "BUTTON", "deuga grupa", WS_CHILD | WS_VISIBLE | BS_GROUPBOX,
    20, 100, 250, 115, hWnd, NULL, hInstance, NULL );
   
    g_hCheckbox1 = CreateWindowEx( 0, "BUTTON", "checkbox1", WS_CHILD | WS_VISIBLE | BS_CHECKBOX,
    10, 20, 150, 30, g_hGroupbox1, NULL, hInstance, NULL );
   
    g_hCheckbox2 = CreateWindowEx( 0, "BUTTON", "checkbox2", WS_CHILD | WS_VISIBLE | BS_CHECKBOX,
    10, 50, 150, 30, g_hGroupbox1, NULL, hInstance, NULL );
   
    g_hRadio1 = CreateWindowEx( 0, "BUTTON", "radio1", WS_CHILD | WS_VISIBLE | BS_RADIOBUTTON,
    10, 20, 150, 30, g_hGroupbox2, NULL, hInstance, NULL );
   
    g_hRadio2 = CreateWindowEx( 0, "BUTTON", "radio2", WS_CHILD | WS_VISIBLE | BS_RADIOBUTTON,
    10, 50, 150, 30, g_hGroupbox2, NULL, hInstance, NULL );
   
    g_hRadio3 = CreateWindowEx( 0, "BUTTON", "radio3", WS_CHILD | WS_VISIBLE | BS_RADIOBUTTON,
    10, 80, 150, 30, g_hGroupbox2, NULL, hInstance, NULL );
   
    g_hButton = CreateWindowEx( 0, "BUTTON", "Gotowe!!", WS_CHILD | WS_VISIBLE,
    65, 220, 150, 30, hWnd, NULL, hInstance, NULL );
}

//OBSLUGA ZDARZEN
LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch( msg )
    {
        /***INNE ZDARZENIA***/
       
    case WM_COMMAND:
        if(( HWND ) lParam == g_hCheckbox1 ) // mysle ze cos jest z tym nie tak...
             MessageBox( hWnd, "zaznaczyles checkbox", "checkbox1", MB_ICONINFORMATION );
       
        if(( HWND ) lParam == g_hButton )
             MessageBox( hWnd, "nacisnales przycisk", "button", MB_ICONINFORMATION );
       
        default:
        return DefWindowProc( hWnd, msg, wParam, lParam );
    }
   
    return 0;
}

Zdarzenie z przyciskiem działa normalnie natomiast checkbox nie generuje WM_COMMAND i nie pojawia się przy nim "fajka". Dodatkowo, jeśli zmienie mu okno rodzicielskie na hWnd to już generuje WM_COMMAND, ale nadal nie ma "fajki".
P-113102
pekfos
» 2014-07-02 14:52:56
P-113108
Jacob99
» 2014-07-02 17:18:27
Jak chcesz żeby zaznaczyło ci CheckBoxa, skoro nie napisałeś kodu?
Po przyjęciu odpowiedniego komunikatu musisz wywołać
CheckDlgButton( HWND, int, UINT )
P-113124
Vister26
Temat założony przez niniejszego użytkownika
» 2014-07-03 18:33:26
Dzięki! Już nie mam problemu z zaznaczaniem, ale nadal nie wiem czemu nie mogę przechwycić WM_COMMAND. Próbowałem na dwa sposoby, pierwszy przedstawiony w pierwszym poście a oto drugi:
C/C++
LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch( msg )
    {
        /*****/
    case WM_COMMAND:
        switch( wParam )
        {
        case ID_CHECKBOX1:
            MessageBox( hWnd, "jestem checkbox1", "ID_CHECKBOX1", MB_ICONINFORMATION );
            break;
        }
    }
   
    return 0;
}
Nie mam pomysłu na więcej. Checkbox nie należy do
hWnd
 tylko do
g_hGroupbox1
 i to chyba w tym leży problem, ale nie wiem jak to naprawić.
P-113203
Monika90
» 2014-07-03 18:46:54
to zrób żeby rodzicem checkboksa było hWnd
P-113208
Vister26
Temat założony przez niniejszego użytkownika
» 2014-07-03 19:00:37
A mógłbym wiedzieć jak to zrobić w inny sposób? Bo jeśli rodzicem checkboxa nie będzie groupbox to on nie będzie w takiej ładnej ramce :(
P-113211
Monika90
» 2014-07-03 19:19:23
Dlaczego miałby nie być w ramce??? Jak go utworzysz na odpowiednich współrzędnych to będzie w ramce.

Jak chcesz żeby zaznaczyło ci CheckBoxa, skoro nie napisałeś kodu?
Po co pisać kod? Jest styl BS_AUTOCHECKBOX i BS_AUTORADIOBUTTON.
P-113213
Vister26
Temat założony przez niniejszego użytkownika
» 2014-07-03 19:43:53
Dzięki Monika!
Po co pisać kod? Jest styl BS_AUTOCHECKBOX i BS_AUTORADIOBUTTON.
Bardzo pomocne, o to mi chodziło ;)
P-113215
« 1 »
  Strona 1 z 1