Chodzi mi o to, że pobieram dane od uzytkownika (rozmiary tablicy: wysokość i szerokość). Po tym chcialbym użyć tych danych i wyswietlić pustą tablicę. Do tego chciałbym użyć RadioButton’ów i za ich pomocą pobrać kolejne dane, które reprezentowałyby życia. Dwa problemy:
Jak za pomocą pobranej wysokości i szerokości wyswietlić odpowiednio wielką tablicę z radiobutton’ów;
Jak po wyświetleniu tablicy sczytać kolejne pola tablicy.
Jak ktoś ma inne ciekawe prośby co do sposobu wyświetlenia tej tablicy to proszę o sugestie…
Też nie rozumiem dlaczego radio button. Funkcja CreateWindow() zawołana n * m razy z odpowiednią nazwą klasy okna (kontrolki mają je predefiniowane) powinna rozwiązać sprawę.
Hmmm… Przyszło mi coś do głowy, jako dobre ćwiczenie z WinAPI.
Rozwiązanie bardziej eleganckie: zamiast radio buttonów używamy kontrolki “Picture Control” typu Owner Draw sprzężonej z tablicą (jeśli robimy to w oknie dialogowym). W zwykłym oknie można rysować bezpośrednio w obszarze roboczym.
Sugestie:
a) komunikat WM_PAINT; rysowanie “pixeli” w postaci czarnych i białe prostokątów na podstawie tablicy;
b) komunikaty WM_LBUTTONDOWN, WM_LBUTTONUP, WM_MOUSEMOVE: obsługa rysowania;
c) kwestia obliczenia współrzędnych w tablicy na podstawie współrzędnych “klikniętych” w kontrolce i odwrotnie, wyliczenie na podstawie indeksów (indeksu) w tablicy współrzędnych lewego górnego rogu “pixela”;
Własny radio button? Toż to za proste. Już lepiej własny edit box, trochę trudniej. Radio Buttona można w 20, może 30 linijkach zrobić, a edit boxa(podobnego do tego z WinAPI i pochodnych) już nie tak łatwo.
Miałem na mysli własne okienko do edycji dużych pikseli (to nie jest takie trudne na jakie wygląda i o wiele bardziej efektowne niż zbiór kontrolek). Idąc zaś tropem buttonów i editów, to chyba najlepszy jest taki button, co pozostaje wciśnięty. Klasa okna “BUTTON” styl… hmmm… BS_AUTOCHECKBOX | BS_PUSHLIKE
I tak w pętli. Za każdym razem przypisywać inne ID przyciskowi (ID_BUTTON_N) najlepiej kolejne liczby zaczynając od jakiś 10000 :D. A potem sprawdzamy czy to co zwróci:
::SendMessage(hWnd, BM_GETCHECK, 0, 0);
jest BST_CHECKED czy BST_UNCHECKED. Analogiczny komunikat do zmiany stanu przycisku:
::SendMessage(hWnd, BM_SETCHECK, stan, 0);
W dniu12.05.2008, o godzinie16:44został dopisany post przez schabik
Sorry, ale się rozpędziłem. Nadawanie ID można olać, bo nie chcemy obsługiwać komunikatów. Tylko odczytywać/ustawiać stany.