[WinAPI] BS_GROUPBOX i xp style

0

Mam problem z kontrolką "BUTTON" ze stylem BS_GROUPBOX. Jak tworze nowe okna ustawiając ten Group Box jako parent, to źle sie wyświetlają, tzn. Radio Buttony mają czarne tło, a przyciski czarną ramke wokół siebie. Przy parencie "STATIC" jest w porządku. Group Boxa tworze tak:

CreateWindowEx(
   WS_EX_CONTROLPARENT,
   "BUTTON",
   NULL,
   WS_CHILD | WS_TABSTOP | BS_GROUPBOX,
   100, 100, 300, 400,
   hwndParent, //główna forma
   NULL, gInstance, 0);
0

Nie używam w programie Unicode :/ (ale pomyśle nad tym :]).
Ramka z napisem wyświetla sie elegancko, tylko dzieci nie.

0

Znalazłem na necie tylko jedną informacje na ten temat: dzieje sie tak, gdy aplikacjaca kożysta xp theme, i że podobno nie można nic z tym zrobić (bzdura, bo MFC, VCL itd. itp. sobie jakoś radzą). Faktycznie, usunąłem plik .manifest i wszystko gra. Ale ja chce kokoRZystaćystać z xp theme. Musi sie jakoś to dać zrobić. Nie słyszał ktoś o czymś takim?

Tak to wygląda:
user image

0

Ustaw okno glowne jako parent, wtedy bedzie ok.

0

Ale ja chce jako parenta group box. Podglądnąłem aplikacja vcl skompilowaną na builderze, a tam group box jest normalnie parentem.

0

Ale ja chce jako parenta group box
Po co ci to? Chyba ze chcesz miec RadioButtony w kliku grupach.

Podglądnąłem aplikacja vcl skompilowaną na builderze, a tam group box jest normalnie parentem.

Skad wiesz? W vcl przeciez kladziesz kontrolki na forme i wiecej cie nic nie obchodzi. Chyba ze sprawdzales np funkcja GetParent czy hwnd parenta to hwnd GroupBoxa.

0

Po co ci to? Chyba ze chcesz miec RadioButtony w kliku grupach.
Chociażby po to.

Skad wiesz?
Spy++, albo WinSight32

0

No wg mnie nic nie wymyslisz w tej kwestii i watpie ze ktos ci cos tu poradzi.

Nieleganckie, ale skuteczne rozwiazanie: umiesc radiobuttony na staticu bez krawedzi, tak zeby byl niewidoczny. Parentem statica bedzie okno glowne, a parentem radiobuttonow static. A to wszystko mozesz "otoczyc" groupboxem, ktorego parentem bedzie tez okno glowne.

Malo eleganckie, ale efekt koncowy w koncu najbardziej sie liczy.

0

Też wpadłem na ten pomysł ze statick'iem. Ale jak sam wspominałeś będzie to nie eleganckie, a w moim przypadku będzie to miało znacznie poważniejsze konsekwejncje, ponieważ napisałem już całą hierarchie klas, (min. klase okna rodzicielskiego). Użycie dodatkowego statica zmusiłoby mnie do stworzenia całej nowej gałęzi klas specjalnie dla grup boxa, lub znacznie rozszerzyć już istniejącą - baaaaaaaaaaaardzo nieelegancko. Najlepszym wyjsciem będzie zrezygnowanie z xp theme. Ale nie wierze, że nie da sie jakoś tego zrobić dlatego, że po pierwsze nie ma rzeczy niemożliwych, a po drugie (jak już wspomniałem wcześniej) różne biblioteki sobie radzą z tym (używając group boxa jako parenta).

Jakby sie dokładnie przyjżeć, to błąd polega na tym, że button i radiobutton rysuje swoje tło kolorem czarnym zamiast kolorem btn_face. Ktoś ma jakieś pomysły ?

0

Odświeżam wątek bo przypomniał mi się ten problem i wpadłem na pomysł, a właściwie dwa. Aby używać stylu xp w programie dodaję plik .manifest. Musze sie przyznać, że nie wiem jak to daiała ;P, może sie podszkole ;P, ale czy da sie za pomocą pliku .manifest lub inną drogą wyłączyć styl tylko dla kontrolki GroupBox?

Drugi pomysł to taki, aby się dobrać do funkcji rysującej GroupBox i samemu rysować kontrolke tą funkcją. Tylko jak sie do niej dobrać ?

0

Drugi pomysł to taki, aby się dobrać do funkcji rysującej GroupBox i samemu rysować kontrolke tą funkcją. Tylko jak sie do niej dobrać ?

OwnerDraw. Albo stworz wlasna kontrolke GroupBox, z nowa klasa okna.

W VCL tak wlasnie jest to zrobione (podejrzewam to, bo nazwa klasy okna jest inna niz przy standardowych kontrolkach, np TButton, TGroupbox itd.) i chyba tak wlasnie tylko mozna to rozwiazac.

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