Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
571 connectés 

  FORUM HardWare.fr
  Programmation

  [C++] VISUAL: Listbox de taille variable??

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] VISUAL: Listbox de taille variable??

n°63091
H4dd3R
Q2
Posté le 04-10-2001 à 09:59:19  profilanswer
 

Salut.
Voilà mon problème:
j´ai un tableau de strings de tailles diverses.
J´aimerais afficher une listbox avec ces strings pour que l´utilisateur puisse en choisir un.
 
Et la question: ;)
comment faire pour changer la taille de la listbox (elle sera ds sa propre fenêtre) pour l´adapter à la taille des strings??
Car si je met la Listbox avec l´éditeur de ressources je pourrais certes changer la taille de la fenêtre, mais la listbox bougera pas!!  :(  
 
HELP!! :)


---------------
Athlon64 s754 10*200MHz - R9800Pro - 512MB DDR200MHz - ZX6RR - Q2[SupOp] - Tutorial Video: multilangues, multisstitres
mood
Publicité
Posté le 04-10-2001 à 09:59:19  profilanswer
 

n°63093
chrisbk
-
Posté le 04-10-2001 à 10:02:19  profilanswer
 

MoveWindow ne marche pas ?

n°63112
H4dd3R
Q2
Posté le 04-10-2001 à 11:06:08  profilanswer
 

Si ça marche merci!! ;)
En fait j´aurais qu´à réagir au redimentionnement de fenêtre et à ajuster la taille de la listbox à la client area.. :)
 
Par contre pas moyen d´avoir un scroll horizontal sur une listbox?? :(
 
Et qqun a une idée pour savoir la taille nécesaire en connaissant les strings?? Ca risque d´être chiant car ça dépend de la fonte..

n°63114
chrisbk
-
Posté le 04-10-2001 à 11:10:49  profilanswer
 

Arf je suis vraiment pas sur, m'enfin dans les propertie de la list box dans l'editeur de ressources y'a un truc a cocher nomme "horizontal scroll".
 
 
mais bon, c'est peut etre un piege :D

n°63119
H4dd3R
Q2
Posté le 04-10-2001 à 11:29:42  profilanswer
 

Pour info pour connaitre la taille d´un texte: GetTextExtentPoint32().. :)
 
Par contre oui il y a bien une option "horizontal scroll" mais ça marche pas sur une listbox.
Il faudrait un autre objet de remplacement.. Une idée qqun??

n°63125
chrisbk
-
Posté le 04-10-2001 à 11:44:06  profilanswer
 

t'as essayer de jouer avec les SetScrollRange et tout ca ?

n°63127
H4dd3R
Q2
Posté le 04-10-2001 à 11:51:40  profilanswer
 

Oui SetScrollRange() marche sur la barre verticale, mais la barre horizontale reste disablée qqe soit le scroll range..
 
Bouuuuuhh!! :-\

n°63143
Carbon_14
Posté le 04-10-2001 à 12:44:01  profilanswer
 

En 16 bits (ça va aussi en 32), j'ai une listbox avec scroll horizontal...
 CONTROL "", IDINFOSP_COMM, "LISTBOX", LBS_NOTIFY | WS_BORDER | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL, 5, 90, 218, 46
 
J'ai été perplexe car y avait pas moyen de scroller quand le texte était (trop) long. Barre visible mais invalidée.
 
En fouillant dans la doc de BC 3.1 (vieux mais bien pour moi), je suis arrivé au fait qu'il faut envoyer le message LB_SETHORIZONTALEXTENT au ListBox pour lui donner la largeur effective du texte. Si plus grand que sa largeur, il "décide" de valider la barre.
 
Mon code donne alors (suis qu'amateur, y a sans doute à rédire  :))
     WORD   wLongest = 0;
 
       hdc = GetDC(hDlg);
       hFontOld = SelectObject(hdc, hFonte(0, 8, 0, FW_NORMAL, SERIF));
       do
       {
         Charge_bBuf_Avec_Chaine();
         // mesure taille des chaînes entrées pour savoir s'il faut valider
         // la barre de défilement horizontal
         #ifndef __FLAT__
  GetTextExtentPoint(hdc, (LPSTR)bBuf, strlen(bBuf), &size);
  #else
         GetTextExtentPoint32(hdc, (LPSTR)bBuf, strlen(bBuf), &size);
  #endif
  larg = size.cx;  
  if (larg > wLongest) wLongest = (WORD)larg;
  SendDlgItemMessage(hDlg, IDINFOSP_COMM, LB_ADDSTRING, 0, (LPARAM)bBuf);
  Incrémente pointeur
       } while (pasfini);
 
       // Applique largeur maxi de chaîne intégrée la plus longue
       SendDlgItemMessage(hDlg, IDINFOSP_COMM, LB_SETHORIZONTALEXTENT,
     (WPARAM)(wLongest + 8), 0L); // + 8 sinon trop juste
       SelectObject(hdc, hFontOld);                           hFonte(1, NULL, NULL, NULL, NULL);
       ReleaseDC(hDlg, hdc);
 
C'est pas toujours parfait (j'ai aussi une barre verticale qui joue peut-être). Le dernier caractère est des fois a demi-visible. Ajouter 60 au lieu de 8 ne semble pas améliorer les choses (on ne trompe pas un ListBox comme ça !  :D)

n°63167
H4dd3R
Q2
Posté le 04-10-2001 à 14:08:46  profilanswer
 

Moi j´aime le forum programmation!!  :love:  
 
Effectivement CListBox::SetHorizontalExtent() existe!!
En fait la classe est juste trop paresseuse pour calculer la taille horizontale comme elle le fait pour la verticale..
 
Mais sinon un CListBox (C comme trente deuc bits ;) ) est bien plus sociable que son ancètre 16 bits: pas besoin de rajouter 8, il est même trop prudent comme ça!! ;)
 
Merci!! :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [C++] VISUAL: Listbox de taille variable??

 

Sujets relatifs
taille d'ouverture des fenêtres "enregistrer" ou "ouvrir" !Chargement d'une toolbar sur Visual C++ 6
[uptime] quelle variable sous dos?excel et visual basic
siouplé version visual basic 6 pour win2k ca existe?C/C++ question taille de tableau
[VC++] Changer la taille de la Non-Client Area ?[visual C++] Image au lancement de l'appli !
[visual c++] inclure une librairie dans le code[Visual Basic] Créer un menu dynamiquement
Plus de sujets relatifs à : [C++] VISUAL: Listbox de taille variable??


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR