From c0174806a7c59cdbac1cd941d66e844e55829444 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Ankarstr=C3=B6m?= Date: Tue, 2 Aug 2022 20:40:24 +0200 Subject: Double-click dragger to reset. One cannot use WM_LBUTTONDBLCLK here, because it relies on WM_LBUTTONDOWN being passed to the default message handler. --- c/layout.cpp | 3 +++ c/layout.h | 28 +++++++++++++++++++++++----- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/c/layout.cpp b/c/layout.cpp index 77aa88e..de1f1f7 100644 --- a/c/layout.cpp +++ b/c/layout.cpp @@ -55,6 +55,9 @@ void Dragger::Drag(const int, const int y) { RECT rrDlv; require(GetRelativeRect(g_dlv->hWnd, &rrDlv)); + + if (y < Dpi(50) || y > rrDlv.bottom-Dpi(20)) return; + int h; h = rrDlv.bottom-y; g_dlv->SetHeight(h); diff --git a/c/layout.h b/c/layout.h index 82189fb..5ea9c2b 100644 --- a/c/layout.h +++ b/c/layout.h @@ -4,6 +4,7 @@ #include #include "common.h" +#include "datalistview.h" void UpdateLayout(int w = 0, int h = 0); @@ -14,22 +15,39 @@ struct Dragger private: bool InDragArea(int x, int y); bool IsDown(); + bool IsDouble(); void Drag(int x, int y); bool m_bActive = false; + long m_time = 0; }; +inline bool Dragger::IsDouble() +{ + const long time = GetMessageTime(); + const bool dbl = time-m_time <= static_cast(GetDoubleClickTime()); + m_time = time; + return dbl; +} + +inline bool Dragger::IsDown() +{ + return GetKeyState(VK_LBUTTON) & 0x8000; +} + inline bool Dragger::HandleDown() { extern HWND g_hWnd; POINT pt; require(GetRelativeCursorPos(g_hWnd, &pt)); if (!InDragArea(pt.x, pt.y)) return false; - return m_bActive = true; -} -inline bool Dragger::IsDown() -{ - return GetKeyState(VK_LBUTTON) & 0x8000; + if (IsDouble()) { + extern DataListView* g_dlv; + g_dlv->SetHeight(0); + UpdateLayout(); + return false; + } else + return m_bActive = true; } inline bool Dragger::HandleMove() -- cgit v1.2.3