Za pomocą okna dialogowego pasek z formantem podłogach
Jak wspomniano w pomocniczy formantów i zespoły, każdy zespół może zawierać tylko jedno dziecko okna (lub kontroli).Może to być ograniczenia, jeśli chcesz mieć więcej niż jedno okno podrzędne na pasmo.Dogodnym rozwiązaniem problemu jest utworzyć okna dialogowego zasób pasek z wieloma formantami, a następnie dodaj zespół podłogach (pasek okno dialogowe zawierające) do sterowania podłogach.
Normalnie, jeśli okno dialogowe zespół pasek były przezroczyste, należy ustawić WS_EX_TRANSPARENT extended styl dla obiektu pasek okna dialogowego.Jednakże ponieważ WS_EX_TRANSPARENT ma pewne problemy z właściwie malowanie tło paska okno dialogowe, trzeba będzie wykonać trochę dodatkowej pracy w celu osiągnięcia pożądanego skutku.
Poniższa procedura szczegóły kroki niezbędne do osiągnięcia przejrzystości bez korzystania z WS_EX_TRANSPARENT extended stylu.
Aby zaimplementować pasek przezroczyste okna dialogowego w paśmie podłogach
Za pomocą okno dialogowe Add Class, dodawać nowe klasy (na przykład CMyDlgBar) który implementuje okno dialogowe Obiekt paska.
Dodawanie obsługi dla WM_ERASEBKGND wiadomości.
W obsłudze nowych zmodyfikować istniejący kod odpowiadający poniższym przykładzie:
BOOL CMyDlgBar::OnEraseBkgnd(CDC* pDC) { CWnd* pParent = GetParent(); ASSERT_VALID(pParent); CPoint pt(0, 0); MapWindowPoints(pParent, &pt, 1); pt = pDC->OffsetWindowOrg(pt.x, pt.y); LRESULT lResult = pParent->SendMessage(WM_ERASEBKGND, (WPARAM)pDC->m_hDC, 0L); pDC->SetWindowOrg(pt.x, pt.y); return (BOOL)lResult; }
Dodawanie obsługi dla WM_MOVE wiadomości.
W obsłudze nowych zmodyfikować istniejący kod odpowiadający poniższym przykładzie:
void CMyDlgBar::OnMove(int x, int y) { UNREFERENCED_PARAMETER(x); UNREFERENCED_PARAMETER(y); Invalidate(); }
Nowe programy obsługi symulować przejrzystości pasek okna dialogowego przekazując WM_ERASEBKGND komunikat do okna nadrzędnego i wymuszanie repaint przy każdym okno dialogowe Obiekt paska jest przenoszony.