Preventing inadvertant drag and drop


Have you ever had the experience that you clicked on the Explorer to bring it to the foreground and the directory got moved. This happens if the mouse moves before the mouse button is released. Many of the users of my program had this experience and heres what I did to prevent inadvertant drag - drop. I basically imposed the restriction that after pressing the mouse button the cursor should remain on the item for a few milliseconds before dragging can be initiated.
 

Step 1: Declare member variable

Add a member variable to hold the tick count when the user presses the mouse button.
 
protected:
        DWORD   m_dwDragStart;


Step 2: Define a constant to specify the delay

We define DRAG_DELAY with a value 80. You might want to use a different value.
#define DRAG_DELAY 80


Step 3: Add handler for WM_LBUTTONDOWN

The only interesting thing we do here is initialize the m_dwDragStart variable. GetTickCount() returns the number of milliseconds since Windows was started.
 
void CTreeCtrlX::OnLButtonDown(UINT nFlags, CPoint point) 
{
        m_dwDragStart = GetTickCount();
        CTreeCtrl::OnLButtonDown(nFlags, point);
}


Step 4: Check for sufficient delay in TVN_BEGINDRAG handler

Insert the following code right at the beginning of the TVN_BEGINDRAG handler. In a previous section we have used the name OnBeginDrag() for the handler function. If the delay since the user pressed the left mouse button is not sufficient, we not initiate the drag and drop process.
 
        // This code is to prevent accidental drags.
        if( (GetTickCount() - m_dwDragStart) < DRAG_DELAY )
                return;



Comments

  • Title

    Posted by Legacy on 04/09/2002 12:00am

    Originally posted by: Name

    Comment

    Reply
  • h

    Posted by Legacy on 04/09/2002 12:00am

    Originally posted by: h

    h

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Live Event Date: November 20, 2014 @ 2:00 p.m. ET / 11:00 a.m. PT Are you wanting to target two or more platforms such as iOS, Android, and/or Windows? You are not alone. 90% of enterprises today are targeting two or more platforms. Attend this eSeminar to discover how mobile app developers can rely on one IDE to create applications across platforms and approaches (web, native, and/or hybrid), saving time, money, and effort and introducing apps to market faster. You'll learn the trade-offs for gaining long …

  • Live Event Date: October 29, 2014 @ 11:00 a.m. ET / 8:00 a.m. PT Are you interested in building a cognitive application using the power of IBM Watson? Need a platform that provides speed and ease for rapidly deploying this application? Join Chris Madison, Watson Solution Architect, as he walks through the process of building a Watson powered application on IBM Bluemix. Chris will talk about the new Watson Services just released on IBM bluemix, but more importantly he will do a step by step cognitive …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds