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);
}
Magicalement
Nono.