begin process at 2012 05 30 13:58:39
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

timer en mfc


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

timer en mfc

mardi 4 mai 2004 à 15:48:32 | timer en mfc

dambeaufort


bonjour, pourriez me fournir un exemple simple de timer cree sous mfc. J'ai regarder dans le forum mais je n'y comprend rien.
Pour moi Settimer, une fois appele, apelle une fonction processtimer executer toute les xx ms.....
les exemples ici me paraissent tres compliques!!!!

pouvez vous m'aider!!!!!!!!!!!!!!!
merci
mardi 4 mai 2004 à 18:45:49 | Re : timer en mfc

ymca2003


VOID CALLBACK TimerProc( HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime )
{
// appélée régulièrement
}


// création du timer toutes les dwTimeOut ms TimerProc sera appelé.
int nId=SetTimer(NULL, 0, dwTimeOut, TimerProc);

// destruction:
KillTimer(NULL, nId);
mercredi 5 mai 2004 à 10:22:25 | Re : timer en mfc

dambeaufort


je te remercie mais je ne sais pas si le timer se lance actuellement car je fais incrementer une variable a l'interieure et elle ne change pas d'etat.

Autre chose: dans une telle fonction de timer, il n'est pas possible d'appeler une fonction d'une classe ? car j'ai essayer mais ca me dit que la fonction est non static. si je la met static, mes variable Cedit ... ne sont plus reconnues comment faire?
mercredi 5 mai 2004 à 11:33:36 | Re : timer en mfc

ymca2003

