Udostępnij za pośrednictwem


Używanie paska dialogowego z formantem paska pomocniczego

Jak wspomniano w sekcji Kontrolki i pasma paska pomocniczego, każdy przedział może zawierać tylko jedno okno podrzędne (lub kontrolkę). Może to być ograniczenie, jeśli chcesz mieć więcej niż jedno okno podrzędne na przedział. Wygodnym obejściem jest utworzenie zasobu paska dialogowego z wieloma kontrolkami, a następnie dodanie paska paska pomocniczego (zawierającego pasek okna dialogowego) do kontrolki paska pomocniczego.

Zwykle, jeśli chcesz, aby pasek paska okna dialogowego był niewidoczny, należy ustawić WS_EX_TRANSPARENT rozszerzony styl dla obiektu paska okna dialogowego. Jednak ponieważ WS_EX_TRANSPARENT ma pewne problemy z prawidłowym malowaniem tła paska dialogowego, należy wykonać trochę dodatkowej pracy, aby osiągnąć pożądany efekt.

Poniższa procedura zawiera szczegółowe informacje na temat kroków niezbędnych do osiągnięcia przejrzystości bez używania WS_EX_TRANSPARENT stylu rozszerzonego.

Aby zaimplementować przezroczysty pasek okna dialogowego na pasmie paska

  1. Za pomocą okna dialogowego Dodawanie klasy dodaj nową klasę (na przykład CMyDlgBar), która implementuje obiekt paska dialogowego.

  2. Dodaj procedurę obsługi komunikatu WM_ERASEBKGND.

  3. W nowej procedurze obsługi zmodyfikuj istniejący kod, aby był zgodny z następującym przykładem:

    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. Dodaj procedurę obsługi komunikatu WM_MOVE.

  5. W nowej procedurze obsługi zmodyfikuj istniejący kod, aby był zgodny z następującym przykładem:

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

Nowe programy obsługi symulują przezroczystość paska okna dialogowego, przekazując komunikat WM_ERASEBKGND do okna nadrzędnego i wymuszając przemalowanie za każdym razem, gdy obiekt paska okna dialogowego zostanie przeniesiony.

Zobacz też

Korzystanie z CReBarCtrl
Kontrolki