Partager via


À l'aide d'une barre de boîte de dialogue avec un contrôle rebar

Comme indiqué dans Contrôles rebars et bandes, chaque bande ne peut contenir qu'une fenêtre enfant (ou contrôle). Il peut s'agir d'une limitation si vous souhaitez avoir plusieurs fenêtre enfant par bande. Une solution pratique consiste à créer une ressource barre de la boîte de dialogue avec plusieurs vérifications puis d'ajouter une bande rebar (contenant la barre de la boîte de dialogue) pour vérifier rebar.

Normalement, si vous souhaitez que la bande de la barre de la boîte de dialogue pour être transparentes, vous définissez le style étendue par WS_EX_TRANSPARENT pour l'objet de la barre de la boîte de dialogue. Toutefois, étant donné que WS_EX_TRANSPARENT a des problèmes liés à peindre correctement l'arrière-plan d'une barre de la boîte de dialogue, vous devez exécuter le travail une quantité supplémentaire pour obtenir l'effet souhaité.

La procédure suivante décrit les étapes nécessaires pour effectuer la transparence sans utiliser le style étendue par WS_EX_TRANSPARENT.

Pour implémenter une barre de la boîte de dialogue donnée transparente dans une bande rebar

  1. Utilisation Ajoutez la boîte de dialogue classe, ajoutez une nouvelle classe (par exemple, CMyDlgBar) qui implémente l'objet de la barre de la boîte de dialogue.

  2. Ajoutez un gestionnaire pour l'événement WM_ERASEBKGND.

  3. Dans le gestionnaire, modifiez le code existant pour faire correspondre l'exemple suivant :

    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. Ajoutez un gestionnaire pour l'événement WM_MOVE.

  5. Dans le gestionnaire, modifiez le code existant pour faire correspondre l'exemple suivant :

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

Les nouveaux handlers simulent la transparence de la barre de la boîte de dialogue lors de le transfert du message d'WM_ERASEBKGND de la fenêtre parente et en forçant un redessiner chaque fois que l'objet de la barre de la boîte de dialogue est déplacé.

Voir aussi

Référence

À l'aide de CReBarCtrl

Concepts

contrôles (MFC)