IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Pb Handle, GetDlgItem() et TimerProc


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Inscrit en
    Juin 2006
    Messages
    126
    D�tails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Par d�faut Pb Handle, GetDlgItem() et TimerProc
    Bonjour � tous!

    J'aimerai utiliser la fonction GetDlgItem dans une de mes fonctions CALLBACK timerproc. Comme il faut lui donner en argument le handle de la fen�tre j'ai chercher � utiliser la fonction GetSafeHwnd().

    Alors j'ai fait comme ca:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    InstantResult::InstantResult(CWnd* pParent /*=NULL*/)
    	: CDialog(InstantResult::IDD, pParent)
    {
    	HWND hwnd;
    	hwnd = GetSafeHwnd();
    	m_IdTimer=::SetTimer(hwnd,0,1000,TimerProc);  // création d'un timer qui bat à la seconde
    	m_IdTimer2=::SetTimer(hwnd,1,500,TimerProc2);  // création d'un timer qui bat à la seconde
     
    }
     
    VOID CALLBACK TimerProc(HWND /*hwnd*/,UINT /*uMsg*/,UINT_PTR /*idEvent*/,DWORD /*dwTime*/)
    {
      // timer function
     
    	unsigned char NoAuthmov[1]={141}; // not allowed to move command
    			WriteFile(hcom,NoAuthmov, 1, &m, NULL);
     
    }
     
    VOID CALLBACK TimerProc2(HWND hwnd ,UINT /*uMsg*/,UINT_PTR /*idEvent*/,DWORD /*dwTime*/)
    {
     
    			CCom::PurgeTx();
    			CCom::ReadBuffer();
     
    			CEdit* editFiD=(CEdit*) GetDlgItem(hwnd,IDC_EDIT4);
    			editFiD->SetWindowText(data);
     
    }
    Je ne comprends pas ce que j'ai fait de travers...

    A l'ex�cution j'ai un .exe has triggered a breakpoint et la ligne surlign�e est Debug Break;
    }

    et

    CWnd::SetWindowtext
    ENSURE(this)

    Voyez vous sinon un autre moyen d'utiliser GetDlgItem dans mon timerproc ?
    Merci d'avance

  2. #2
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    salut,
    tu es dans une CDialog , alors pourquoi tu n'utilises pas la gestion du timer associ� a une fen�tre MFC ?
    http://cpp.developpez.com/faq/vc/ind...=CWnd#SetTimer
    note: cette utilisation r�soudra ton probl�me d'acc�s a GetDlgItem...

  3. #3
    Membre confirm�
    Inscrit en
    Juin 2006
    Messages
    126
    D�tails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Par d�faut
    Euhhh je veux bien r�essayer mais dans un post, stephdin m'avait dit ca :

    utilises la fonction globale SetTimer() en indiquant une proc�dure et non la m�thode SetTimer() de la classe CWnd

    Code :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    m_IdTimer=::SetTimer(NULL,0,1000,TimerProc);  // création d'un timer qui bat à la seconde
     
    ...
     
    KillTimer(m_IdTimer);  // pour arreter le timer
     
    ...
     
    VOID CALLBACK TimerProc(HWND /*hwnd*/,UINT /*uMsg*/,UINT_PTR /*idEvent*/,DWORD /*dwTime*/)
    {
      // ici la procédure du timer
    }

  4. #4
    Membre confirm�
    Inscrit en
    Juin 2006
    Messages
    126
    D�tails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Par d�faut
    J'ai donc fait ca en m'inspirant de ta faq:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    InstantResult::InstantResult(CWnd* pParent /*=NULL*/)
    	: CDialog(InstantResult::IDD, pParent)
    {
    	OnStartTimer();
    	OnTimer(1);
     
    }
    void InstantResult::OnStartTimer() 
    {
    	m_nTimer =SetTimer(1, 2000, 0);
    }
     
    void InstantResult::OnStopTimer() 
    {
        KillTimer(m_nTimer);  
    }
     
    void InstantResult::OnTimer(UINT nIDEvent) 
    {
        switch(nIDEvent)
        {
            case 1:AfxMessageBox(_T("cakette"));
            default:break;
        }    
        // Call base class handler.
        InstantResult::OnTimer(nIDEvent);
    }
    et j'ai le probl�me Debug Assertion Failed qui pointe dans afxwin2.inl sur la ligne SetTimer.
    Si je fais continuer lors de l'erreur j'ai bien mon message.
    D'o� cela peut il venir ?

  5. #5
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    mais dans ce dernier cas tu n'�tais pas dans une fen�tre MFC

    tu n'as toujours pas compris qu'il y a deux mani�res de voir les timers:
    soit par l'api win32 : la solution dont tu parles.
    soit ce que propose les fen�tres MFC qui n'est qu'un encapsulation de l'api win32.
    dans ton cas ici pr�sent c'est cette solution qui est pr�f�rable.
    pourquoi s'emb�ter avec une callback alors que la fenetre MFC le g�re ?

  6. #6
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    normal...
    une fen�tre est valide graphiquement a partir du d�clenchement de la m�thode:
    OnInitDialog pour une bo�te de dialogue.
    OnInitialUpdate pour une vue.
    pas dans le constructeur, m_hwnd est null....
    initialise ton timer dans OnInitDialog.

  7. #7
    Membre confirm�
    Inscrit en
    Juin 2006
    Messages
    126
    D�tails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Par d�faut
    Ok j'ai fait alors ma fonction OnInitDialog :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    BOOL InstantResult::OnInitDialog()
    {
     
    	CCom::ClosePortCom();
    	CCom::InitPortCom();
    	OnStartTimer();
     
    	OnTimer(1);
     
    	return(TRUE);
    }
    Mais c'est bizarre pcq ma MessageBox est affich�e avant que je ne sois sur ma fen�tre. Est ce normal ?

Discussions similaires

  1. R�ponses: 5
    Dernier message: 05/07/2003, 11h52
  2. Manipulation des handle contexte
    Par rockbiker dans le forum DirectX
    R�ponses: 1
    Dernier message: 09/05/2003, 18h51
  3. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    R�ponses: 7
    Dernier message: 29/10/2002, 08h45
  4. pb de r�cup de handle � partir d'une dll
    Par yokito dans le forum Langage
    R�ponses: 2
    Dernier message: 20/08/2002, 12h29
  5. pb de handle en C
    Par deedje dans le forum C
    R�ponses: 3
    Dernier message: 21/06/2002, 16h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo