Condividi tramite


Utilizzo di una barra della finestra di dialogo con un controllo Rebar

Come accennato in Il controllo e bande, ogni banda può contenere solo una finestra figlio (o il controllo).Può trattarsi di un limite se si desidera disporre di più finestre figlio per banda.Una soluzione alternativa utile consiste nel creare una risorsa della barra della finestra di dialogo con più controlli e aggiungere quindi una banda del rebar (contenente la barra della finestra di dialogo) al controllo Rebar.

In generale, se si desiderava la banda della barra della finestra di dialogo per visualizzare trasparente, impostare la proprietà dello stile esteso di WS_EX_TRANSPARENT per l'oggetto della barra della finestra di dialogo.Tuttavia, poiché WS_EX_TRANSPARENT presenta alcuni problemi con correttamente il disegno dello sfondo di una barra della finestra di dialogo, sarà necessario far un poco aggiuntivo per ottenere l'effetto desiderato.

La procedura descritta di seguito vengono illustrate le operazioni necessarie per ottenere la trasparenza senza utilizzare uno stile esteso di WS_EX_TRANSPARENT .

Per implementare una barra della finestra di dialogo trasparente in un rebar bloccare

  1. Utilizzando Aggiungere la finestra di dialogo della classe, aggiungere una nuova classe, ad esempio CMyDlgBar) che implementa l'oggetto della barra della finestra di dialogo.

  2. Aggiungere un gestore per il messaggio di WM_ERASEBKGND .

  3. Nel nuovo gestore, modificare il codice esistente in base all'esempio seguente:

    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. Aggiungere un gestore per il messaggio di WM_MOVE .

  5. Nel nuovo gestore, modificare il codice esistente in base all'esempio seguente:

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

I nuovi gestori simulano la trasparenza della barra della finestra di dialogo inoltrando il messaggio di WM_ERASEBKGND alla finestra padre e forzare un aggiornamento ogni volta che l'oggetto della barra della finestra di dialogo viene spostato.

Vedere anche

Riferimenti

Utilizzando CReBarCtrl

Concetti

Controlli (MFC)