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

Windows Discussion :

Travailler avec les bitmaps et les classe


Sujet :

Windows

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2009
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 87
    Points : 77
    Points
    77
    Par défaut Travailler avec les bitmaps et les classe
    Bonjour,

    Je souhaite dans un WM_MOUSEMOVE travailler sur un HBITMAP stocké en mémoire (hérité d'un objet) que j'ai préalablement mis le fond en blanc, et tracées toutes les figures stocké en mémoire (dans un vector membre de l'objet).

    Ensuite, je souhaite l'affiché dans une zone du client. Je ne sais pas trop comment m'y prendre, je débute en dessin API.


    J'ai mis le code de la fonction si ça peux vous aidez et donc héhé, m'aidez lol

    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    
    	
    	HDC hdc				= GetDC(NULL)					;
    	HDC hdcMem			= CreateCompatibleDC(NULL)		;
    	HBITMAP hOldMemBmp	= (HBITMAP) SelectObject(hdcMem, m_hBitmap);
    
    
    	RECT rcClip; GetClipBox(hdc, &rcClip);
    
    	m_SecondPoint.x = (short) LOWORD(lParam);
    	m_SecondPoint.y = (short) HIWORD(lParam);
    	GetClipBox(hdcMem, &rcClip);
    
    
    		ClientToPixel(m_SecondPoint);						// Surtout ne pas oublier de convertir en coordonné du dessin
    
    		if((GetCapture() == m_hWnd)&&(wParam & MK_LBUTTON))// Si le bouton gauche est enfoncé
    		{
    			if(m_pTempElement)	//Si un élément temporaire est défini en vue de sa création
    			{	
    				if(CURVE == this->GetElementType())   // Is it a curve?
    				{ 	SetROP2(hdcMem,R2_COPYPEN);
    					(static_cast<ECurve*>(m_pTempElement))->DrawSegment(hdcMem,m_SecondPoint);	// We are drawing a curve
    					(static_cast<ECurve*>(m_pTempElement))->AddSegment(m_SecondPoint);		// so add a segment to the existing curve
    					goto LibèreDC;
    				}
    				
    				m_pTempElement->Draw(hdcMem);		// Redraw the old element so it disappears from the view
    				delete m_pTempElement;			// Delete the old element
    				m_pTempElement = 0;				// Reset the pointer to 0
    			}
    			m_pTempElement = CreateElement();	// Créer un element mais temporaire tant que l'utilisateur ne lache pas le button pour figer l'élément
    			m_pTempElement->Draw(hdcMem);			// Draw the element
    			goto LibèreDC;
    		}
    		else    // Si nous ne dessinons pas alors mise en surbrillance sous le pointeur d'un élément existant
    		{	
    			VElement* pCurrentSelection = SelectElement(m_SecondPoint);// Existe-t-il un élément sous le pointeur?
    
    			if(pCurrentSelection!=m_pSelected)			// Si l'élément sous le pointeur est différent que l'ancien élément?(soit l'ancien ou un nouveau)
    			{	if(m_pSelected)							// Si existance de l'ancien élément, est (toujours) de la couleur "surbrillance"
    				{	m_pSelected->Draw(hdcMem,m_pSelected);	// En le dessinant de la couleur surbrillance, Nous effaçons ses pixels (NOTXORPEN)
    					m_pSelected->Draw(hdcMem);				// L'élément est dessiné de sa plume, son épaisseur et sa couleur d'origine
    
    				}
    				m_pSelected = pCurrentSelection;        // Save elem under cursor
    				if(m_pSelected)                         // Is there one?
    				{	
    					
    					m_pSelected->Draw(hdcMem);
    					m_pSelected->Draw(hdcMem,m_pSelected);// Yes, so get it redrawn
    
    					SetWindowText(m_hWnd/*this->m_pMainFrame->GetHSelf()*/,tst);
    
    				}
    				goto LibèreDC;
    			}
    		}
    	}
    
    return;
    LibèreDC:
    
    	Counter++;
    	if(Counter>20)
    		Counter=0;
    
    
    	SelectObject(hdcMem, hOldMemBmp);
    	DeleteDC(hdcMem);
    	ReleaseDC(m_hWnd,hdc);
    	
    	/**/HDC hDC = GetDC(m_hWnd);
    	HDC hDCSrc = CreateCompatibleDC(hDC);
    	hdcMem = CreateCompatibleDC(hDC);
    
    	// Bitmap couleur (hDCMem si monochrome)
    	HBITMAP hBitmap    = CreateCompatibleBitmap(hDC,GetDocSize().cx,  GetDocSize().cy/* 100, 100*/);
    	
    	HBITMAP hOldBmpSrc = (HBITMAP)SelectObject(hDCSrc,m_hBitmap);
    	HBITMAP hBitmapOld = (HBITMAP)SelectObject(hdcMem, hBitmap);
    
    
    	BitBlt(hDCSrc,0,0,  GetDocSize().cx, GetDocSize().cy, hdcMem,0, 0,/* GetDocSize().cx,  GetDocSize().cy,/**/SRCCOPY);
    	BitBlt(hDC, 0,0,  GetDocSize().cx, GetDocSize().cy, hDCSrc,0, 0,/* GetDocSize().cx,  GetDocSize().cy,/**/SRCCOPY);
    
    	SelectObject(hDCSrc, hOldBmpSrc);	// Release
    	SelectObject(hdcMem, hBitmapOld);
    
    	DeleteDC(hdcMem);
    	DeleteDC(hDCSrc);
    	ReleaseDC(m_hWnd, hDC);
    Toute aide est la bienvenue, merci.

  2. #2
    Membre régulier
    Inscrit en
    Septembre 2009
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 87
    Points : 77
    Points
    77
    Par défaut
    Même pas un conseil?

    Bon, je ne sais pas pourquoi, suis-je peut être de mauvaise fois, cette section de forum me semble une voie de garage.

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2009
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 87
    Points : 77
    Points
    77
    Par défaut
    Au bout d'une semaine, j'ai trouvé la méthode à mon problème; surveiller les zones de clipping.

    C'est la zone de dessin du contexte de périphérique.


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

Discussions similaires

  1. [DOM] Comment travailler avec un xml dont les noms de noeud sont identique ?
    Par eucaly dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 06/02/2013, 17h04
  2. Réponses: 4
    Dernier message: 02/10/2012, 14h20
  3. Est-il possible de travailler avec des index dans les checkboxes ?
    Par beegees dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 04/12/2008, 12h31
  4. [VB6]Enumérer les attributs et les méthodes d'une classe
    Par HPJ dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 04/05/2004, 18h34

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