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

Visual C++ Discussion :

bitblt et scintillement


Sujet :

Visual C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    �tudiant
    Inscrit en
    Juillet 2006
    Messages
    39
    D�tails du profil
    Informations personnelles :
    Localisation : France, Territoire de Belfort (Franche Comt�)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 39
    Par d�faut bitblt et scintillement
    Bonjour � tous

    Je parcours le forum depuis un moment, je trouve certain truc, mais je pige toujours pas. J'essaie de d�placer une image bitmap sur un axe horizontal (genre texte d�roulant dans le bas d'un �cran).

    Je suis parti de l'exemple win32 "hello world", j'ai un timer qui appel
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    InvalidateRect(hWnd,NULL,true);
    et mon WM_PAINT qui fait ceci :
    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
    	PAINTSTRUCT ps;
    	HDC hdc;
    	HDC memoryHdc;
    	RECT rcClient;
    	hdc = BeginPaint(hWnd, &ps);
    	GetClientRect(hWnd, &rcClient);
    	int cxClient = rcClient.right-rcClient.left;
    	int cyClient = rcClient.bottom-rcClient.top;
    	HDC s_hDCBackground = CreateCompatibleDC(hdc);
            // moulinette pour changer de message et modifier ses coordonnées
    	bool showMessage = true;	
    	if(m_listeBMP.size()!=0 && showMessage)
    	{
    		if(indice<0)
    		{			
    			currentIt = m_listeBMP.begin();
    			msgcurrent = (*currentIt);
    			indice = 0;
    		}
    		if(msgcurrent.posX <= msgcurrent.width * -1)
    		{
    			msgcurrent.nbLoopDone++;
    			if(msgcurrent.nbLoopDone==msgcurrent.nbLoop)
    			{
    				currentIt++;
    				if(currentIt == m_listeBMP.end())
    				{
    					currentIt = m_listeBMP.begin();
    				}
    				msgcurrent = (*currentIt); 
    			}
    		}else{
    			if(msgcurrent.posX == -1)
    			{
    				msgcurrent.posX = rcClient.right;
    			}else{
    				msgcurrent.posX = msgcurrent.posX - 3;
    			}
     
    			// msgcurrent est une struct, .bmp est un HBITMAP
    			SelectObject(s_hDCBackground, msgcurrent.bmp);			
    			BitBlt(hdc, msgcurrent.posX, 10, cxClient, cyClient, s_hDCBackground, 0, 0, SRCCOPY);
    			DeleteDC(s_hDCBackground);
    		}
    	}
     
    	EndPaint(hWnd, &ps);
    et pour info, ma struct :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    typedef struct Message{
    	int dindice;
    	int posX;
    	int posY;
    	int width;
    	int height;
    	int nbLoop;
    	int nbLoopDone;
    	HBITMAP bmp;
    };
    J'ai lu qu'il fallait cr�er un DC en m�moire, dessiner dedans puis finalement dessiner ce dc dans le dc de la fen�tre... il me semble que c'est ce que je fais ? Mais j'ai toujours un effet de scintillement ?

  2. #2
    Membre averti
    Profil pro
    �tudiant
    Inscrit en
    Juillet 2006
    Messages
    39
    D�tails du profil
    Informations personnelles :
    Localisation : France, Territoire de Belfort (Franche Comt�)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 39
    Par d�faut
    Le probleme venait certainement de la fa�on dont je demandais un repaint.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    RECT rcWnd; 
    GetClientRect(hWindow,&rcWnd); 
    InvalidateRect(hWindow,&rcWnd,false); // avec true, j'ai le probleme.
    UpdateWindow(hWindow);

  3. #3
    Membre �clair� Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par d�faut
    sinon tu as penser a faire du double buffering ?

  4. #4
    Membre �prouv�
    Inscrit en
    Avril 2004
    Messages
    122
    D�tails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 122
    Par d�faut
    Salut,
    Ton probl�me de scintillement vient du fait que le fond de ta fen�tre est redessin� (le param�tre true de InvalidateRect), intercepte WM_ERASEBKGND, ne fait rien dedans a part renvoyer true et ca ne scintillera plus, par contre tu devras toi m�me redesiner le fond de ta fen�tre.

  5. #5
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Plut�t que de bloquer compl�tement le WM_ERASEBKGND, tu peux te d�brouiller pour lui faire effacer tout sauf la zone du texte...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Pb scintillement-stabilit� lors r�affichage de JPanel
    Par Pill_S dans le forum Composants
    R�ponses: 5
    Dernier message: 28/04/2004, 14h03
  2. Pb affichage avec un PaintBox (pour eviter scintillement)
    Par juan64 dans le forum C++Builder
    R�ponses: 7
    Dernier message: 08/04/2004, 09h21
  3. Probl�me avec BitBlt
    Par Gunadorio dans le forum MFC
    R�ponses: 4
    Dernier message: 22/07/2003, 18h52
  4. [appli][Java2D]Pb scintillement Animation
    Par ddams dans le forum 2D
    R�ponses: 2
    Dernier message: 25/04/2003, 11h57
  5. [Kylix] Aide sur BitBlt
    Par mic006 dans le forum EDI
    R�ponses: 1
    Dernier message: 10/12/2002, 22h54

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