Использование Esc для отмены drag'n'drop
Все просто, как 123*34: перехват сообщения WM_KEYDOWN
в виртуальном методе PreTranslateMessage(). Надо только
сделать еще одну вещь, чтобы это работало на 100%:
вызвать SetFocus() в Вашем обработчике WM_LBUTTONDOWN.
Если дерево не имеет фокуса когда начинается
операция drag'n'drop, оно вообще не получает фокуса и
сообщение WM_KEYDOWN не приходит:
BOOL CTreeCtrlX::PreTranslateMessage(MSG* pMsg)
{
if( pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_ESCAPE
&& m_bLDragging)
{
m_bLDragging = 0;
CImageList::DragLeave(NULL);
CImageList::EndDrag();
ReleaseCapture();
SelectDropTarget(NULL);
delete m_pDragImage;
return TRUE;
}
return CTreeCtrl::PreTranslateMessage(pMsg);
}
Источник: ProtoSphere
|