|
@@ -559,22 +559,10 @@ ImGuiKey ImGui_ImplWin32_KeyEventToImGuiKey(WPARAM wParam, LPARAM lParam)
|
|
|
#define DBT_DEVNODES_CHANGED 0x0007
|
|
|
#endif
|
|
|
|
|
|
-// Win32 message handler (process Win32 mouse/keyboard inputs, etc.)
|
|
|
-// Call from your application's message handler. Keep calling your message handler unless this function returns TRUE.
|
|
|
-// When implementing your own backend, you can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if Dear ImGui wants to use your inputs.
|
|
|
-// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application, or clear/overwrite your copy of the mouse data.
|
|
|
-// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application, or clear/overwrite your copy of the keyboard data.
|
|
|
-// Generally you may always pass all inputs to Dear ImGui, and hide them from your application based on those two flags.
|
|
|
-// PS: In this Win32 handler, we use the capture API (GetCapture/SetCapture/ReleaseCapture) to be able to read mouse coordinates when dragging mouse outside of our window bounds.
|
|
|
-// PS: We treat DBLCLK messages as regular mouse down messages, so this code will work on windows classes that have the CS_DBLCLKS flag set. Our own example app code doesn't set this flag.
|
|
|
-#if 0
|
|
|
-// Copy this line into your .cpp file to forward declare the function.
|
|
|
-extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
|
|
-#endif
|
|
|
-
|
|
|
+// Helper to obtain the source of mouse messages.
|
|
|
// See https://learn.microsoft.com/en-us/windows/win32/tablet/system-events-and-mouse-messages
|
|
|
// Prefer to call this at the top of the message handler to avoid the possibility of other Win32 calls interfering with this.
|
|
|
-static ImGuiMouseSource GetMouseSourceFromMessageExtraInfo()
|
|
|
+static ImGuiMouseSource ImGui_ImplWin32_GetMouseSourceFromMessageExtraInfo()
|
|
|
{
|
|
|
LPARAM extra_info = ::GetMessageExtraInfo();
|
|
|
if ((extra_info & 0xFFFFFF80) == 0xFF515700)
|
|
@@ -584,6 +572,18 @@ static ImGuiMouseSource GetMouseSourceFromMessageExtraInfo()
|
|
|
return ImGuiMouseSource_Mouse;
|
|
|
}
|
|
|
|
|
|
+// Win32 message handler (process Win32 mouse/keyboard inputs, etc.)
|
|
|
+// Call from your application's message handler. Keep calling your message handler unless this function returns TRUE.
|
|
|
+// When implementing your own backend, you can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if Dear ImGui wants to use your inputs.
|
|
|
+// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application, or clear/overwrite your copy of the mouse data.
|
|
|
+// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application, or clear/overwrite your copy of the keyboard data.
|
|
|
+// Generally you may always pass all inputs to Dear ImGui, and hide them from your application based on those two flags.
|
|
|
+// PS: In this Win32 handler, we use the capture API (GetCapture/SetCapture/ReleaseCapture) to be able to read mouse coordinates when dragging mouse outside of our window bounds.
|
|
|
+// PS: We treat DBLCLK messages as regular mouse down messages, so this code will work on windows classes that have the CS_DBLCLKS flag set. Our own example app code doesn't set this flag.
|
|
|
+
|
|
|
+// Copy this line into your .cpp file to forward declare the function:
|
|
|
+extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
|
|
+
|
|
|
IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|
|
{
|
|
|
// Most backends don't have silent checks like this one, but we need it because WndProc are called early in CreateWindow().
|
|
@@ -599,7 +599,7 @@ IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT msg, WPARA
|
|
|
case WM_NCMOUSEMOVE:
|
|
|
{
|
|
|
// We need to call TrackMouseEvent in order to receive WM_MOUSELEAVE events
|
|
|
- ImGuiMouseSource mouse_source = GetMouseSourceFromMessageExtraInfo();
|
|
|
+ ImGuiMouseSource mouse_source = ImGui_ImplWin32_GetMouseSourceFromMessageExtraInfo();
|
|
|
const int area = (msg == WM_MOUSEMOVE) ? 1 : 2;
|
|
|
bd->MouseHwnd = hwnd;
|
|
|
if (bd->MouseTrackedArea != area)
|
|
@@ -646,7 +646,7 @@ IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT msg, WPARA
|
|
|
case WM_MBUTTONDOWN: case WM_MBUTTONDBLCLK:
|
|
|
case WM_XBUTTONDOWN: case WM_XBUTTONDBLCLK:
|
|
|
{
|
|
|
- ImGuiMouseSource mouse_source = GetMouseSourceFromMessageExtraInfo();
|
|
|
+ ImGuiMouseSource mouse_source = ImGui_ImplWin32_GetMouseSourceFromMessageExtraInfo();
|
|
|
int button = 0;
|
|
|
if (msg == WM_LBUTTONDOWN || msg == WM_LBUTTONDBLCLK) { button = 0; }
|
|
|
if (msg == WM_RBUTTONDOWN || msg == WM_RBUTTONDBLCLK) { button = 1; }
|
|
@@ -664,7 +664,7 @@ IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT msg, WPARA
|
|
|
case WM_MBUTTONUP:
|
|
|
case WM_XBUTTONUP:
|
|
|
{
|
|
|
- ImGuiMouseSource mouse_source = GetMouseSourceFromMessageExtraInfo();
|
|
|
+ ImGuiMouseSource mouse_source = ImGui_ImplWin32_GetMouseSourceFromMessageExtraInfo();
|
|
|
int button = 0;
|
|
|
if (msg == WM_LBUTTONUP) { button = 0; }
|
|
|
if (msg == WM_RBUTTONUP) { button = 1; }
|