Long menu qui ne prenne pas toute la hauteur de l'écran ! [Résolu]

Signaler
Messages postés
7
Date d'inscription
lundi 2 juin 2003
Statut
Membre
Dernière intervention
13 octobre 2014
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
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

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
93
J'ai mit l'exemple là : CONTEXTMENU AVEC SPÉCIFICATION DE HAUTEUR MAXIMUM

/*
coq
MVP Visual C#
*/
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
euh... question bête... tu as combien d'items dans ton menu ?

Sébastien FERRAND
[MVP C#]
Messages postés
7
Date d'inscription
lundi 2 juin 2003
Statut
Membre
Dernière intervention
13 octobre 2014

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 !
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
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#]
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
93
C'est faisable "facilement".
Je te poste un exemple dans qq minutes.

/*
coq
MVP Visual C#
*/