cs_said01
Messages postés8Date d'inscriptionmercredi 15 décembre 2004StatutMembreDernière intervention24 avril 2006
-
1 avril 2005 à 22:34
magic_Nono
Messages postés1878Date d'inscriptionjeudi 16 octobre 2003StatutMembreDernière intervention16 mars 2011
-
8 avril 2005 à 08:38
Bonjour,
Au momoent d'un drag&Drop depuis l'explorateur windows vers ma treeview, je souhaite détéctcter le présence de la souris sur la treeView juste avant que l'utilisateur ne relache le bouton gauche .
Autrement dit l'événement juste avant le WM_DROPFILES.
Détail:
je travaille avec VC++ 6 sous xp pro, et j'ai une appli qui fait fonction d'explorateur windows(fonctionnalité basic avec 1 treectrl et 1 listctrl), je reussi bien mon drag drop sous WM_DROPFILES.
mon probleme est que mon mousemove detecte tous les mouvements de ma souris sur la treeview sauf en cas d'un drag&drop depuis l'explorateur. C'est à ce niveau là que je m'interesse au Drag (sans jeu de mot bien sûr)
j'ai fait le tour du net, il me semble que pour le dot net : C# entre autre l'evénement soit :
systeme.windows.forms.Dragevent
mais pour VC++ je me demande s'il existe 1 événement, 1 astuce ou 1 api qui me.
magic_Nono
Messages postés1878Date d'inscriptionjeudi 16 octobre 2003StatutMembreDernière intervention16 mars 2011 2 avril 2005 à 12:28
Bj
récupère les evts et la position de la souris
je l ai fais dans une ListBox et ça donne qqch comme ça:
(fait avec VC6)
void BListBox::OnLButtonDown(UINT nFlags, CPoint point)
{
//précond: liste à sélection unique
CListBox::OnLButtonDown(nFlags, point);
if(!m_bWithDrag || m_bCaptured)
return;
UpdateData(true);
int iSel=GetCurSel(); //IndexFromPoint(point);
//err possible : si liste à sélection multiple
if(iSel == LB_ERR)
return;
m_bCaptured=TRUE;
m_ptMouseDown=point;
}
void BListBox::OnLButtonUp(UINT nFlags, CPoint point)
{
if(m_bWithDrop/*&& m_bCaptured*/)
{
m_bCaptured=false;
/// algo : SI la fenetre mère si elle accepte le drag-and-drop.
if(GetParent()->SendMessage(msgBListBoxQueryDrop , (WPARAM) GetDlgCtrlID(), (LPARAM) this))
/// algo : dire de faire le drag-n-drop (en attendant la fin de cette opération
if(GetParent()->SendMessage(msgBListBoxDoDrop , (WPARAM) GetDlgCtrlID(), (LPARAM) this))
m_bCaptured=false;
else
BVisuel::alerte("problème lors du déposé de l'élément traîné.");
}
CListBox::OnLButtonUp(nFlags, point);
}
void BListBox::OnMouseMove(UINT nFlags, CPoint point)
{
if(m_bCaptured)
/// algo : si le déplacement est suffisant pour etre considéré pour un drag
if((abs(point.x - m_ptMouseDown.x) > 3) || (abs(point.y - m_ptMouseDown.y) > 3))
{
ReleaseCapture();
m_bCaptured=FALSE;
GetParent()->PostMessage(msgBListBoxBeginDragDrop , (WPARAM) GetDlgCtrlID(), (LPARAM) this);
}
CListBox::OnMouseMove(nFlags, point);
}
cs_said01
Messages postés8Date d'inscriptionmercredi 15 décembre 2004StatutMembreDernière intervention24 avril 2006 6 avril 2005 à 21:09
salut,
Désolé je suis parti sur autre chose mais revoilou....
En fait je crains ne pas m'être bien expliqué :
Dans ta réponse, tu indique les événements OnLButtonDown et OnLButtonUp
or ds mon probleme ces 2 événements ont eu lieu au niveau de l'explorer Windob.
En bref, c'est le moment où la fameuse fléche arrive sur la TreeCtrl de ma
Dlg que je veux intercepter et donc là ma question devient plus précise :
est-ce que je peux implémenter pour ma TreeCtrl les événements suivants :
OnDragEnter, OnDragOver, OnDragLeave, OnDrop.
Je sais par ailleurs que pour une CView c'est possible comme car il y'a l'exemple
[javascript:alink_1.Click() OCLIENT] de la MSDN.
Il y'a certainement quelque chose qui m'échappe mais laquelle :
thats the QUESTION?!!!
@+
NB. Et encore merci pour ton aide.
cs_said01
Messages postés8Date d'inscriptionmercredi 15 décembre 2004StatutMembreDernière intervention24 avril 2006 8 avril 2005 à 00:16
Justement c'est ce que je ne comprends pas non plus...
tous mes OnMouseMove je les recupere sans pb sauf au moment d'1 D&Drop depuis
l'explorateur
en fait si tu as VS c++ 6 sous la main, ça prend 2 mn pour t'en rendre compte !?
avec appwizard je genere une appli DialogBox , ds la template je mets 1 treectrl
et enfin je crée le OnMouseMove où je mets 1 point d'arrêt,
j'execute mon appli et ensuite je lance l'explorateur que je reduis à mi hauteur de ma dialogBox
et là alors même que ma fenêtre est inactive, si je déplace ma souris sur la treectrl sans appuyer
sur le bouton gauche : mon OnMouseMove fonctionne sans probleme
par contre si je "drag" un fichier ou 1 rep depuis l'explorateur et je pointe ma treectrl,
il ne se passe rien et voilà....
Si tu as du nouveau je serai vraiment heureux de l'apprendre.
Dans toue les cas merci pour tes réponses. @+
Vous n’avez pas trouvé la réponse que vous recherchez ?