2009-09-27 9 views
2

Juste pour le plaisir, je développe un port Win32 natif de Mozilla XUL. XUL permet de créer des structures imbriquées complexes de toutes sortes de boîtes de mise en page (hbox, vbox, grid, deck ..). Pour ma mise en œuvre Windows, il serait pratique de les implémenter en tant que fenêtres enfants STATIC. Parce que je peux alors positionner leurs fenêtres enfants en utilisant x & y décalages indépendamment de la position de la boîte parent. Toutefois, cette approche peut conduire à certaines fenêtres ayant beaucoup de fenêtres enfants imbriquées. Et je me demande s'il y aurait des inconvénients à une telle situation. Est-ce que quelqu'un ici sait?Inconvénients d'imbrication de fenêtres enfants?

Répondre

2

J'ai été dans cette voie, et je ne vous recommande pas réellement de faire des hiérarchies profondes de fenêtres. De nombreuses fonctions d'assistance Windows (par exemple, IsDialogMessage) fonctionnent mieux avec les dispositions "traditionnelles". En outre, les fenêtres dans Windows sont des objets relativement lourds, principalement pour des raisons historiques. Donc, si vous avez des tonnes d'objets, vous pourriez rencontrer des limitations, des problèmes de performance, etc.

Ce que j'ai fait à la place est de représenter la mise en page profondément imbriquée comme un arbre d'objets C++ réguliers qui est parallèle à la hiérarchie plus plate de fenêtres réelles. Certains nœuds de la hiérarchie d'objets ont les HWND des fenêtres "réelles" qu'ils représentent. Vous dites à la hiérarchie de mettre en page et les nœuds appliquent les résultats aux fenêtres correspondantes. Par exemple, la racine de la hiérarchie peut représenter une fenêtre de dialogue et les nœuds feuilles représentent les fenêtres enfants. Mais la hiérarchie a plusieurs couches d'objets non-fenêtre entre ceux qui connaissent la mise en page.

+0

C'est exactement ce que je fais! Par exemple pour la disposition de la grille, j'ai une classe nommée VirtualGrid. Il ne connaît que le rectangle sur lequel il peut s'appuyer et ne s'appuie pas sur une fenêtre native. La seule exception que j'ai faite jusqu'à maintenant est la scrollbox. Parce qu'il est beaucoup plus facile de faire défiler une seule fenêtre statique que de nombreuses fenêtres enfants dans une certaine zone. – StackedCrooked

0

Une prise rude sur ce point:

  • surcharge de mémoire pour la gestion des fenêtres sur application- et os côté
  • vitesse réduite en raison des appels à la bibliothèque externe/os qui ne manière plus pour les fenêtres que nécessaire pour votre application
  • peut-être tout à fait certains frais généraux par des chemins de long message de fenêtre dans des dispositions complexes

Cela dépend probablement wether vous voulez un implementati très rapide sur et faire un dessin tamponné efficace par vous-même ou que vous voulez travailler de manière plus fiable et avec moins de temps investi.

Questions connexes