Freigeben über


Verwenden einer Dialogleiste mit einem Grundleisten-Steuerelement

Wie in der Infoleistensteuerelemente und Bänder erwähnt, kann jedes Band nur ein untergeordnetes Fenster (oder Steuerelement) enthalten. Dies kann eine Einschränkung, wenn mehr als ein untergeordnetes Fenster pro Band haben möchten. Eine einfache Problemumgehung ist, eine Dialogleistenressource mit mehreren Steuerelementen und einem Infoleistenband (die Dialogleiste enthalten) dem Grundleistensteuerelement hinzuzufügen.

Normalerweise wenn Sie das Dialogleistenband transparent dargestellt werden können, würden Sie das WS_EX_TRANSPARENT erweiterte Format für das Dialogleistenobjekt festlegen. Da WS_EX_TRANSPARENT verschiedener Probleme mit den Hintergrund einer Dialogleiste ordnungsgemäß zeichnen ist, müssen Sie zusätzliche Arbeit etwas ausführen, um den gewünschten Effekt zu erreichen.

In der folgenden Prozedur werden ausführlich die Schritte aufgeführt, die erforderlich sind, Transparenz zu erreichen, das ohne WS_EX_TRANSPARENT erweiterte Format zu verwenden.

Um eine transparente Dialogleiste in einer Infoleiste implementieren bieten ein Band

  1. Mit Fügen Sie Klassendialogfeld hinzu fügen Sie eine neue Klasse (beispielsweise CMyDlgBar), diese Implementierung das Dialogleistenobjekt hinzu.

  2. Fügen Sie Handler für die WM_ERASEBKGND - Meldung hinzugefügt.

  3. Im neuen Handler ändern Sie den vorhandenen Code, um das folgende Beispiel:

    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. Fügen Sie Handler für die WM_MOVE - Meldung hinzugefügt.

  5. Im neuen Handler ändern Sie den vorhandenen Code, um das folgende Beispiel:

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

Die neuen Handler simulieren die Transparenz der Dialogleiste, indem sie die WM_ERASEBKGND Meldung am übergeordneten Fenster weiterleiten und ein Neu Das erzwingen, wenn das Dialogleistenobjekt verschoben wird.

Siehe auch

Referenz

Verwenden von CReBarCtrl

Konzepte

Steuerelemente (MFC)