IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Probleme avec ClistCtrl


Sujet :

MFC

  1. #1
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Par défaut Probleme avec ClistCtrl
    Bonjour,

    Je suis en train de développer une application win32 avec les MFC en utilisant VS 2008 SP1.

    J'ai sur mon application, une liste de type CListCtrl. Cette liste contient plusieurs colonnes.

    J'ai l'impression qu'il y a une limite du nombre de caracteres à afficher dans une colonnes. et moi je veux aller jusqu'à 5000 caracteres à peu pres.

    En même temps, j'ai programmé la CListCtrl pour qu'elle m'affiche les InfoTip quand le curseur de la souris est sur la colonne d'un element et que le contenu de cette colonne ne s'affiche pas dans sa totalité. et je veux que soit le contenu de lIinfoTip defile soit l'infotip est sur plusieurs lignes.

    Quelqu'un pourra m'aider à regler ces deux probleme ?

    Merci d'avance

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par ksoft Voir le message
    J'ai l'impression qu'il y a une limite du nombre de caracteres à afficher dans une colonnes. et moi je veux aller jusqu'à 5000 caracteres à peu pres.
    Non, il n'y a pas de limite (ou alors, elle est nettement plus loin).

    Par contre, il y a une limite dans le nombre de caractères stockés par le CListCtrl (de tête, je dirai aux environs de 250 mais ce n'est peut être pas la même valeur pour toutes les machines/version/application).

    Habituellement, lorsqu'on insère une ligne ou une colonne, on donne la chaine à afficher et elle est stockée par l'objet CListCtrl.

    Tu peux aussi ne pas la donner lors de l'insertion (en fait, tu donnes LPSTR_TEXTCALLBACK comme chaine de caractères) mais c'est à toi de gérer un autre message Windows. Lorsque le CListCtrl à besoin de la chaine pour l'afficher, il la demande à l'application.

    Il faut surcharger la fonction OnGetDispInfo, quelquechose de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
     
    BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)
    	//{{AFX_MSG_MAP(CMyListCtrl)
    	ON_NOTIFY_REFLECT(LVN_GETDISPINFO, OnGetDispInfo)
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
     
    ...
     
    void CMyListCtrl::OnGetDispInfo(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    	LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
     
    	if (pDispInfo->item.mask & LVIF_TEXT)
    	{
    		ItemStruct* pAppItem = (ItemStruct*) pDispInfo->item.lParam;
    		// attention le pointeur pDispInfo->item.pszText doit continuer à être valide même à la fin de la fonction
    		pDispInfo->item.pszText = "Texte à afficher";
    	}	
    	*pResult = 0;
    }
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Par défaut
    J'ai essayé votre solution mais ca me tronque toujours la chaine de caractere que je veux afficher.

    Je ne sais pas comment faire ?

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    On peut voir le code des InserItem() et la fonction OnGetDispInfo() ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Par défaut
    Voila le code de l'insertitem

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
             LVITEM          _ItemFileListCtrl;
     
    	_ItemFileListCtrl.mask  = LVIF_TEXT ;
    	_ItemFileListCtrl.iItem  = g_FileListCtrl->GetItemCount();
     
    	/* Ajout du chemin complet du fichier avec le nom*/
    	g_TexteAAfficher =  pElement->wcFullPath;
    	_ItemFileListCtrl.iSubItem = 0;
    	_ItemFileListCtrl.pszText = LPSTR_TEXTCALLBACK;
    	g_FileListCtrl->InsertItem(&_ItemFileListCtrl);



    Voila le code de la fonction OnGetDispInfo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    void CTestApplication::OnGetDispInfo(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    	LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
    	TCHAR	_Text[2048]	=	L"";
     
    	if (pDispInfo->item.mask & LVIF_TEXT)
    	{
    		ItemStruct* pAppItem = (ItemStruct*) pDispInfo->item.lParam;
    		/* attention le pointeur pDispInfo->item.pszText doit 
    		   continuer à être valide même à la fin de la fonction */
    		wcscpy_s(_Text, 2048, g_TexteAAfficher);
    		pDispInfo->item.cchTextMax	=	2048;
    		pDispInfo->item.pszText = _Text;
    	}	
    	*pResult = 0;
    }

  6. #6
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Attention, ton pointeur pDispInfo->item.pszText n'est plus valide à la sortie de la fonction puisqu'il vaut _Text qui est une variable locale de la fonction.

    Autre chose, quand tu dis qu'il tronque, c'est combien de caractères qui sont affichés sur combien que tu voudrais afficher ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  7. #7
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Par défaut
    il m'affiche 262 caracteres (dont ... à la fin qu'il ajoute) et apres il tronque

  8. #8
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Dans l'éditeur de ressource, est ce que le CListCtrl est en "Owner Data" (pas "Owner Draw") ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  9. #9
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Par défaut
    non pas du tout. elle est pas en "Owner Data"

    Et en meme temps, apres votre message j'ai mis "Owner Data" en TRUE et il y a toujours troncature

  10. #10
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    tu as debuggué, le programme passe bien dans la fonction OnGetDispInfo() et dans la branche du if ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  11. #11
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Par défaut
    Oui j'ai debuggé et ca ne marche pas
    Enfin je veux dire que ca passe dans cette fonction mais ca tronque toujours

  12. #12
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Peut être un petit bug chez Microsoft : http://connect.microsoft.com/VisualS...dbackID=116363
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  13. #13
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Par défaut
    je ne sais pas

  14. #14
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Par défaut
    OK. C'est pas grave je vais me contenter des item dont la taille est inferieure à 260

    Merci pour votre aide

  15. #15
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Faut pas baisser les bras comme cela

    Je regarde ce soir en faisant un petit programme de test
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  16. #16
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Je pense que je viens de trouver une solution à ton problème. Par contre, je ne sais pas si c'est un hack ou bien si c'est comme cela que cela doit être car c'est vrai que la doc à ce sujet n'est pas très claire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #define LONGUE L"012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
     
    void CTstDlgDlg::OnLvnGetdispinfoList1(NMHDR *pNMHDR, LRESULT *pResult)
    {
    	*pResult = 0;
    	NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
     
    	//Geta pointer to the item
    	LV_ITEM* pItem = &pDispInfo->item;
     
    	//Which item number?
    	//int nItem = pItem->iItem;
     
    	//Which column?
    	//int column = pItem->iSubItem;
     
    	//Do we need text information?
    	if (pItem->mask & LVIF_TEXT)
    	{
    		pItem->pszText = LONGUE;
    		pItem->cchTextMax = 0;
    	}
    }
    Il faut mettre le membre cchTextMax à 0 pour ne pas que la chaine soit tronquée. Dans mon exemple, la chaine LONGUE fait 300 caractères et ils sont tous affichés. Si tu laisse la valeur par défaut (260 sur ma machine), il y a troncation de la chaine (chaine coupée avec les ... de suspension en final).

    Par contre, il faut bien que tu fasses attention à ce que le pointeur que tu mets dans pszText continue à être valide à l'issue de la fin de la fonction.

    La doc MSDN est très claire à ce sujet :
    Citation Envoyé par MSDN
    If the structure specifies item attributes, pszText is a pointer to a null-terminated string containing the item text. When responding to an LVN_GETDISPINFO notification, be sure that this pointer remains valid until after the next notification has been received.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  2. Problèmes avec le filtrage des ip
    Par berry dans le forum Réseau
    Réponses: 9
    Dernier message: 30/12/2002, 07h51
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo