CheckBox - stan przycisków

0
#include <windows.h>

#define ID_CHECKBOX 501
#define ID_CHECKBOX2 502

LPSTR NazwaKlasy = "Klasa Okienka";
MSG Komunikat;
HWND hcheckbox, hcheckbox2; 
 
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, "Ups!", "Error", 
   MB_ICONEXCLAMATION | MB_OK);
  return 1;
 }
 
 HWND hwnd;
 
 hwnd = CreateWindowEx (WS_EX_CLIENTEDGE, NazwaKlasy, "Okienko", WS_OVERLAPPEDWINDOW, 
  CW_USEDEFAULT, CW_USEDEFAULT, 240, 120, NULL, NULL, hInstance, NULL);
 
 if (hwnd == NULL)
 {
  MessageBox (NULL, "Ups!", "Error", MB_ICONEXCLAMATION);
  return 1;
 }
 
 ShowWindow (hwnd, nCmdShow);
 UpdateWindow (hwnd);
 
    hcheckbox = CreateWindowEx (0, "BUTTON", "Pierwszy", WS_CHILD | WS_VISIBLE | BS_CHECKBOX, 160, 190, 150, 30, hwnd, (HMENU)ID_CHECKBOX, hInstance, NULL);
    hcheckbox2 = CreateWindowEx (0, "BUTTON", "Drugi", WS_CHILD | WS_VISIBLE | BS_CHECKBOX, 160, 235, 150, 30, hwnd, (HMENU)ID_CHECKBOX2, hInstance, NULL);
    CheckDlgButton (hwnd, ID_CHECKBOX, BST_CHECKED); //ustaw "fajeczkę"
    CheckDlgButton (hwnd, ID_CHECKBOX, BST_UNCHECKED); //usuń "fajeczkę"
 
 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:
   DestroyWindow (hwnd);
  break;
 
  case WM_DESTROY:
   PostQuitMessage (0);
  break;
 
  default:
   return DefWindowProc (hwnd, msg, wParam, lParam);
  }
 
 return 0;
}

Jak przy pomocy funkcji CheckDlgButton ustawiać i usuwać fajkę checkboxa?

0

Spróbuj uzyskać ID przez GetDlgCtrlID albo użyj SendMessage BM_SETCHECK

0

Za wcześnie się cieszyłem. Nie wiem jaki warunek walnąć w instrukcji if żeby sprawdzał mi czy checkbox jest aktualnie z fajeczką, czy bez... Może ktoś wie jak to powinno być poprawnie?

LRESULT CALLBACK WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
 switch (msg)
 {
  case WM_COMMAND:
    switch (wParam)
    {
     case ID_CHECKBOX:
      BOOL bChecked = (IsDlgButtonChecked (hwnd, ID_CHECKBOX) == BST_CHECKED)
      if(bChecked == false) ?????????????
       CheckDlgButton (hwnd, ID_CHECKBOX, BST_CHECKED); //ustaw "fajeczkę"
      else
       CheckDlgButton (hwnd, ID_CHECKBOX, BST_UNCHECKED); //usuń "fajeczkę"
       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;
}
0

A co w tym teraz jest niepoprawnego, oprócz braku średnika przed if'em?
Nie pamiętam czy

false

i FALSE

 są równoważne w WinAPI, więc może sprawdź sobie z FALSE jak nie działa teraz. Zresztą, nie napisałeś co nie działa i/lub czy wywala jakieś błędy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1