API / changement constant d'une editbox

shadow1779 Messages postés 706 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2013 - 29 déc. 2005 à 17:25
shadow1779 Messages postés 706 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2013 - 30 déc. 2005 à 12:46
Bonsoir, j'ai presque terminé mon lecteur mp3 en C, fait avec l'API fmod, je cherche a mettre le temps ecoulé sur le temps total, cependant je ne sais pas faire comment actualiser tout le temps afin que le contenue de l'editbox change, sans cependant faire un while qui figera le programme

merci d'avance

15 réponses

julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
29 déc. 2005 à 17:33
Une idée comme ca: les timers.

Tu réaffiches pas tout le temps, mets à intervalle de temps régulier du genre toutes les secondes ou toutes les 500ms)

Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
29 déc. 2005 à 17:34
bé on a pas inventé les timer pour rien :o
if(!Meilleur("Joky")) return ERREUR;<
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
29 déc. 2005 à 17:35
Comme le dit si bien Joky: oulala (mais en un peu plus long )

Ce n'est pas "mets" mais "mais", désolé pour l'orthographe.

Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
0
shadow1779 Messages postés 706 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2013
29 déc. 2005 à 17:43
0o les timers, j'ai du rater un episode dans la programmation C, en fait j'ai ce code suivant disons une partie de ce code , comment j'peu faire reactualiser cette valeur

//on recupere le temps total:
length = FSOUND_Stream_GetLengthMs(stream);

//on recupere la position ou on est actuellement
position = FSOUND_Stream_GetTime(stream);

sprintf(buffer,"%d // %d",position,lenght);
SetDlgItemText(hwnd,ID_POSITION,buffer);

et j'veu repeter cette action environ tout les 500ms sans que ca me ralentisse a mort le prog, vous pourriez me faire un ti exemple que j'vois comment c'est les timers

.
0

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

Posez votre question
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
29 déc. 2005 à 17:48
Dans to fonction de traitement des messages:
Tu dois avoir des messages du type: WM_CREATE, WM_COMMAND...
En gros un timer t'enverras un message WM_TIMER toutes les x ms.
Tu n'as plus qu'à intercepter le message et faire ce que tu veux (c'est a dire changer le contenu de ton editbox).

Pour créer un timer: SetTimer
Pour le détruire: KillTimer

Si tu as besoin d'un exemple, demande, on fera, mais si ca peut te suffire, tant mieux

Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
29 déc. 2005 à 17:49
Par contre oublier de dire:
Je suis assez intéressé par ton appli a base de fmod.
Vivement que tu la postes sur CS

Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
0
shadow1779 Messages postés 706 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2013
29 déc. 2005 à 19:32
franchement j'aimerai bien un exemple j'comprend en gros que c'est

SetTimer(hwnd,?,500,?);

tu pourrai me dire ou le mettre dans mon prog (si il ya une importance et ou mettre mon code pour qu'il le repete toute les 500 millisecondes)
<NAME></NAME>
<NAME></NAME>
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
29 déc. 2005 à 20:04
UINT SetTimer(
HWND hWnd, // handle of window for timer messages
UINT nIDEvent, // timer identifier
UINT uElapse, // time-out value
TIMERPROC lpTimerFunc // address of timer procedure
);

Donc en gros:
hWnd: Handle de la fenetre à laquelle les messages WM_TIMER seront envoyés
nIDEvent: Identifiant du timer (c'est par cet identifiant que tu pourras différencier les différents timers que tu auras lancé)
uElapse: Temps au bout duquel le timer te genere un message WM_TIMER.
lpTimerFunc: Fonction de traitement du timer, personnellement encore jamais utilisé, donc je la laisse à NULL, mais doit permettre de définir une fonction appelé à chaque évenement timer.

Je te fais un exemple ce soir

Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 déc. 2005 à 23:47
Un exemple ici pour callback de SetTimer():
http://www.cppfrance.com/code.aspx?id=23303

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
shadow1779 Messages postés 706 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2013
30 déc. 2005 à 12:05
en fait je fais ceci

case ID_PLAY:
//on crée un timer pour savoir le temps total et le temps écoulé
//puis enfin on converti ce temps en seconde
SetTimer(hwnd,ID_TIME,1000,NULL);
total = FSOUND_Stream_GetTime(stream);
total = total / 1000;
SetDlgItemText(hwnd,ID_FILEPLAYING,file);
FSOUND_Stream_Play(channel,stream);
break;

case ID_TIME:
if(time = total || time > total)
{
KillTimer(hwnd,ID_TIME);
}
time = FSOUND_GetCurrentPosition(channel);
time = time / 1000;
sprintf(buffer,"Position : %d :: %d",time,total);
SetDlgItemText(hwnd,ID_TIME,buffer);
break;

mais le probleme c'est que jamais on arrive a ID_TIME, donc jamais le chrono se lance :s
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
30 déc. 2005 à 12:07
C'est normal.
C'est pas case ID_TIME qu'il te faut mais case WM_TIMER.
Et ensuite tu teste l'identifiant du timer.

Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
30 déc. 2005 à 12:15
if(time = total || time > total) ???
EST UNE AFFECTATION, = pour COMPARAISON.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
shadow1779 Messages postés 706 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2013
30 déc. 2005 à 12:25
oups autant pour moi c'est juste que j'lai marqué vite mais dans le code c'est bien ==
.
0
nightlord666 Messages postés 746 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 23 mai 2007 10
30 déc. 2005 à 12:29
Pourquoi tu ne fait pas plutot if(time >= total) ? Ce serait plus simple et ça ferait la même chose, mais avec un code plus lisible, non ?
0
shadow1779 Messages postés 706 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2013
30 déc. 2005 à 12:46
ouai aussi, ca revient au meme mais oui c'est vrai que ca se comprendra peut etre mieux, j'pensais que le == OU > etais plus clair mais au pire si tu l'dis

.
0
Rejoignez-nous