2010-07-15 2 views
0

Je souhaite supprimer la bordure de redimensionnement de ma fenêtre personnalisée WPF. J'ai déjà trouvé que je dois gérer le message WM_NCCALCSIZE et retourner 0. Cela supprime la bordure et aligne la fenêtre sur le coin supérieur gauche de la fenêtre. Le problème est que, ce faisant, la zone client augmente et le contrôle racine WPF ne le fait pas. Cela crée des bords noirs sur les côtés gauche et inférieur de la fenêtre dont je voudrais me débarrasser.Comment faire pour supprimer la zone non client d'une fenêtre WPF sans utiliser AllowTransparency

J'utilise VS2010 C# Windows XP et je voudrais que cela fonctionne sous Windows XP et Windows 7.

Merci à l'avance.

EDIT: J'ai découvert ce qui cause les bords noirs, ils sont la fenêtre derrière. Maintenant, il semble que le problème est avec l'élément racine de la fenêtre n'occupant pas toute la fenêtre. Lorsque je place sa marge à des valeurs négatives, elle attire la zone noire. Apparemment, la passe de mise en page est correcte et la taille désirée est la même que la fenêtre, mais la taille de rendu est différente.

J'ai également découvert que tout le problème pouvait être résolu en supprimant WS_THICKFRAME du style de la fenêtre. Le problème avec cela est la fonctionnalité de redimensionnement qui est activée uniquement lorsque WS_THICKFRAME est utilisé. J'utilise WM_NCHITTEST pour effectuer le redimensionnement et si la fenêtre sait qu'elle n'a pas de bordure de redimensionnement, elle arrêtera sa fonctionnalité de redimensionnement.

Je voudrais que l'élément racine occupe toute la fenêtre pour éliminer l'arrière-plan de la fenêtre noire ou bien activer la fonctionnalité de redimensionnement natif sans la trame épaisse.

Merci.

Répondre

0

J'ai trouvé la raison de cette zone noire. Il semble que le code que j'utilisais et que quelqu'un d'autre utilisait provoquait la zone noire en perturbant le passage de la structure et donc la taille correcte de l'élément racine. J'ai géré le WM_NCCALCSIZE dans un autre projet et cela a fonctionné comme un charme. Après tout cela, bien que j'ai trouvé le moyen inactif de créer une fenêtre personnalisée avec toutes les fonctionnalités de la fenêtre d'origine, j'ai décidé d'utiliser la fenêtre standard que Microsoft a à offrir pour que mon programme ait une compatibilité future avec Windows .

Si quelqu'un aimerait le code ou l'aide avec la personnalisation de fenêtre WPF, ils peuvent commenter ici et je vais aider pour qu'au moins toutes mes recherches ne soient pas vaines.

Merci pour la lecture.

+1

Veuillez montrer un exemple de gestion du WM_NCCALCSIZE –

Questions connexes