Freigeben über


Verwenden einer Dialogleiste mit einem Grundleisten-Steuerelement

Hinweis

Die Microsoft Foundation Classes (MFC)-Bibliothek wird weiterhin unterstützt. Wir fügen jedoch keine Features mehr hinzu oder aktualisieren die Dokumentation.

Wie in Rebar-Steuerelementen und -Bändern erwähnt, kann jedes Band nur ein untergeordnetes Fenster (oder ein Steuerelement) enthalten. Dies kann eine Einschränkung darstellen, wenn Sie mehr als ein untergeordnetes Fenster pro Band haben möchten. Eine bequeme Lösung besteht darin, eine Dialog-Steuerelement-Ressource mit mehreren Steuerelementen zu erstellen und dann ein Rebar-Band (das die Dialog-Steuerelemente enthält) zu dem Rebar-Steuerelement hinzuzufügen.

Wenn das Dialogfeldleistenband normalerweise transparent angezeigt werden soll, würden Sie die WS_EX_TRANSPARENT erweiterte Formatvorlage für das Dialogfeldleistenobjekt festlegen. Da WS_EX_TRANSPARENT jedoch einige Probleme mit dem ordnungsgemäßen Zeichnen des Hintergrunds einer Dialogfeldleiste hat, müssen Sie ein wenig zusätzliche Arbeit ausführen, um den gewünschten Effekt zu erzielen.

Im folgenden Verfahren werden die Schritte beschrieben, die erforderlich sind, um Transparenz zu erreichen, ohne den erweiterten Stil WS_EX_TRANSPARENT zu verwenden.

So implementieren Sie eine transparente Dialogleiste in einem Rebar Band

  1. Fügen Sie mithilfe des Dialogfelds "Klasse hinzufügen" eine neue Klasse (z. B. ) hinzu, CMyDlgBardie das Dialogfeldleistenobjekt implementiert.

  2. Fügen Sie einen Handler für die WM_ERASEBKGND Nachricht hinzu.

  3. Ändern Sie im neuen Handler den vorhandenen Code so, dass er dem folgenden Beispiel entspricht:

    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 einen Handler für die WM_MOVE Nachricht hinzu.

  5. Ändern Sie im neuen Handler den vorhandenen Code so, dass er dem folgenden Beispiel entspricht:

    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 Nachricht WM_ERASEBKGND an das übergeordnete Fenster weiterleiten und ein Neuzeichnen erzwingen, sobald das Dialogleistenobjekt bewegt wird.

Siehe auch

Verwenden von CReBarCtrl
Steuerung