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

Come indicato in Controlli e bande Rebar, ogni banda può contenere una sola finestra figlio (o controllo). Potrebbe trattarsi di una limitazione se si desidera avere più finestre figlio per banda. Una soluzione alternativa pratica consiste nel creare una risorsa della barra delle finestre di dialogo con più controlli e quindi aggiungere una barra di riesezione (contenente la barra delle finestre di dialogo) al controllo rebar.

In genere, se si desidera che la barra della finestra di dialogo venga visualizzata in modo trasparente, è necessario impostare lo stile esteso WS_EX_TRANSPARENT per l'oggetto della barra delle finestre di dialogo. Tuttavia, poiché WS_EX_TRANSPARENT presenta alcuni problemi con la corretta pittura dello sfondo di una barra dei dialoghi, è necessario eseguire un po 'di lavoro aggiuntivo per ottenere l'effetto desiderato.

La procedura seguente illustra in dettaglio i passaggi necessari per ottenere la trasparenza senza utilizzare lo stile esteso WS_EX_TRANSPARENT.

Per implementare una barra di dialogo trasparente in una barra di spostamento

  1. Usando 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 WM_ERAedizione Standard BKGND.

  3. Nel nuovo gestore modificare il codice esistente in modo che corrisponda 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 modo che corrisponda 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 delle finestre di dialogo inoltrando il messaggio WM_ERAedizione Standard BKGND alla finestra padre e forzando un aggiornamento ogni volta che l'oggetto della barra della finestra di dialogo viene spostato.

Vedi anche

Uso di CReBarCtrl
Controlli