Preventing inadvertant drag and drop | CodeGuru

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 – […]

Written By
CodeGuru Staff
CodeGuru Staff
Aug 6, 1998
1 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More




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;
CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.