Déplacer Bitmap à la souris

Signaler
Messages postés
527
Date d'inscription
vendredi 14 septembre 2001
Statut
Membre
Dernière intervention
6 octobre 2008
-
Messages postés
1
Date d'inscription
mardi 13 décembre 2011
Statut
Membre
Dernière intervention
14 décembre 2011
-
Bonjour,
Je souhaiterais afficher une (grande) image bmp dans une fenêtre de taille fixe. A chaque fois que l'utilisateur presse le bouton gauche, le maintient appuyé et bouge la souris, l'image se déplace dans la fenêtre en suivant la souris.
J'arrive à afficher l'image, à récupérer les coordonnées de la souris mais le gestionnaire d'évènements OnLButtonDown refuse obstinément de fonctionner.

Cstring m_strModele est le path de l'image
int x,y sont les coordonnées où l'on affiche l'image (voir bitBlt). Variables membres de la classe CCalibrate

Code:

void CCalibrate::OnPaint() /* CCalibrate est la classe de la boite de dialogue */
{
CPaintDC dc(this); /* device context */
CConfigQCMDlg *pWnd=(CConfigQCMDlg*)GetParent(); /* récupération de la fenêtre parente */
CCalibrate *cWnd=(CCalibrate*)GetActiveWindow(); /* récupération de la fenêtre active */
if(cWnd) /* si la fenêtre enfant existe */
{
if(pWnd->m_strModele!="") /* si le chemin du bitmap existe */
ShowBitmap(&dc,pWnd,cWnd); /* on l'affiche (voir ci dessous) */
}
}

void CCalibrate::ShowBitmap(CPaintDC *pdc, CWnd *pWnd, CWnd *cWnd)
{
BITMAPp bm;
CBitmap* pOldBitmap;
CDC dcMem;
CRect lRect;
CCalibrate *lpWnd=(CCalibrate*)cWnd;
lpWnd->m_bitmap.GetBitmap(&bm);
dcMem.CreateCompatibleDC(pdc);
pOldBitmap=(CBitmap*)dcMem.SelectObject(lpWnd->m_bitmap);
GetClientRect(lRect);
lRect.NormalizeRect();
pdc->BitBlt(x,y,bm.bmWidth,bm.bmHeight,&dcMem,0,0,SRCCOPY);
}


Jusque là, pas de problème. Mais ensuite que faire pour :

Code:

void CCalibrate::OnLButtonDown(UINT nFlags, CPoint point)
{
x=point.x; /* déplacement des coordonnées d'affichage */
y=point.y; /* de l'image en fonction de la souris */
UpdateData(FALSE);
CDialog::OnLButtonDown(nFlags, point);
}


Faire un appel à OnPaint() ne fonctionne pas...
Merci d'avance
J'allais oublier : Visual C++ 6.0 sous Win98

Optimiser, c'est bien, déboguer c'est mieux

2 réponses

Messages postés
527
Date d'inscription
vendredi 14 septembre 2001
Statut
Membre
Dernière intervention
6 octobre 2008
3
C bon j'ai trouvé, il fallait utiliser les méthodes Invalidate() et UpdateWindow()

Optimiser, c'est bien, déboguer c'est mieux
Messages postés
1
Date d'inscription
mardi 13 décembre 2011
Statut
Membre
Dernière intervention
14 décembre 2011

j'ai le meme problèème que vous, aidez moi svp!!!!!!!!!sos