2010-03-25 3 views
1

Comment activer/désactiver le style de la fenêtre WS_CLIPCHILDREN dans un contrôle parent Windows Forms?Windows Forms: Activer/Désactiver WS_CLIPCHILDREN

Je voudrais afficher du texte sur le dessus du contrôle enfant après qu'il a peint. Dans mon contrôle parent, c'est ce que j'ai:

class Parent : public Control { 
    void Parent::OnPaint(PaintEventArgs ^e){ 
     Control::OnPaint(e); 

     // parent draws here 
     // some drawing should happen over the child windows 
     // in other words, do not clip child window regions 
    } 
}; 

En vérifiant avec Spy ++ je trouve que le parent a le style de fenêtre WS_CLIPCHILDREN activée par défaut. Quelle est la méthode Windows Forms pour désactiver cette fonctionnalité?

Note: L'exemple de code est en C++/CLI mais j'ai marqué ce C# pour la visibilité ... la langue est sans importance ici. N'hésitez pas à traduire le code en C#.

Répondre

1

Vous pourriez être en mesure de le faire en remplaçant la propriété CreateParams de votre contrôle parent:

protected override CreateParams CreateParams { 
    get { 
     new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand(); 

     // Modify the existing style. 
     CreateParams cp = base.CreateParams; 
     // Remove the WS_CLIPCHILDREN flag. 
     cp.Style &= ~0x02000000; // WS_CLIPCHILDREN value. 

     return cp; 
    } 
} 
0

Vous pouvez essayer de supprimer le style directement à l'aide de P/Invoke à l'aide de la fonction SetWindowLong. Utilisez la propriété Form.Handle comme handle de fenêtre.