utilisation des timers [VC++] - C++ - Programmation
Marsh Posté le 30-05-2002 à 13:48:27
un peu plus de précisions ? tu passes bien par le classwizard pour créer ton OnTimer() ?
Marsh Posté le 30-05-2002 à 14:00:16
ha
regarde dans ton code, tu as une table définie par des macros qui 'mappe' tes fonctions à des messages :
BEGIN_MESSAGE_MAP(tonDialogue, CDialog)
et juste en dessous les définitions message -> procédure. tu dois rajouter ON_WM_TIMER().
Marsh Posté le 30-05-2002 à 14:01:15
Ce que je voudrais savoir, c'est est ce que le programme appelle automatiquement la fct OnTimer une fois que SetTimer a ete appellee? Ou est ce qu'il faut dire a ma fenetre principale que si elle recoit le message WM_TIMER, il faut appeller la fct OnTimer?
Marsh Posté le 30-05-2002 à 14:04:48
try58 a écrit a écrit : (1) Ce que je voudrais savoir, c'est est ce que le programme appelle automatiquement la fct OnTimer une fois que SetTimer a ete appellee? (2) Ou est ce qu'il faut dire a ma fenetre principale que si elle recoit le message WM_TIMER, il faut appeller la fct OnTimer? |
(2) est la réponse correcte, car ton handler peut avoir n'importe quel nom. la table de définition des messages sert justement à dire aux mfc quelle fonction appeler à la place de la fonction par défaut.
Marsh Posté le 30-05-2002 à 14:05:01
C comment la syntaxe exacte pour rajouter le message parce moi je n'ai rien.
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
Marsh Posté le 30-05-2002 à 14:05:57
ça doit ressembler à
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
ON_WM_TIMER()
END_MESSAGE_MAP()
Marsh Posté le 30-05-2002 à 14:07:52
le mieux est encore de supprimer ta fonction OnTimer, et de la recréer via le ClassWizard, tu seras sur de ne rien oublier
Marsh Posté le 30-05-2002 à 14:08:43
Harkonnen a écrit a écrit : le mieux est encore de supprimer ta fonction OnTimer, et de la recréer via le ClassWizard, tu seras sur de ne rien oublier |
effectivement
Marsh Posté le 30-05-2002 à 14:09:39
Harkonnen a écrit a écrit : le mieux est encore de supprimer ta fonction OnTimer, et de la recréer via le ClassWizard, tu seras sur de ne rien oublier |
Le pb c'est que sous VB7, je n'ai pas trouve le class wizard (enfin si il existe)
Marsh Posté le 30-05-2002 à 14:10:12
try58 a écrit a écrit : Le pb c'est que sous VB7, je n'ai pas trouve le class wizard (enfin si il existe) |
vc7 je voulais dire
Marsh Posté le 30-05-2002 à 14:11:33
try58 a écrit a écrit : vc7 je voulais dire |
dans le ClassExplorer, clic droit sur la classe concernée => "Add Event", créer un évènement sur WM_TIMER
Marsh Posté le 30-05-2002 à 14:13:28
Harkonnen a écrit a écrit : dans le ClassExplorer, clic droit sur la classe concernée => "Add Event", créer un évènement sur WM_TIMER |
Add event n'apparait pas, je peux juste ajouter une fct ou une variable. C louche!!
Marsh Posté le 30-05-2002 à 14:15:27
Je peux me tromper aussi, je ne l'ai pas sous les yeux. Mais je sais qu'il y a un Add Event qqpart. Cherche dans les menus ou sur tous les clics droits que tu pourras faire
Marsh Posté le 30-05-2002 à 14:34:20
Je viens de verifier sur un VC++6 et y a bien la fonctionnalite que tu me dis (Add New message handler un truc dans ce genre) mais sous VC++7 et ben y pas.
Marsh Posté le 30-05-2002 à 14:38:02
je vérifierai ce soir, mais j'étais persuadé de l'avoir vu...
Marsh Posté le 30-05-2002 à 14:45:24
youdontcare a écrit a écrit : tu as essayé le ON_WM_TIMER() ? |
oui j'ai essayer mais ca ne marche toujours pas!!
Marsh Posté le 30-05-2002 à 16:15:24
youdontcare a écrit a écrit : ça doit ressembler à BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) ON_WM_TIMER() END_MESSAGE_MAP() |
Je me suis plante de Cdialog, c pour ca que ca ne marchait pas.
Maintenant ca va beaucoup mieux!!
Merci les gars!
Marsh Posté le 30-05-2002 à 09:44:45
je voudrais faire un prog tout con qui m'affiche une boite de dialogue toutes les 2 sec par exemple.
J'utilise pour cela les fcts CWnd::SetTimer et CWnd::OnTimer.
Dans ma fct CmyprojectDlg::OnInitDialog je fais:
SetTimer(1, 2000, 0);
et je complete la fct suivante :
void CmyprojectDlg::OnTimer(UINT nIDEvent)
{
AfxMessageBox("toto" );
MessageBeep(0xFFFFFFFF);
}
et le pb c qu'il ne se passe rien lorsque je lance mon appli.
Aurai-je oublie quelque chose?