问题标签 [mousecapture]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
642 浏览

c# - How To Let A Grid Capture The Mouse, But Still Allow It's Children To Handle Click Events

Sorry in advance if the title is confusing. Here's the situation. I have a grid called grdFilters. This grid has a series of CheckBoxes within it (one per row). Normally this grid is hidden. But I wanted it to show up when prompted (on button click) and leave when the user clicks somewhere other than the grid. To handle outside control mouse clicks I tried first capturing the mouse as such:

The problem is that while the Filters grid has captured the mouse, none of the grids children (the Check Boxes) can be clicked on. I would really like to find a way to detect when the mouse is clicked outside of the grid while still allowing the children of the grid to accept mouse down events. Any help would be greatly appreciated, thanks in advance.

As per request here is some of my Xaml:

The only thing I left out were the Resource Dictionaries and the page definition itself.

0 投票
2 回答
302 浏览

winapi - 绘制光标多重显示(只绘制文本图标) GDI

我在多个显示环境中选择显示器并制作捕获的程序。

并尝试通过在多个显示器中选择 dc 来绘制光标。

我用 bitblt 位图图像绘制光标,效果很好。

但是当我从 createDC 多显示值中选择时,

我正在努力获得其他显示图像。但是没有绘图光标。(其他形式的光标不绘制,只绘制文本光标)

这是我的代码。

我正在使用 Windows 10。

我该如何解决?

任何链接,想法,谢谢。

添加

它不绘制光标....(文本光标除外。)

HDCC = 创建DC(文本(

它绘制光标..

HDCC = 创建DC(文本(

解决了:

现在,我改变了我的算法。

CreateDC(L"Display", NULL, NULL, NULL) 为所有显示器创建 DC,那么您的问题是什么?– 用户 2120666 4 月 22 日 15:37

这条评论很有帮助,但并不友好。(或者我很愚蠢。):(

HDCC 拥有“所有虚拟屏幕”DC。

当我选择了我需要的显示器时,相应地选择并使用了要在虚拟屏幕上捕获的区域。

感谢您的评论!

0 投票
0 回答
57 浏览

c# - ListBox 上的水平自动滚动被阻塞

我想在 wpf 水平列表框中实现项目的橡皮筋选择。原则上它可以工作,除了列表中有许多项目外,当鼠标也移动到控件下方时,程序会长时间冻结甚至永远冻结。这是最简单的重现代码:

和后面的代码:

将鼠标拖动到控件下方时,它会冻结。将 StackPanel 设置为垂直时,一切都很顺利!但不幸的是,它必须是水平的。这是Wpf中的一个怪癖吗?有解决方法吗?我尝试使用 .NET 4.8 而不是 4.6.1 但没有变化。视窗 10 1903 x64

0 投票
1 回答
828 浏览

c# - c# WPF - 如何在不阻止其他控件可点击的情况下识别鼠标点击外部控件

我现在阅读了很多线程并尝试了等等。我不明白。

问题 使用 MouseCapture 时,任何其他控件都没有动作。无法单击某些内容。鼠标悬停时没有突出显示。MouseCaption 阻止了这一点。单击两次是必要的。如何避免这种情况?

基本上 ,我创建了一个自定义自动完成框,它由一个用于自由输入的文本框和一个作为文本块的下拉列表组成,其中包含给定输入的建议结果元素。这很像一个标准的组合框。

从 Combobox 我们知道,当它展开并单击其他地方时,下拉列表会折叠。

我想要与组合框使用的完全相同的行为。

因为我不是第一个这样问的人,所以我尝试了几件事,但没有让它们完全正常工作。

我仍然尝试过但失败了。

  1. 向文本框添加OnLostFocus事件无法识别对不可聚焦元素的任何鼠标单击。
  2. 使用Mous.Caption(this)withPreviewMouseLeftButtonDown接收在窗口上任何位置的任何鼠标点击。
    • 是的,这行得通!我可以折叠我的下拉菜单,再次取消捕获鼠标。
    • 但是:鼠标标题阻止我点击其他 UIElement。复选框和 RadioBoxes 不会被切换。只需将鼠标悬停在复选框或其他任何内容上,就不会再突出显示该元素。相反,我现在需要单击两次以检查文本框。
    • 我想不通,如何解决。
  3. 还有什么不起作用的是,当鼠标捕获事件被触发时,我无法弄清楚点击是在哪里进行的。
    • source以及e.OriginalSource等于我的自定义控件
    • 获取鼠标位置可能是一种选择。但是没有找到我的控件与鼠标位置相关的位置。控件上的任何属性都返回 NaN。
  4. 起初我无法识别PreviewMouseLeftButtonDown和之间的任何区别MouseLeftButtonDown
    • 我认为第一个,当直接释放鼠标捕获时,会将 mouseclick 事件触发到其原始目标,而不再捕获鼠标。它没有。
    • 我是通过使用 Hittest 得到的。是这样吗?

一些代码

自动完成框的 XAML

后面的相关代码:

鼠标按下事件:

编辑

不幸的是,弹出窗口(afaik)不是visualTree的成员。所以 Popup 的 hittest 不起作用。所以我试图让弹出窗口的位置来检查鼠标位置。

正如大家所说,TransformToAncestor 方法将被使用。但这似乎无法正常工作:

以下三个调用确实返回完全相同的点:

这是一个错误吗?

0 投票
1 回答
128 浏览

.net - 如何防止鼠标右键点击改变鼠标捕获控件

这是我在 .NET WinForms 鼠标事件中看到的一个烦恼。要重现,请执行以下操作:

  1. 鼠标左键按下按钮控件。(这会将捕获控件更改为该按钮)
  2. 将鼠标从该按钮上移开。
  3. 在仍然按住鼠标左键的同时,单击鼠标右键。(这会将捕获控件更改为鼠标光标现在所在的位置)
  4. 松开鼠标左键。按钮永远不会收到鼠标向上事件。(鼠标向上事件转到当前的捕获控件。)

我只关心鼠标左键,但是用户不小心按下了右键会阻止鼠标左键事件返回到最初单击的按钮。

一种可能的解决方案是使用MouseLeaveMouseCaptureChanged事件来检测何时从按钮上发生右键单击,并了解捕获控件何时发生更改。我已经尝试过了,而且效果很好。

另一种方法是使用MessageFilters并过滤掉右键事件。但是有些按钮需要右键单击,因此您不想过滤掉所有的右键单击,只针对需要此功能的按钮。

所以我想看看是否有人知道更好的解决方案。如果 Windows 有某种标志来执行以下操作,那就太好了: button1.RightMouseButtonCanChangeMouseCapture = false;

0 投票
1 回答
338 浏览

python - python 上的 user32.GetAsyncKeyState 以捕获键和鼠标点击

上面的代码在按下一次时会产生多次点击结果 如何通过修改上面的程序来获得正确的击键和点击次数?

0 投票
0 回答
49 浏览

c# - 为什么 WPF TextBox 会立即失去鼠标捕获?

我正在尝试制作自己的 wpf TextBox,当它获得焦点时捕获鼠标。我的代码:

但是立即OnGotFocus结束,该OnLostMouseCapture方法被调用,我不知道为什么。但在OnLostMouseCapture两者内部FocusManager.GetFocuseElement(window)Keyboard.FocuseElement返回FocusedTextBox. 如何保持鼠标捕获FocusedTextBox