C++ CLI GUI 事件处理

标签 c++ events click c++-cli mouse

我正在开发 C++ CLI 应用程序,并且在处理事件时遇到一些困难。我想知道单击鼠标按钮时是否可以触发事件。例如,我想检查鼠标是否已移动到下一个方格(仅当他们单击鼠标时)。这意味着如果他们单击方格 1,他们应该能够按住该单击并移动方格 2 和我的程序认识到这一点。

我在鼠标上运行了许多不同的事件,包括“Click”事件,但是按下按钮时,悬停、鼠标进入或鼠标按下事件都不会被触发。 “MouseClick”事件,其作用相同。我尝试仅使用 mouseDown 事件,但这不会让另一个 mouseDown 事件、鼠标输入或悬停事件触发。

缺少检查鼠标位置我不知道我能做什么。我不想进行鼠标位置检查。

如果有人有任何想法,我们将不胜感激。

最佳答案

显然,您需要关注 MouseMove 事件,以便可以看到鼠标移动到另一个方 block 中。大致:

    void panel1_MouseMove(Object^ sender, MouseEventArgs^ e) {
        if ((e->Button & System::Windows::Forms::MouseButtons::Left) == 
                         System::Windows::Forms::MouseButtons::Left) {
            int square = MapPosToSquare(e->Location);
            if (square != currentSquare) {
                currentSquare = square;
                OnSquareClicked(currentSquare);
            }
        }
    }

如果这些“方 block ”实际上是控件,那么您就会遇到不同的问题。您必须在 MouseDown 事件处理程序中将控件的 Capture 属性设置为 false,这样它就不会捕获鼠标。

关于C++ CLI GUI 事件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15994460/

相关文章:

java - Spring Activity 与方面

javascript - 一个元素上有两个监听器 : let only one fire

android - 如何在父 View 中处理 subview 的触摸事件

c++ - 如何进行三个快速排序中位数的最坏情况排列

c++ - 为什么没有 strand::wrap() 等同于 strand::post()?

C++ 类返回具有新地址的引用

Java Swing : How to get TextArea value including the char just typed?

jQuery + stopPropagation : Exclude child element from parent selector

jquery - 在点击事件上加载另一个 javascript 库和脚本?

c++ - 尝试使用 Qt 和 VTK 显示 DICOM 文件时出现未定义的引用问题