Long menu qui ne prenne pas toute la hauteur de l'écran !

Résolu
joebarthib Messages postés 7 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 13 octobre 2014 - 5 déc. 2005 à 12:54
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 5 déc. 2005 à 17:05
salut,


je dois implémenter un menu contextuel affichant les miniatures d'images d'un répertoire. En mettant OwnerDraw à true, et en surchargeant OnDrawItem et OnMeasureItem j'arrive à le faire, des flèches de défilement apparaissent automatiquement en haut et en bas du menu, mais le menu fait toute la hauteur de l'écran !


On me demande qu'il soit moins haut. Pour ça, je n'affiche que 8 miniatures, et le 1er et dernier menuitem affichés sont des flèches que j'ai dessinées. Le problème c'est que je n'arrive pas à faire défiler les miniatures sur clic (ou passage du curseur) sur les flèches.


Problèmes :
- sur clic sur une des flèches, le context menu se ferme automatiquement
- sur OnSelect des flèches, je modifie les items du menu dynamiquement, mais je n'arrive pas à mettre à jour son affichage !


J'ai tout essayé : Refresh/Update/Invalidate du contrôle parent, PerformSelect sur tous les items, envoie d'un SendMessage avec WM_PAINT, WM_PRINT, WM_PRINT_CLIENT avec le handle du menu et le handle du contrôle parent, j'ai même essayé de mettre le OwnerDraw de tous les menuitems à false puis à true, ça les met + ou - à jour mais l'affichage (bref) du menu avec ownerdraw à false gâche tout !


Mes recherches sur le web n'ont rien donné, si quelqu'un à une idée là-dessus (soit mettre à jour le menu dynamiquement, soit faire en sorte qu'il ne prenne pas toute la hauteur de l'écran), je lui serai très reconnaissant !


Merci
Thibaud

5 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
5 déc. 2005 à 17:05
J'ai mit l'exemple là : CONTEXTMENU AVEC SPÉCIFICATION DE HAUTEUR MAXIMUM

/*
coq
MVP Visual C#
*/
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
5 déc. 2005 à 13:57
euh... question bête... tu as combien d'items dans ton menu ?

Sébastien FERRAND
[MVP C#]
0
joebarthib Messages postés 7 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 13 octobre 2014
5 déc. 2005 à 14:39
de quelques uns à plusieurs dizaines. Ce sont les images contenues dans un répertoire. Lorsqu'il y en a beaucoup, par défaut le menu prend toute la hauteur de l'écran et des petites flèches sont ajoutées (par le framework) en haut et en bas pour pouvoir scroller. Et j'aimerai bien que ça ne prenne pas toute la hauteur de l'écran !


Et lorsque j'essaye de gérer l'affichage partiel moi-même, en n'en affichant que 6 par exemple, pas moyen comme je l'ai dit de mettre à jour l'affichage des items lorsque l'utilisateur survole le 1er item (flèche vers le haut que j'ai faite ajoutée) ou le dernier (flèche vers le bas)...


Une idée ?


Merci !
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
5 déc. 2005 à 14:51
ok... juste une remarque, ce n'est pas le framework qui gère les flèches pour faire le scroll, mais windows.

je ne vois pas comment tu vas pouvoir résoudre ton problème mais, je ne pense pas que l'idée de "redessiner" toi-même tous les items soit la bonne.

à ta place, je découperais mon menu en sous-menu... genre les fichiers de A à G, puis de H à M, etc...
de toute façon, un menu trop grand, ou alors où les items sont trop long à trouver, ne sert à rien.

Sébastien FERRAND
[MVP C#]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
5 déc. 2005 à 15:14
C'est faisable "facilement".
Je te poste un exemple dans qq minutes.

/*
coq
MVP Visual C#
*/
0
Rejoignez-nous