Preventing inadvertant drag and drop
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;
IT Offers
More for Developers
Top Authors
- Voted: 13 times.
- Voted: 11 times.
- Voted: 11 times.
- Voted: 8 times.
- Voted: 8 times.
- Paul Kimmel 214 articles
- Zafir Anjum 120 articles
- Tom Archer - MSFT 83 articles
- Jeffrey Juday 79 articles
- Mark Strawmyer 78 articles