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 :

probl�me avec listctrl MFC


Sujet :

MFC

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    139
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 139
    Par d�faut probl�me avec listctrl MFC
    Bonjour,

    J'utilise une ListCtrl dans une fen�tre et j'y ins�re des lignes via la commande 'InsertItem'. Ceci marche tr�s bien lorsque je suis en mode DEBUG.

    Par contre quand je passe l'exe en mode RELEASE, je n'ai plus rien d'afficher ! Il semblerait que les lignes soient bien ins�r�es dans la ListCtrl mais on ne peut pas les visualiser !

    Y-a-t-il qqe chose que je n'ai pas fait lors de mon passage en release ? ou bien d'o� est-ce que cela peut venir ???

    Merci pour votre aide.

  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
    On pourrait voir le code (ou au moins la portion de code des InsertItem si le projet est volumineux) ? Parce que l�, j'ai pas ma boule de cristal.
    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 confirm�
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    139
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 139
    Par d�faut
    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
    24
    25
    26
    27
    ...
        CWnd * pWnd = GetParent();
     
        if (pWnd && !pWnd->IsWindowVisible())
        {
            pWnd->ShowWindow(SW_SHOWNORMAL);
        }
     
        // Set the date field of the new item
        CString csDate;
        csDate.Format("%s.%d",
            event.m_ctTimeStamp.Format("%d/%m/%y %H:%M:%S"),
            event.m_usTenthSeconds
            );
     
     
        int nItem = this->m_ListCtrl.InsertItem(csDate,                         
            event.m_csDirection, 
            event.m_csImat,
            event.m_csAppl,
            event.m_csEventName,                    
            event.m_csParameters,
            event.m_csChannel,
            event.m_csService,
            event.m_csSap
            );
    ...

  4. #4
    Membre �m�rite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par d�faut
    Montre toute la m�thode

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    139
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 139
    Par d�faut
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    void CGeneralTrafficView::WriteItem(CEvent& event)
    {
        // If it is the first trace (the windows is disabled), then
        // display it
        CWnd * pWnd = GetParent();
     
       if (pWnd && !pWnd->IsWindowVisible())
        {
    	   pWnd->ShowWindow(SW_SHOWNORMAL);
        } 
     
        // Set the date field of the new item
        CString csDate;
        csDate.Format("%s.%d",
            event.m_ctTimeStamp.Format("%d/%m/%y %H:%M:%S"),
            event.m_usTenthSeconds
            );
     
        int nItem = this->m_ListCtrl.InsertItem(csDate,                         
            event.m_csDirection, 
            event.m_csImat,
            event.m_csAppl,
            event.m_csEventName,                    
            event.m_csParameters,
            event.m_csChannel,
            event.m_csService,
            event.m_csSap
            );
     
           this->m_ListCtrl.GiveHighlightNumber(nItem);
     
        if(m_bOnlineUpdate)
        {
            this->m_ListCtrl.SetScrollPos(SB_VERT, 100, TRUE);
            this->m_ListCtrl.EnsureVisible(this->m_ListCtrl.GetItemCount()-1,   FALSE);
        }
    }
    La fct 'GiveHighlightNumber' permet de g�rer les couleurs, m�me en la mettant en commentaire j'ai le m�me r�sultat, c�d rien n'est affich�.

    Autre remarque, juste apr�s le 'this->m_ListCtrl.InsertItem' je fais un GetItemCount qui s'incr�mente bien.

    La fct telle qu'elle est affich�e l� marche tr�s bien en debug mais en release n'affiche rien.

  6. #6
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 503
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 503
    Par d�faut
    Les probl�mes les plus commun quand le code "marche" en DEBUG et plus en RELEASE sont :
    - utilisation de macro de DEBUG avec du code � l'int�rieur
    ASSERT(toto = 1); par exemple ; et pas ASSERT(toto == 1)

    Ca n'a pas l'air d'�tre cela.

    - probl�me s'initialisation de la m�moire, toujours � 0x00 ou 0xCC ou 0xCD, selon les types d'allocation en DEBUG. En RELEASE c'est n'importe quoi.

    Dans ce cas, le CEvent event a t'il bien tous ses champs correctement initialis�s ?

  7. #7
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    139
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 139
    Par d�faut
    j'ai fait une passe sur tous les champs pass�s en param�tre et ils sont tous bien remplie :
    event.m_csDirection,
    event.m_csImat,
    event.m_csAppl,
    event.m_csEventName,
    event.m_csParameters,
    event.m_csChannel,
    event.m_csService,
    event.m_csSap
    Qd je fais un GetItemCount juste apr�s et que j'interroge le r�sultat, �a s'incr�mente bien. De + je g�re la scrollbar verticale et je vois qu'elle se cr�e bien et qu'elle diminue en taille, ce qui veut dire qu'il y a bien des donn�es �crite. Je pense qu'il s'agit d'un pb d'affichage style update ou refresh mais alors je ne vois pas du tout o�...

    J'ai essay� en fin de fct de mettre un update mais pareil.

  8. #8
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    139
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 139
    Par d�faut
    autre chose, tu parles de macro DEBUG :

    peut-il y avoir qqe chose de d�finie qqe part dans les settings du projet et qui pourrait faire que cela fonctionne bien en debug mais pas en release ?

    j'ai pas mal de code qui est encapsul� dans du :
    ifdef _DEBUG
    et qui ne s'ex�cute qu'en mode DEBUG mais dans mon cas je passe bien partout (il me semble).
    Mais p� que je ne passe pas dans une fct qui initialise ma fen�tre ou mes composants ?

  9. #9
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    salut, tu es sur de passer dedans en release ?
    tu peux essayer de mettre des OutputDebugString pour tracer les �l�ments de cette m�thode et de regarder le r�sultat avec debugview

  10. #10
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    139
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 139
    Par d�faut
    dans la fct cit�e + haut, �a c'est sur j'y passe.

    Le debugview marchera m�me en release ?

  11. #11
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    oui c'est tout l'int�r�t ...

  12. #12
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 503
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 503
    Par d�faut
    Question un peu b�te.
    Je ne vois pas dans la doc (http://msdn.microsoft.com/en-us/library/8b9s12fc.aspx) une signature de "CListCtrl::InsertItem" compatible avec votre appel.
    N�est-ce pas une customisation du contr�le ? Donc peut-�tre probl�me dans cette customisation.

  13. #13
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    139
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 139
    Par d�faut
    exact !

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    int CListCtrlProjet::InsertItem(CString csDate, 
                                   CString csDirection, 
                                   CString csImat,
                                   CString csAppl,
                                   CString csEventName,                    
                                   CString csParameters,
                                   CString csChannel,
                                   CString csService,
                                   CString csSap
                                   )
    {
        INT itemIndex = m_Events.Add(new CEvents(csDate, 
            csDirection, 
            csImat,
            csAppl,
            csEventName,                    
            csParameters,
            csChannel,
            csService,
            csSap)
            );
     
        // List item declaration
        LVITEM m_listItem; 
        m_listItem.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE; 
        m_listItem.iItem = itemIndex;
        m_listItem.iSubItem = 0;
        m_listItem.state = 0;
        m_listItem.stateMask = 0;
        m_listItem.pszText = LPSTR_TEXTCALLBACK;
        m_listItem.lParam = (LPARAM) m_Events.GetAt(itemIndex);
     
        return CListCtrl::InsertItem(&m_listItem);
    }
    en cherchant sur le net, j'ai trouv� qu'�ventuellement cette ligne peut poser probl�me en release :
    Sinon je ne vois pas de probl�me dans cette fonction...

  14. #14
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 503
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 503
    Par d�faut
    LVITEM est une structure de Win32.
    Il faut toujours faire un "ZeroMemory(&listItem, sizeof(listItem));" sur ce type de structure avant de s'en servir.

  15. #15
    Membre �m�rite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par d�faut
    Pourquoi et pour quel int�r�t tu utilises un LPSTR_TEXTCALLBACK dans ton InsertItem

  16. #16
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    139
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 139
    Par d�faut
    m�me avec "ZeroMemory(&listItem, sizeof(listItem));" �a fait la m�me chose.

    Le "InsertItem" a l'air de marcher (puisque le GetItemCount me montre que �a s'incr�mente bien) mais pas l'affichage.

    Je ne sais vraiment pas o� chercher...

  17. #17
    Membre �m�rite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par d�faut
    Pourquoi et pour quel int�r�t tu utilises un LPSTR_TEXTCALLBACK dans ton InsertItem

  18. #18
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    139
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 139
    Par d�faut
    Citation Envoy� par Gabrielly Voir le message
    Pourquoi et pour quel int�r�t tu utilises un LPSTR_TEXTCALLBACK dans ton InsertItem
    je ne sais pas, c'est du code que j'ai repris, je ne sais m�me pas � quoi sert ce LPSTR_TEXTCALLBACK...


    autre rq : pour pouvoir avancer et suivre pas � pas malgr� le release, j'utilise du debbogage � l'ancienne en mettant des fwrite dans un fichier trace un peu partout et pouvoir suivre ainsi l'avanc� dans le code.

    1- En quoi le debugView peut-il m'aider ? En fait je ne connais pas du tout...

    2- dans mon appli, m�me en debug, j'ai des plantages compl�tement al�atoires. L'appli peut planter au bout de 5min ou la fois d'apr�s au bout de 4-5h de tests d'affil�. Nous avons mis des "mouchards" un peu partout pour essayer de voir o� �a plantait mais �a n'a rien donn�. Pareil en essayant de suivre pas � pas en debug : �a ne donne rien, �a plante on ne sait o�.
    Sur ce genre du bug, debugView peut-il m'aider ? Que va-t-il m'apporter ?

    Merci pour votre aide

  19. #19
    Membre �m�rite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par d�faut
    Je crois que ton probl�me vient de l�.

    Est-ce que tu g�res quelque part l'�v�nement LVN_GETDISPINFO
    Si oui montre �galement le code de son gestionnaire.

  20. #20
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    139
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 139
    Par d�faut
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    BEGIN_MESSAGE_MAP(CListCtrlProjet, CListCtrl)
    	//{{AFX_MSG_MAP(CListCtrlProjet)
    	ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
        ON_NOTIFY_REFLECT(LVN_GETDISPINFO, OnGetDispInfo)
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    ...
    ...
    ...
    void CListCtrlProjet::OnGetDispInfo(NMHDR *pNMHDR, LRESULT *pResult)
    {
        NMLVDISPINFOA* plvdi = (LPNMLVDISPINFOA) pNMHDR;
    
    	// initialisation de la section critique
    	if (! lca_vCriticalSectionInit) {
    	    InitializeCriticalSection(&lca_vCriticalSection);
    	    lca_vCriticalSectionInit = TRUE;
    	}
    	// Entr�e dans la section critique
    	EnterCriticalSection(&lca_vCriticalSection);
    
        CGenericEvents* pEvent = (CGenericEvents*)       m_Events.GetAt(plvdi->item.iItem);
    
    	// Sortie de la section critique
    	LeaveCriticalSection(&lca_vCriticalSection);
        
        if (pEvent->ItemType() == "ObsEvent")
        {
            CObsEvents* pObsEvent = (CObsEvents*) m_Events.GetAt(plvdi->item.iItem);
            switch (plvdi->item.iSubItem) 
            { 
            case 0:
                plvdi->item.pszText = pObsEvent->Date();
                break;
            case 1:
                plvdi->item.pszText = pObsEvent->Direction();
                break;     
            case 2:
                plvdi->item.pszText = pObsEvent->ImatCalled();        
                break;        
            case 3:        
                plvdi->item.pszText = pObsEvent->ImatCalling();        
                break;        
            case 4:
                plvdi->item.pszText = pObsEvent->Parameters();        
                break;        
            default:        
                break;
                    
            }
                
        } 
        else if (pEvent->ItemType() == "Event")
        {         
            CEvents* pEvent = (CEvents*) m_Events.GetAt(plvdi->item.iItem);            
            switch (plvdi->item.iSubItem)
            {
            case 0:
                plvdi->item.pszText = pEvent->Date();
                break;
            case 1:
                plvdi->item.pszText = pEvent->Direction();
                break;
            case 2:
                plvdi->item.pszText = pEvent->Imat();
                break;
            case 3:
                plvdi->item.pszText = pEvent->Appl();
                break;
            case 4:
                plvdi->item.pszText = pEvent->EventName();
                break;
            case 5:
                plvdi->item.pszText = pEvent->Parameters();
                break;
            case 6:
                plvdi->item.pszText = pEvent->Channel();
                break;
            default:
                break;
            }
                    
        }            
        else if (pEvent->ItemType() == "EventParam")
        {
            CEventParameter* pEvent = (CEventParameter*) m_Events.GetAt(plvdi->item.iItem);
            switch (plvdi->item.iSubItem)
            {
            case 0:
                //plvdi->item.pszText = "";
                break;
            case 1:
                //plvdi->item.pszText = "";                   
                break;
            case 2:
                //plvdi->item.pszText = "";
                break;
            case 3:
                //plvdi->item.pszText = "";
                break;
            case 4:
                //plvdi->item.pszText = "";
                break;
            case 5:
                plvdi->item.pszText = pEvent->ParamValue();
                break;
            case 6:
                //plvdi->item.pszText = "";
                break;
            default:
                break;
            }
        }
    }
    en regardant cette fonction je pense avoir trouv� le probl�me !
    J'ai d�j� remarqu� et corrig� pas mal de bug dans le code sur ce genre de 'if' :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
     if (pEvent->ItemType() == "EventParam")
    En debug �a marche bien mais pas en release, il faut plut�t utiliser 'strcmp'.
    Je teste et je vous tiens au jus...

+ R�pondre � la discussion
Cette discussion est r�solue.
Page 1 sur 2 12 Derni�reDerni�re

Discussions similaires

  1. Petit probl�me avec ListCtrl
    Par gotcha007 dans le forum wxPython
    R�ponses: 1
    Dernier message: 06/02/2011, 02h17
  2. Probl�me avec les MFC de windows
    Par tiagocerqueira dans le forum MFC
    R�ponses: 3
    Dernier message: 02/02/2010, 11h30
  3. R�ponses: 5
    Dernier message: 10/05/2005, 10h22
  4. [MFC] Probl�me avec un RichEdit et couleur
    Par Erakis dans le forum MFC
    R�ponses: 1
    Dernier message: 24/03/2005, 14h12
  5. [MFC] probl�me avec les insertions dans CComboBox
    Par Joeleclems dans le forum MFC
    R�ponses: 12
    Dernier message: 11/06/2004, 15h31

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