CheckBox - stan przycisków

CheckBox - stan przycisków
C0
C0
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 13 lat
  • Postów:41
0
Kopiuj
#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?

ST
A co tutaj nie działa?
M4
Czyste WinAPI :O Męczyłem to jakieś dwa lata temu, to już wtedy słyszałem głosy, że za bardzo tego się nie używa, bo wysiłek włożony w kod jest nie odpowiedni do efektów.
KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:mniej niż minuta
  • Lokalizacja:Gorlice
0

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


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
edytowany 1x, ostatnio: kAzek
C0
C0
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 13 lat
  • Postów:41
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?

Kopiuj
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;
}
edytowany 2x, ostatnio: czarny020
ST
  • Rejestracja:prawie 15 lat
  • Ostatnio:ponad 11 lat
0

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

Kopiuj
false

i FALSE

Kopiuj
 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.

Pozdro & poćwicz!
C0
Faktycznie ten brak średnika :D THX!

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.