Vous n'avez fourni aucune information sur la version de wxWidgets ou votre plate-forme/compilateur, donc je vais répondre pour wxWidgets 2.8 et MSW.
La taille que vous spécifiez n'est pas nécessairement utilisée pour le contrôle, car la meilleure taille pour différentes plates-formes peut être différente. Même sur Windows, la taille dépend généralement de la police graphique par défaut. Il existe donc différentes méthodes dans wxWidgets qui permettent à Windows de spécifier leur taille minimale, maximale ou maximale. Si vous avez des exigences particulières, vous devrez peut-être remplacer certaines d'entre elles.
Pour votre problème, il semble que vous voulez avoir le contrôle ont une taille plus petite que la meilleure taille par défaut de wxControl
:
wxSize wxControl::DoGetBestSize() const
{
return wxSize(DEFAULT_ITEM_WIDTH, DEFAULT_ITEM_HEIGHT);
}
(prise de src/msw/control.cpp
) avec les valeurs
#define DEFAULT_ITEM_WIDTH 100
#define DEFAULT_ITEM_HEIGHT 80
(tiré du include/wx/msw/private.h
).
Si vous remplacez DoGetBestSize()
pour renvoyer la taille voulue, cela devrait fonctionner.
Edit:
Votre commentaire que vous ne pouvez pas remplacer DoGetBestSize()
car il est virtuel dans wxControl
. Il est cependant, car il est introduit dans wxWindow
:
// get the size which best suits the window: for a control, it would be
// the minimal size which doesn't truncate the control, for a panel - the
// same size as it would have after a call to Fit()
virtual wxSize DoGetBestSize() const;
(prise de include/wx/window.h
). wxWindow
est une classe parente de wxControl
, donc la méthode est en effet virtuelle et vous pouvez bien sûr la surcharger. Beaucoup de contrôles font en effet, comme un grep
dans les sources vous montrera.
+1 et merci de m'avoir indiqué la largeur et la hauteur par défaut. Puisque je dérive de wxControl, je ne peux pas surcharger DoGetBestSize() car ce n'est pas virtuel dans wxControl – Ranjith
Merci d'avoir clarifié le doute – Ranjith