Affichage image dans zone client + Thread

Signaler
Messages postés
5
Date d'inscription
mardi 20 mai 2003
Statut
Membre
Dernière intervention
26 mai 2003
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Pour afficher une image dans la zone client, j'utilise ce code qui marche plutôt bien:

CBitmap *pImage=new CBitmap;
pImage->LoadBitmap(IDB_IMAGE);
CDC *pMem;
pMem = new CDC;
pMem->CreateCompatibleDC(pDC);
pMem->SelectObject(pImage); // <- Erreur d'exécution.
pDC->StretchBlt(0,0,L,l,pMem,0,0,720,576,SRCCOPY);
delete pMem;

Mais, le problème est que ce code me créé une erreur d'exécution lorsque je le met dans un thread...
Je voudrais, en fait, faire une animation dans la zone client à partir de 50 images superposées qui seront affichées simultanément toutes les 200 millisecondes, tout en pouvant faire une pause à n'importe quel moment...

Si quelqu'un a une idée pratique sur ce problème ou autre solution, j'accepte toute propositon...

9 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
Tu ne peux pas le mettre dans un timer ? avec un bool si affiche ou non.
BruNews, ciao...
Messages postés
5
Date d'inscription
mardi 20 mai 2003
Statut
Membre
Dernière intervention
26 mai 2003

Merci pour ton message mais je ne comprends pas pourquoi le mettre dans un timer ?
L'animation reprèsente un décompteur graphique comme un sablier qui peut être stopper (suspendu momentanément) par événement, puis par un autre événement, il continue ("resume") de décompter...
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
C'etait pour t'eviter le thread. Un timer s'execute ou se met en pause aussi.
BruNews, ciao...
Messages postés
5
Date d'inscription
mardi 20 mai 2003
Statut
Membre
Dernière intervention
26 mai 2003

Ah bon, je pensais que le thread était plus pratique à utiliser, mais c'est quoi le code pour démarrer une fonction avec un timer ? (J'utilisais déjà un timer pour mettre à jour l'affichage en cas de remension, mais c'était tout simple : SetTimer(1, 300, NULL))...
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
SetTimer() a au moins 2 methodes differentes d'appel.
Soit tu generes comme tu l'as mis un WM_TIMER sur ta WndProc, soit tu lui passes l'adresse d'une fonction callback avec laquelle tu fais ce que tu veux. La 2 eme methode a un gros avantage car elle sera toujours appelee quel que soit le contexte.
BruNews, ciao...
Messages postés
5
Date d'inscription
mardi 20 mai 2003
Statut
Membre
Dernière intervention
26 mai 2003

Merci beaucoup pour ton aide, il faut que je comprenne comment la fonction SetTimer en passant l'adresse
d'une fonction "callback" (?)...
Au fait, quelqu'un peut me dire s'il existe une version de MSDN en français ?
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
et non, pas de MSDN french.
Pour la version SetTimer() avec callback, va voir ma source ABOUTBOX SINUSOIDE, y a un exemple. C'est pas mfc car je n'en fais jamais mais tu auras idee de la methode.
BruNews, ciao...
Messages postés
5
Date d'inscription
mardi 20 mai 2003
Statut
Membre
Dernière intervention
26 mai 2003

J'ai essayer d'utiliser la fct SetTimer()...
Le truc que je ne comprends pas, c'est que dans ton exemple ABOUTBOX SINUSOIDE lorsque tu utilise SetTimer(), tu lui mets 4 paramètres. Or, quand je le met dans mon code à la CView, le compilateur me dis que SetTimer ne peut accepter que 3 paramètres... (???)
CView::OnDraw(CDC *pDC)
{ ...
SetTimer(0, 100, TestTimerProc); <- 3 param et pas +
...
}

Autre chose, dans ma fct CALLBACK qui sera appelée toute les 100 milisecondes, je voudrais pouvoir lui mettre un paramètre :
void CALLBACK TestTimerProc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime)
{
Je vous voudrais avoir le pointeur sur le pDC de la fct OnDraw(), afin d'afficher mes images toutes les 100 ms...
}

A moins qu'il existe une fct qui permette de récupérer ce pointeur sur la zone client...
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
Ton code est MFC et le mien direct API.
Faut interpreter dans le charabia mfc.
BruNews, ciao...