la variable que tu modifie est-elle globale ou locale à la fct TimerProc (dans le second cas c'est normal que ça marche pas).

TimerProc ne peut avoir accès qu'a des variables globales, il faut donc mettre en global l'objet en question.

Si tu est en MFC, tu peut utilser SetTimer(IdTimer, dwTimeOut, NULL) dans la classe dérivant de CWnd dont tu souhaite accéder aux membres. Dans ce cas, OnTimer sera appelée. (classwizard->MemberFct WM_TIMER)
mercredi 5 mai 2004 à 11:37:00 | Re : timer en mfc

dambeaufort


la variable est une variable globale dans une classe. le probleme est que je ne peux acceder a cette classe via le timer. A moins peut etre de faire comme tu dis.
Peut tu me donner plus de precision (faut t'il intecepter le message WM_TIMER et comment?)
mercredi 5 mai 2004 à 11:52:43 | Re : timer en mfc

ymca2003

On reprend depuis le début :
- Ton timer va te servir à quoi ?
- A quelles variables de quelles classes doit-it accéder ?
- Type des classes (perso ou dérivé de CWnd, CDialog, CFrameWnd...) ?

mercredi 5 mai 2004 à 11:59:47 | Re : timer en mfc

ymca2003

HBITMAP ResizeBmp(HBITMAP hBmpSrc, SIZE newSize)
{
// taille actuelle
BITMAP bmpInfo;
GetObject(hBmpSrc, sizeof(BITMAP), &bmpInfo);
SIZE oldSize;
oldSize.cx = bmpInfo.bmWidth;
oldSize.cy = bmpInfo.bmHeight;

// selection source ds un DC
HDC hdc = GetDC(NULL);
HDC hDCSrc = CreateCompatibleDC(hdc);
HBITMAP hOldBmpSrc = (HBITMAP)SelectObject(hDCSrc, hBmpSrc);

// création bitmap dest et sélection ds un DC
HDC hDCDst = CreateCompatibleDC(hdc);
HBITMAP hBmpDst = CreateCompatibleBitmap(hdc, newSize.cx, newSize.cy);
HBITMAP hOldBmpDst = (HBITMAP)SelectObject(hDCDst, hBmpDst);

// resize
StretchBlt(hDCDst, 0, 0, oldSize.cx, oldSize.cy, hDCSrc, 0, 0, newSize.cx, newSize.cy, SRCCOPY);

// libération ressources
SelectObject(hDCSrc, hOldBmpSrc);
SelectObject(hDCDst, hOldBmpDst);
DeleteDC(hDCSrc);
DeleteDC(hDCDst);
ReleaseDC(NULL, hdc);

return hBmpDst;
}
mercredi 5 mai 2004 à 12:00:39 | Re : timer en mfc

ymca2003

oupps, je me suis gouré de sujet...
mercredi 5 mai 2004 à 15:04:00 | Re : timer en mfc

dambeaufort


en fait voila le probleme:

Grace a une fenetre de dialogue, j'affiche et je met a jour les positions d'un robot que je commande.
(progressbar, edit....)

actuellemnt, lorsque j'appui sur un bouton, je lance un mouvement, je vais ensuite relire la position du robot et je met a jour mon affichage (ceci ce fait dans une boucle while avec un sleep de 200 ms)
Le probleme c qu'il arrive que l'affichage de ma boite de dialogue plante et je ne vois alors plus rien. (si j'ouvre une autre fenetre alors que je suis dans un while)
je pensais donc me servir d'un timer pour mettre a jour mes barres de progression et mes fenetres edit toutes les ms pendant le mouvement. Peut etre que ca resoudrait le probleme?

Le timer servira donc a adapter et faire avancer si tu veux des barres de progression et des edit dans ma fenetre de dialogue. je dois donc avoir acces aux variables Cedit et Cprogressbar de ma fentres principale.
Donc je dois acceder a la classe de ma fenetre principale qui est derivee de Cdialog.


Vois tu un peu mieux le truc?

mercredi 5 mai 2004 à 18:51:12 | Re : timer en mfc

ymca2003

voici un petit chrono qui doit pouvoir de servir de base pour ton prog.
le dialog IDD_TIMER contien un contrôle static (IDC_STC_TIMER) et 3 boutons (IDC_BTN_START, IDC_BTN_STOP et IDCANCEL).

TestTimerDlg.h

//*****************************************************************************
// TestTimerDlg.h :
//
//*****************************************************************************

#ifndef AFX_TESTTIMERDLG_H_INCLUDED_
#define AFX_TESTTIMERDLG_H_INCLUDED_

//*****************************************************************************
// Classe CTestTimerDlg.
//*****************************************************************************
class CTestTimerDlg : public CDialog
{
//=============================================================================
// Membres privés.
//=============================================================================
private :

// police de caractères pour l'affichage
CFont m_Font;

// début du chrono
DWORD m_dwStartTime;

//=============================================================================
// Méthodes publiques.
//=============================================================================
public :
// constructeur
CTestTimerDlg(CWnd* pParent = NULL);

//=============================================================================
// Données de la boîte de dialogue.
//=============================================================================
//{{AFX_DATA(CTestTimerDlg)
enum { IDD = IDD_TESTTIMER };
CButton m_BtnStop;
CButton m_BtnStart;
CStatic m_StcTimer;
//}}AFX_DATA

//=============================================================================
// Méthodes virtuelles redéfinies.
//=============================================================================
//{{AFX_VIRTUAL(CTestTimerDlg)
protected :
virtual void DoDataExchange(CDataExchange* pDX);
//}}AFX_VIRTUAL

//=============================================================================
// Traitement des messages.
//=============================================================================
protected :
//{{AFX_MSG(CTestTimerDlg)
virtual BOOL OnInitDialog();
afx_msg void OnBtnStart();
afx_msg void OnBtnStop();
afx_msg void OnTimer(UINT nIDEvent);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

#endif // AFX_TESTTIMERDLG_H_INCLUDED_



TestTimerDlg.cpp:

//*****************************************************************************
// TestTimerDlg.cpp :
//
//*****************************************************************************

#include "StdAfx.h"
#include "TestTimer.h"
#include "TestTimerDlg.h"

//=============================================================================
// Table des messages.
//=============================================================================
BEGIN_MESSAGE_MAP(CTestTimerDlg, CDialog)
//{{AFX_MSG_MAP(CTestTimerDlg)
ON_BN_CLICKED(IDC_BTN_START, OnBtnStart)
ON_BN_CLICKED(IDC_BTN_STOP, OnBtnStop)
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

//*****************************************************************************
// Constructeur
//*****************************************************************************
CTestTimerDlg::CTestTimerDlg(CWnd* pParent)
: CDialog(CTestTimerDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CTestTimerDlg)
//}}AFX_DATA_INIT
}

//*****************************************************************************
//*****************************************************************************
void CTestTimerDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTestTimerDlg)
DDX_Control(pDX, IDC_BTN_STOP, m_BtnStop);
DDX_Control(pDX, IDC_BTN_START, m_BtnStart);
DDX_Control(pDX, IDC_STC_TIMER, m_StcTimer);
//}}AFX_DATA_MAP
}

//*****************************************************************************
// OnInitDialog :
//*****************************************************************************
BOOL CTestTimerDlg::OnInitDialog()
{
// appel fonction de la classe de base
CDialog::OnInitDialog();

// chargement et affectation icone (grande et petite)
HICON hIcon = LoadIcon(::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_APPICON));
SetIcon(hIcon, TRUE);
SetIcon(hIcon, FALSE);

// état des boutons
m_BtnStart.EnableWindow(TRUE);
m_BtnStop.EnableWindow(FALSE);
m_BtnStart.SetFocus();

// création police de caractère et affectation
CFont* pCurFont = m_StcTimer.GetFont();
LOGFONT lg;
pCurFont->GetLogFont(&lg);
lg.lfHeight = -40;
lg.lfWeight = FW_BOLD;
m_Font.CreateFontIndirect(&lg);
m_StcTimer.SetFont(&m_Font);

// retour
return TRUE;
}

