EndDialog => plantage de l'application
Bonjour,
J'ai une application, qui, lors de la l'appui sur un bouton, ouvre une CDialog modale.
Cette CDialog contient un GIF animé et un thread qui va fermer automatiquement la fenêtre après un certain temps. C'est tout.
Hors, je m'aperçois que, à des fréquences variées, lorsque la boite de dialogue se ferme, c'est toute l'application qui plante...mais pas forcement du premier coup.
En analysant le fichier user.dmp généré par Dr Watson, il semble s'arrêter sur la fonction CDialog::EndDialog (mais je ne sais pas trop comment bien analyser le user.dmp).
Ci dessous mon code..(le GIF animé utilise la classe CPictureEx) :
Code:
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
|
// D_UsbPanel.cpp : fichier d'implémentation
//
#include "stdafx.h"
#include "D_UsbPanel.h"
// Boîte de dialogue D_UsbPanel
IMPLEMENT_DYNAMIC(D_UsbPanel, CDialog)
D_UsbPanel::D_UsbPanel(CWnd* pParent /*=NULL*/)
: CDialog(D_UsbPanel::IDD, pParent)
{
}
BOOL D_UsbPanel::OnInitDialog()
{
CDialog::OnInitDialog();
int posX = m_resX-470; //m_resX : var globale resolution en X
int posY =m_resY-470; //m_resY : var globale resolution en Y
//Chargement du GIF animé
if (usb_gif.Load(MAKEINTRESOURCE(IDR_USBHELP),_T("GIF")))
usb_gif.Draw();
usb_gif.SetWindowPos(&wndBottom,0,0,400,400,SWP_SHOWWINDOW);
MoveWindow(posX,posY,400,400);
//Démarrge du décompte avant fermeture
AfxBeginThread(closingThread, this);
return TRUE;
}
D_UsbPanel::~D_UsbPanel()
{
}
void D_UsbPanel::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_USBGIF, usb_gif);
}
//Fermeture de la fenetre, renvoi IDOK
void D_UsbPanel::Close()
{
EndDialog(IDOK);
}
BEGIN_MESSAGE_MAP(D_UsbPanel, CDialog)
END_MESSAGE_MAP()
// Gestionnaires de messages de D_UsbPanel
UINT closingThread(LPVOID pvParam)
{
//AfxMessageBox(_T("Je suis dans le thread..."));
D_UsbPanel *pThis=(D_UsbPanel *) pvParam ;
//Pause de 3.6secondes
Sleep(3600);
pThis->Close();
//AfxEndThread( 0 );
return 0;
} |
Quelqu'un voit-il une erreur la dedans ?
Merci,