Pomocí panelu dialogového okna s ovládacím prvku Rebar
Jak je uvedeno v Rebar ovládací prvky a pruhy, každé pásmo může obsahovat pouze jeden podřízený okna (nebo ovládací prvek).Chcete-li více než jedno okno dítě za pásmo může být omezení.Vhodným řešením je vytvoření prostředku dialogové okno panel s více prvky a přidat do řízení armování armování (páskem panelu dialogového okna).
Obvykle, pokud jste chtěli pásmo panelu dialogového okna zobrazit průhledné, nastavte WS_EX_TRANSPARENT styl pruhu objektu dialogové okno Rozšířené.Ale protože WS_EX_TRANSPARENT má některé problémy s správně Malování na pozadí panelu dialogového okna, budete muset trochu práci k dosažení požadovaného účinku.
Následující postup podrobně kroky nezbytné k dosažení průhlednosti bez použití WS_EX_TRANSPARENT extended styl.
V pásmu armování implementovat panel průhledné dialogového okna
Použití dialogové okno Přidat třídu, přidání nové třídy (například CMyDlgBar), implementuje objekt panelu dialogového okna.
Přidat ovladač pro WM_ERASEBKGND zprávy.
Nové obslužné rutiny upravte existující kód podle následujícího příkladu:
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; }
Přidat ovladač pro WM_MOVE zprávy.
Nové obslužné rutiny upravte existující kód podle následujícího příkladu:
void CMyDlgBar::OnMove(int x, int y) { UNREFERENCED_PARAMETER(x); UNREFERENCED_PARAMETER(y); Invalidate(); }
Nové obslužné rutiny simulovat průhlednost panelu dialogového okna předáním WM_ERASEBKGND nadřazené okno zprávy a vynucení repaint každém přesunete objekt panelu dialogového okna.