[MFC] Onglet marchent en debug, pas en release

sakuragikan Messages postés 4 Date d'inscription mercredi 11 mai 2005 Statut Membre Dernière intervention 15 septembre 2005 - 13 mai 2005 à 13:04
sakuragikan Messages postés 4 Date d'inscription mercredi 11 mai 2005 Statut Membre Dernière intervention 15 septembre 2005 - 16 mai 2005 à 10:56
Bonjour !

J'ai un bug qui apparait en release mais pas en debug, au niveau des onglets de ma Tab, qui appartient a une dialogue box.
Je sais que ce type de probleme a ete souvent traite ici, pourtant je ne vois ni pointeur nul ni depassement de mémoire.

Le bug apparait en release lorsque je clique sur le 2e ou le 3e onglet (il y en a trois). En mode debug, tout fonctionne correctement.

Voici le code :
dans le Begin/End_msg_map :

Code:,
----

ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, OnSelchangeTabMode)

La fonction d'initialisation des tab :

Code:,
----

void CContributionDlg::InitTab()
{

//initialize the tab control
int index;
TC_ITEM TabCtrlItem;
CString Caption;

//common data for all tabs
TabCtrlItem.mask= TCIF_TEXT; //only setting text
TabCtrlItem.cchTextMax= 0; //ignored if the structure is not receiving information
TabCtrlItem.iImage= -1; //no image
TabCtrlItem.lParam= 0; //no specific data

//tab specific data
TabCtrlItem.pszText= "Onglet1"; //the string is copied
index=m_tab.InsertItem(ONGLET1_TAB, &TabCtrlItem);

TabCtrlItem.pszText= "Onglet2"; //the string is copied
index=m_tab.InsertItem(ONGLET2_TAB, &TabCtrlItem);

TabCtrlItem.pszText= "Onglet3"; //the string is copied
index=m_tab.InsertItem(ONGLET3_TAB, &TabCtrlItem);

//first tab selectionned on init
m_tab.SetCurSel(ONGLET1_TAB);
Display_1_List();
}

La fonction qui gere le changement d'onglet :
le bug release se produit ici, juste avant le break correspondant aux onglets 2 et 3, l'AfxMessageBox passe tres bien, ce qui permet de voir que l'onglet est selectionné et que la listbox s'affiche bien, et puis le crash survient juste apres.

Code:,
----

void CContributionDlg::OnSelchangeTabMode()
{
//get currently selected tab

int index=0;
index=m_tab.GetCurSel();

switch (index)
{
case ONGLET1_TAB:
Display_List1();
break;

case ONGLET2_TAB:
Display_List2();
AfxMessageBox("passe");
break;

case ONGLET3_TAB:
Display_List3();
break;
}

}
Et puis les fonctions appelées lors du changement d'onglet : une listbox differente s'affiche selon l'onglet selectionné.

Code:,
----

void CContributionDlg::Display_List1()
{
m_ArticleList1.ShowWindow(SW_SHOW);
m_ArticleList2.ShowWindow(SW_HIDE);
m_ArticleList3.ShowWindow(SW_HIDE);
}
void CContributionDlg::Display_List2()
{
m_ArticleList2.ShowWindow(SW_SHOW);
m_ArticleList1.ShowWindow(SW_HIDE);
m_ArticleList3.ShowWindow(SW_HIDE);
}
void CContributionDlg::Display_List3()
{
m_ArticleList3.ShowWindow(SW_SHOW);
m_ArticleList2.ShowWindow(SW_HIDE);
m_ArticleList1.ShowWindow(SW_HIDE);
}

merci d'avance pour votre aide

2 réponses

mezaya Messages postés 202 Date d'inscription dimanche 18 mai 2003 Statut Membre Dernière intervention 6 mars 2010
14 mai 2005 à 13:20
je connais pas bien le mfc, mais quand tu a un probleme entre le mode
debug et release cela vient a 90% des initialisations pas faite. le
mode Debug fait automatiquement des initialisations alors que le mode
Release ne le fait pas

Voili,Voilou
0
sakuragikan Messages postés 4 Date d'inscription mercredi 11 mai 2005 Statut Membre Dernière intervention 15 septembre 2005
16 mai 2005 à 10:56
Hehe !

Merci de ta reponse Mezaya, je viens de resoudre mon probleme, et j'etais dans les autres 10% ^_^

Pour info, j'avais declarée ma fonction (ds le header file) comme ceci :
void OnSelchangeTabMode();

Alors qu'il faut la declarer comme cela, dans les afx-msg... :

afx_msg void OnSelchangeTabMode(NMHDR* pNMHDR, LRESULT* pResult);

et faire *pResult = 0 au lancement de la fonction.
Je suis débutant, je ne comprends pas trop ce que sont les afx_msg, mais dedieu ca marche
0
Rejoignez-nous