2010-08-13 2 views
1

Je suis en train de concevoir la migration de mon projet .NET/C#/WinForms existant vers une solution plate-forme neutre et l'alternative la plus attrayante que j'ai vue semble être wxWidgets en particulier ma familiarité avec C++ et avec MFC qui semble avoir beaucoup en commun avec elle.Quel est l'équivalent wxWidgets d'un contrôle utilisateur C#

Après avoir bien la documentation et le code d'exemple que je dois clarifier la question suivante:

Est-ce une hypothèse valable que la façon de développer un contrôle utilisateur (par C# terminologie) dans un environnement de WX est de tirer une classe de wxPanel, personnalisez-la et placez-la dans un wxFrame? Si tel est le cas, quelle est la méthode wxFrame à utiliser pour ajouter l'objet wxPanel? La seule méthode relative que j'ai pu trouver était wxWindow :: AddChild mais les états de la documentation sont pour la plupart internes à wxWidgets et ne devraient pas être appelés par le code utilisateur.

Pour éviter toute confusion s'il vous plaît noter que ma question porte sur un contrôle utilisateur et non un contrôle personnalisé (qui est clairement abordée dans la documentation)

Répondre

2

Je pense que vous devez définir la fenêtre parent dans le constructeur de votre wxPanel -derived class et passez-le au constructeur hérité (wxPanel constructor)

Une meilleure solution consiste à utiliser des calibreurs (voir wx Sizers) pour la mise en page.

Et oui, vous avez raison à propos de wxPanel étant (grosso modo) l'équivalent d'un C# UserControl.

+0

Je suis un peu confus à propos de wxSizer :: Add. je peux voir que la signature est ressemble à ceci: wxSizerItem * Ajouter (* wxWindow fenêtre, const wxSizerFlags & drapeaux) Donc, pour ajouter une fenêtre à l'calibreur, il doit d'abord être créé. Mais, le constructeur de wxPanel ressemble à ceci: wxPanel (wxWindow * parent, ... ..) ce qui signifie que la fenêtre parent doit fournir ... Toutes les idées? – JohnP

+0

Vous devez toujours donner la fenêtre parent dans le constructeur. Le mécanisme du sizer fonctionne en parallèle: vous ajoutez tous les contrôles enfants au calibreur (en utilisant 'sizer-> Add') et définissez ensuite la propriété sizer du parent (en utilisant' parent-> SetSizer'). Regardez le (deuxième) lien, il y a un petit exemple. – MartinStettner

+0

Got it ... Je vais aller de l'avant et télécharger le cadre et faire un essai! – JohnP

Questions connexes