CheckBox - stan przycisków

2011-09-26 02:25
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?

A co tutaj nie działa? - stfu 2011-09-26 08:14
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. - Madm4n 2011-09-26 09:42

Pozostało 580 znaków

2011-09-26 08:14
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, 2011-09-26 08:26

Pozostało 580 znaków

2011-09-26 15:50
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;
}
edytowany 2x, ostatnio: czarny020, 2011-09-26 16:26

Pozostało 580 znaków

2011-09-26 17:01

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.

Pozdro & poćwicz!
Faktycznie ten brak średnika :D THX! - czarny020 2011-09-26 17:27

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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