Affichage image dans zone client + Thread

PoluxProg Messages postés 5 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 26 mai 2003 - 22 mai 2003 à 12:16
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 26 mai 2003 à 11:31
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
22 mai 2003 à 12:20
Tu ne peux pas le mettre dans un timer ? avec un bool si affiche ou non.
BruNews, ciao...
0
PoluxProg Messages postés 5 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 26 mai 2003
22 mai 2003 à 21:24
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...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
22 mai 2003 à 21:46
C'etait pour t'eviter le thread. Un timer s'execute ou se met en pause aussi.
BruNews, ciao...
0
PoluxProg Messages postés 5 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 26 mai 2003
22 mai 2003 à 21:54
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))...
0

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

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
22 mai 2003 à 22:09
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...
0
PoluxProg Messages postés 5 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 26 mai 2003
23 mai 2003 à 09:04
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 ?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 mai 2003 à 09:11
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...
0
PoluxProg Messages postés 5 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 26 mai 2003
26 mai 2003 à 10:52
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...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
26 mai 2003 à 11:31
Ton code est MFC et le mien direct API.
Faut interpreter dans le charabia mfc.
BruNews, ciao...
0
Rejoignez-nous