//*****************************************************************************
// OnBtnStart :
//*****************************************************************************
void CTestTimerDlg::OnBtnStart()
{
// création timer
SetTimer(0x100, 100, NULL);
m_dwStartTime = GetTickCount();
m_StcTimer.SetWindowText(_T("0"));

// état des boutons
m_BtnStart.EnableWindow(FALSE);
m_BtnStop.EnableWindow(TRUE);
m_BtnStop.SetFocus();
}

//*****************************************************************************
// OnBtnStop :
//*****************************************************************************
void CTestTimerDlg::OnBtnStop()
{
// destruction timer
KillTimer(0x100);

// état des boutons
m_BtnStart.EnableWindow(TRUE);
m_BtnStop.EnableWindow(FALSE);
m_BtnStart.SetFocus();
}

//*****************************************************************************
// OnTimer :
//*****************************************************************************
void CTestTimerDlg::OnTimer(UINT nIDEvent)
{
// mise à jour du chrono
TCHAR szText[16];
itoa((GetTickCount()-m_dwStartTime)/1000, szText, 10);
m_StcTimer.SetWindowText(szText);
}




Cette discussion est classée dans : timer, mfc


Répondre à ce message

Sujets en rapport avec ce message

Timer en MFC [ par superteta2003 ] Salut...Je dois faire une mise à jour d'une CString dans une fenetre windows toutes les seconde en utilisant un Timer... Comment faire pour que le tra [MFC Visual 6] timer, debug assertion et autres questions [ par vladii ] J'ai quelques questions sur les MFC avec Visual 6, si quelqu'un peut m'aider, ça serait sympa: (projet en sdi) - je voudrais qu'au départ de mon appl TIMER avec MFC [ par pcrafale ] Bonjour à tous,Je n'arrive pas à programmer un timer sur un programme utilisant les MFC.Tous les codes expliquants les timer n'accepte pas les MFC.Sur Timer MFC C++ [ par tren13 ] Bonjour, j'aurais une question concernant les TIMER au niveau du MFC. j'ai cherché sur internet mais en général jai trouvé des gros exemples, et jaime Timer en MFC [ par akalys ] Bonsoir, Realisant un lecteur MP3 j'aurais besoin d'utiliser un timer pour la progression d'un slider suivant le temps. J'essais en créant un WM_TI Ouvrir EXE application WCE MFC 6 [ par sharingtop ] Bonjour a Tous, J'aimerais ouvrir une application .exe basée sur WCE MFC 6. J'ai essayer de l'ouvrir avec eMbedded Visual C++ 4.0. Le fichier en q Quel avenir pour les MFC ?? [ par isir ] quel avenir pour les MFC ?? Pb compilation sample drawcli MFC 9.0 [ par Flow8002 ] Bonjour , J'essaye de creer une application de dessin vectoriel pour mon projet de fin d'année. J'essaye de m'appuyer sur le sample fournit avec la Bouton tournant en MFC [ par med_mt ] Je suis débutant dans l'utilisation de MFC, et je veux réaliser un bouton tournant dans mon interface comme celui de l'oscilloscope. Est-ce que quelqu pbm code jock mfc [ par lamingrari12000 ] hi i have a big pblem i made a good progamme in c++ mfc in .net 2005 with Codejock Xtreme Toolkit Pro v11.20 the pblem is i ame using Codejock Xtreme


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 8,954 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales