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 :

Picture Controle et Timer


Sujet :

MFC

  1. #1
    Membre très actif
    Inscrit en
    Novembre 2006
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 371
    Par défaut Picture Controle et Timer
    j'ai creer une valeur qui s'incrémente dans le timer cette valeur marche bien mais quand je la met dans la fonction void DialogDlg::OnPaint() cette valeur n'est plus incrémente ,
    en fait cette valeur change la couleur de mon Picture Controle, voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	CPaintDC dc(this); // device context for painting
     
    			CRect Rect;
     
     
    	CBrush SetColor(RGB(incrimentation, 0, 0));
     
    	m_picturebox.GetWindowRect(&Rect);
     
    	CBrush *Brush = dc.SelectObject(&SetColor);
     
    	ScreenToClient(&Rect);
     
    	dc.Rectangle(Rect);
    la valeur incrimentation est definie dans la fonction timer mais bizzarement elle ne s'incremente pas dans la class OnPaint



    merci de ne pas me laisse bloque.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour,
    Le bout du code que tu as posté est insuffisant pour vraiment comprendre ce qui se passe. Pourrais-tu poster la classe ?

  3. #3
    Membre très actif
    Inscrit en
    Novembre 2006
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 371
    Par défaut
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    int incrimentation = 0, n = 0;
     
    void CDialogDlg::OnTimer(UINT nIDEvent) 
    {
     
    	m_Seconds++;
     
    	incrimentation +=n; 
     
    		if(incrimentation == 0)
    	{
     
    		n=1;
    	}
     
    	if(incrimentation == 255)
    	{
     
    		n=-1;
    	}
     
     
    	CDialog::OnTimer(nIDEvent);
     
    }
     
    void CDialogDlg::OnPaint() 
    {
     
    	CPaintDC dc(this); // device context for painting
     
    	CRect Rect;
     
     
    	CBrush SetColor(RGB(incrimentation, 0, 0));
     
    	m_picturebox.GetWindowRect(&Rect);
     
    	CBrush *Brush = dc.SelectObject(&SetColor);
     
    	ScreenToClient(&Rect);
     
    	dc.Rectangle(Rect);
     
     
    	if (IsIconic())
    	{
     
    		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
     
    		// Center icon in client rectangle
    		int cxIcon = GetSystemMetrics(SM_CXICON);
    		int cyIcon = GetSystemMetrics(SM_CYICON);
    		CRect rect;
    		GetClientRect(&rect);
    		int x = (rect.Width() - cxIcon + 1) / 2;
    		int y = (rect.Height() - cyIcon + 1) / 2;
     
    		// Draw the icon
    		dc.DrawIcon(x, y, m_hIcon);
    	}
    	else
    	{
    		CDialog::OnPaint();
    	}
    }
    // The system calls this to obtain the cursor to display while the user drags
    //  the minimized window.
    HCURSOR CKkkDlg::OnQueryDragIcon()
    {
    	return (HCURSOR) m_hIcon;
    }

    m_picturebox est le nom variable de ma Picture Control, j'aimerai que la couleur de Picture Control se change en rouge et en noir via la fonction Timer, voilà c'est tout.

    merci avance

  4. #4
    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,
    il faut déclencher un rafraichissement dans ton timer ,sinon le paint n'a aucune raison (a part le recouvrement de la fenêtre) d'être appelé.
    un Invalidate suivit d'un UpdateWindow() devrait faire l'affaire.
    néanmoins suivant la fréquence du timer il reste d'avoir des clignotements.

  5. #5
    Membre très actif
    Inscrit en
    Novembre 2006
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 371
    Par défaut
    salut

    j'ai deja essai Update window mais ca marche pas

    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
    void CDialogDlg::OnTimer(UINT nIDEvent) 
    {
     
    	m_Seconds++;
     
    	incrimentation +=n; 
     
    		if(incrimentation == 0)
    	{
     
    		n=1;
    	}
     
    	if(incrimentation == 255)
    	{
     
    		n=-1;
    	}
     
            UpdateWindow();
     
    	CDialog::OnTimer(nIDEvent);
     
    }
    j'ai aussi essaye d'update Picture Control :

    m_color.UpdateWindow();

    et j'ai aussi essye d'update la fenetre principale avec :
    AfxGetMainWnd()->UpdateWindow();

    mais tu ca marche pas, le coleur ne se change pas et pourtant la valeur se change parfaitement dans la classe Timer, mais rien ne se passe dans la classe Paint.

    que dois-je faire

    merci encore

  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
    il faut faire un Invalidate + UpdateWindow .

  7. #7
    Membre très actif
    Inscrit en
    Novembre 2006
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 371
    Par défaut
    ça marche nikel merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/02/2008, 17h13
  2. WM_MOUSEMOVE et Picture control
    Par Spout dans le forum MFC
    Réponses: 10
    Dernier message: 25/05/2007, 16h03
  3. Réponses: 3
    Dernier message: 20/09/2006, 18h49
  4. Réponses: 7
    Dernier message: 22/02/2006, 17h07
  5. [MFC] Picture Control
    Par mfrai02 dans le forum MFC
    Réponses: 3
    Dernier message: 29/07/2005, 01h48

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