Sdílet prostřednictvím


Použití dialogového pruhu s ovládacím prvkem matrice

Jak je uvedeno v ovládacích prvcích a pásech rebar, každý pruh může obsahovat pouze jedno podřízené okno (nebo ovládací prvek). To může být omezení, pokud chcete mít více než jedno podřízené okno pro každou skupinu. Pohodlným alternativním řešením je vytvořit prostředek panelu dialogových oken s více ovládacími prvky a pak přidat do ovládacího prvku panelu rebar pruh (obsahující pruh dialogového okna).

Pokud byste chtěli, aby se pruh dialogového okna zobrazoval průhledně, nastavili byste WS_EX_TRANSPARENT rozšířený styl pro objekt panelu dialogů. Vzhledem k tomu, že WS_EX_TRANSPARENT má některé problémy s správně nakreslit pozadí dialogového panelu, budete muset udělat trochu další práce, abyste dosáhli požadovaného efektu.

Následující postup podrobně popisuje kroky nezbytné k dosažení transparentnosti bez použití WS_EX_TRANSPARENT rozšířeného stylu.

Implementace průhledného dialogového pruhu v pruhu na panelu

  1. Pomocí dialogového okna Přidat třídu přidejte novou třídu (napříkladCMyDlgBar), která implementuje objekt panelu dialogového okna.

  2. Přidejte obslužnou rutinu pro zprávu WM_ERASEBKGND.

  3. V nové obslužné rutině upravte existující kód tak, aby odpovídal následujícímu 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;
    }
    
  4. Přidejte obslužnou rutinu pro zprávu WM_MOVE.

  5. V nové obslužné rutině upravte existující kód tak, aby odpovídal následujícímu příkladu:

    void CMyDlgBar::OnMove(int x, int y)
    {
       UNREFERENCED_PARAMETER(x);
       UNREFERENCED_PARAMETER(y);
    
       Invalidate();
    }
    

Nové obslužné rutiny simulují průhlednost panelu dialogového okna předáním zprávy WM_ERASEBKGND do nadřazeného okna a vynucením překreslení při každém přesunutí objektu panelu dialogového okna.

Viz také

Používání atributu CReBarCtrl
Ovládací prvky