Verwenden einer Dialogleiste mit einem Grundleistensteuerelement

Wie in Infoleiste-Steuerelemente und Bänder erwähnt, kann jedes Band nur ein untergeordnetes Fenster oder Steuerelement) enthalten.Dies kann es sich um eine Einschränkung, wenn mehr als ein untergeordnetes Fenster pro Band aufweisen soll.Eine einfache Problemumgehung besteht darin, eine Dialogleisten Ressource mit mehreren Steuerelementen zu erstellen und ein Infoleistenband (die Dialogleiste enthalten) dem Infoleiste-Steuerelement dann hinzugefügt werden soll.

Normalerweise wenn Sie das Dialogleisten Sie umbrochenen transparent erscheinen wünschten, geben Sie das Format für die erweiterte WS_EX_TRANSPARENT Dialogleisten Objekt festlegen.Da WS_EX_TRANSPARENT einige Probleme mit den Hintergrund einer Dialogleiste ordnungsgemäß zeichnen, müssen Sie ein wenig zusätzliche Arbeit erledigen, um den gewünschten Effekt zu erzielen.

Die folgenden Schritte sind die Schritte nötig, Transparenz zu erreichen, ohne das WS_EX_TRANSPARENT erweiterten Format verwenden.

So erstellen Sie eine transparente Dialogleiste in ein Infoleistenband implementieren

  1. Verwenden Fügen Sie im Dialogfeld Klasse hinzufügen fügen Sie eine neue Klasse (z. B. CMyDlgBar) implementiert der Dialogleisten Objekt hinzu.

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

  3. Im neuen Handler ändern Sie den vorhandenen Code entsprechend dem folgenden 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 einen Handler für die WM_MOVE Meldung hinzu.

  5. Im neuen Handler ändern Sie den vorhandenen Code entsprechend dem folgenden 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 für das übergeordnete Fenster weitergeleitet und ein Neu streichung jedes Mal, wenn das Erzwingen der Dialogleisten Objekt verschoben werden soll.

Siehe auch

Referenz

Verwenden von CReBarCtrl

Konzepte

Steuerelemente (MFC)