Méthode OnSize

BIG_BOSS_001 Messages postés 75 Date d'inscription dimanche 10 octobre 2004 Statut Membre Dernière intervention 30 novembre 2005 - 30 juil. 2005 à 14:38
inflamers Messages postés 17 Date d'inscription lundi 20 mars 2006 Statut Membre Dernière intervention 14 mai 2007 - 14 mai 2007 à 18:12
Bonjour à tous,


Je viens de créer une application fenêtré en MFC.
J'ai ajouté un bouton nommé : IDC_BUTTON.
J'ai ajouté la méthode OnSize pour repositionner le bouton lorsque la fenêtre est redimensionnée.

J'obtiens donc ce code :


void CtestDlg::OnSize(UINT nType, int cx, int cy)


{


CDialog::OnSize(nType, cx, cy);


// TODO : ajoutez ici le code de votre gestionnaire de messages


CButton* btn = (CButton*)GetDlgItem(IDC_BUTTON);


btn->MoveWindow(0, 0, 100, 100, FALSE);


delete btn;


}


A la compilation je n'ai aucune erreur mais lorsque j'exécute mon programme j'ai ce message :
Exception non gérée à 0x7c239cca (mfc71d.dll) dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000020.
S'avez vous comment régler ce problème ?

Merci d'avance,

BIG_BOSS

11 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
30 juil. 2005 à 15:14
delete btn; n'a rien a faire ici

En plus court:

void CtestDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
GetDlgItem(IDC_BUTTON)->MoveWindow(0, 0, 100, 100, FALSE);
}
0
BIG_BOSS_001 Messages postés 75 Date d'inscription dimanche 10 octobre 2004 Statut Membre Dernière intervention 30 novembre 2005
30 juil. 2005 à 16:04
Merci de t'as réponse mais mon application plante toujours.
De plus visual studio me dirige dans un fichier nommé : winocc.cpp à la fonction
void CWnd::MoveWindow(
int x,
int y,
int nWidth,
int nHeight, BOOL bRepaint)

à ce moment visual studio me mets une petite flêche jaune (sur la gauche) sur la première ligne de la fonction qui
void CWnd::MoveWindow(
int x,
int y,
int nWidth,
int nHeight, BOOL bRepaint)


{


ASSERT(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL)); // Ici la flêche qui se trouve sur la gauche



if (m_pCtrlSite == NULL)


::MoveWindow(m_hWnd, x, y, nWidth, nHeight, bRepaint);



else


m_pCtrlSite->MoveWindow(x, y, nWidth, nHeight);


}

Une idée ?

BIG_BOSS
0
BIG_BOSS_001 Messages postés 75 Date d'inscription dimanche 10 octobre 2004 Statut Membre Dernière intervention 30 novembre 2005
30 juil. 2005 à 21:13
Voilà 5heures que je sèche...
Je ne trouve toujours pas le problème, je craque...

Quelqu'un aurait-il une idée ?
Merci

BIG_BOSS
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
30 juil. 2005 à 21:23
Que retourne GetDlgItem(IDC_BUTTON)?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BIG_BOSS_001 Messages postés 75 Date d'inscription dimanche 10 octobre 2004 Statut Membre Dernière intervention 30 novembre 2005
30 juil. 2005 à 22:29
Comment puis-je connaitre ce que me retourne GetDlgItem(IDC_BUTTON) ?
Peux tu me donner un exemple stp ?

Merci à toi,

BIG_BOSS
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
30 juil. 2005 à 22:32
Avec le debugger, tu mets un point d'arrêt juste après
CWnd* pWnd = GetDlgItem(IDC_BUTTON); et tu regardes la valeur de pWnd
0
BIG_BOSS_001 Messages postés 75 Date d'inscription dimanche 10 octobre 2004 Statut Membre Dernière intervention 30 novembre 2005
30 juil. 2005 à 22:37
Ok merci,
Alors quand je pointe mon curseur sur la variable pWnd il s'affiche dans une info bulle pWnd = 0x00000000 {CWnd pWnd=???}
Et dans la petite fenêtre il est écrit : Erreur : impossible d'évaluer l'expression

De quoi sa peut venir d'après toi ?

BIG_BOSS
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
30 juil. 2005 à 22:54
Un petit problème c'est sur. Dans ton dialogue, il n'y a aucun controle qui a l'ID IDC_BUTTON
0
BIG_BOSS_001 Messages postés 75 Date d'inscription dimanche 10 octobre 2004 Statut Membre Dernière intervention 30 novembre 2005
30 juil. 2005 à 23:02
Pourtant...
Dans mon dialog IDD_TEST_DIALOG j'ai mis un bouton avec ID IDC_BUTTON.
De plus dans mes ressources il y est.
Mon fichier ressource contient ceci :


//{{NO_DEPENDENCIES}}


// Microsoft Visual C++ generated include file.


// Used by test.rc


//


#define IDD_TEST_DIALOG 102


#define IDR_MAINFRAME 128


#define IDR_MENU1 129


#define IDD_ABOUT_DIALOG 130


#define IDC_BUTTON 1000


#define IDC_EDIT1 1001


#define IDC_EDIT2 1002


#define IDC_NAME 1003


#define IDC_OLD 1004


#define ID_PICTURE 1007


#define ID_AIDE_APROPOS 32772


#define ID_EXIT 32773


#define ID_ABOUT 32774


// Next default values for new objects


//


#ifdef APSTUDIO_INVOKED


#ifndef APSTUDIO_READONLY_SYMBOLS


#define _APS_NEXT_RESOURCE_VALUE 133


#define _APS_NEXT_COMMAND_VALUE 32775


#define _APS_NEXT_CONTROL_VALUE 1008


#define _APS_NEXT_SYMED_VALUE 101


#endif


#endif

D'où mon imcomprehension.
Si tu veux je peux te passer les sources car c'est juste un projet pour m'entrainer à repositionner les contrôles.
Merci,

BIG_BOSS
0
BIG_BOSS_001 Messages postés 75 Date d'inscription dimanche 10 octobre 2004 Statut Membre Dernière intervention 30 novembre 2005
1 août 2005 à 11:48
Bon j'ai fini par trouvé !
En fait GetDlgItem essaye d'accéder au bouton avant OnInitDialog().

Il suffit juste de se débrouiller pour que GetDlgItem ne s'éxecute qu'après.

Et encore merci de ton aide vecchio56 !!!

BIG_BOSS
0
inflamers Messages postés 17 Date d'inscription lundi 20 mars 2006 Statut Membre Dernière intervention 14 mai 2007
14 mai 2007 à 18:12
Bonjour,
Comment as tu fait alors ? J'ai le meme problème, mais commment faire pour qu'il s'execute avant ?
Merci
0
Rejoignez-nous