Jak dodać i edytować w zasobach aplikacji kontrolkę "tab box"?

0

Witam! Mam problem z dodaniem kontrolki tab box w mojej aplikacji (w resorces). Kiedy wybieram ją z toolboxa i przeciągam na okno dialogowe (które użytkownik wybiera z menu) od razu wyskakuje mi tab box z 5 zakładkami i nie mogę się przełączyć pomiędzy nimi. Nie mam pojęcia jak zrobić takie okno dialogowe z zakładkami. Na msdn przeczytałem, że trzeba wypełnić strukturę TCITEM i wywołać funkcję TabCtrl_InsertItem ale nic to nie daje (wyświetla mi się w dialogu "czysty" prostokąt). Jakieś sugestie?

0

To jest dość trudne do zrobienia.

W designerze tabów edytować się nie da, to tylko atrapa. Trzeba to zrobić w kodzie.
Zawartość poszczególnych tabów tworzysz w zasobach jako osobne dialogi, którym trzeba wyłączyć ramkę.

Potem na otwarciu okna dialogowego z tabcontrolem kolejno robisz tak:

  • dodajesz taby za pomocą tego TabCtrl_InsertItem

  • ładujesz z zasobów dialogi które mają być na poszczególnych tabach. dialogi powinny mieć ten sam parent co tabcontrol (czyli nie tabcontrol, a dialog nadrzędny) — FindResource, LoadResource, CreateDialogIndirect

  • na każdym dialogu robisz MoveWindow w miejsce tabcontrola (TabCtrl_AdjustRect się przyda do pobrania właściwego RECTa) — GetClientRect, TabCtrl_AdjustRect, MapWindowRect, MoveWindow.

  • jeśli masz w programie "common controls manifest" to na każdym dialogu-zakładce robisz EnableThemeDialogTexture(htab, ETDT_ENABLETAB)

  • w zdarzeniu TCN_SELCHANGING tabcontrola ukrywasz bieżący dialog (SW_HIDE), a w TCN_SELCHANGE pokazujesz (SW_SHOW) — TabCtrl_GetCurSel, ShowWindow.

Tak, mogliby tę kontrolkę jakoś bardziej zautomatyzować, tak jak zautomatyzowali tworzenie samych dialogów. Ale jakoś nie chcieli - powyższe wygląda na brzydki hack, ale tak to niestety działa. Podpowiem że można to opakować i ukryć brzydotę w nieco ponad 100 linijkach :-)

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