Condividi tramite


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

Come indicato in Controllo Rebar e bande, ogni banda può contenere solo una finestra figlio (o controllo. Ciò potrebbe rappresentare una limitazione se si desidera disporre di più finestre figlio di banda. Una soluzione comoda alternativa consiste nella creazione di una risorsa barra della finestra di dialogo con più controlli e aggiungere 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 lo stile esteso 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 eseguire le operazioni un poco aggiuntivo per ottenere l'effetto desiderato.

La procedura descritta di seguito vengono illustrate i passaggi necessari per ottenere la trasparenza senza utilizzare uno stile esteso WS_EX_TRANSPARENT.

Per implementare una barra della finestra di dialogo trasparente in un controllo leghi

  1. Utilizzando La finestra di dialogo aggiungi 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 di ogni volta che l'oggetto della barra della finestra di dialogo è spostato.

Vedere anche

Riferimenti

Utilizzo di CReBarCtrl

Concetti

Controlli (MFC)