【问题标题】:Best way to make mouse clicks not pass through disabled components?使鼠标单击不通过禁用组件的最佳方法?
【发布时间】:2011-10-10 22:09:48
【问题描述】:

我正在为我的应用程序使用常见的 Windows 控件,例如“按钮”和“编辑”。在某些情况下我想禁用组件,所以我使用EnableWindow 函数使组件看起来被禁用并且不接收事件。

然而,问题在于被禁用的组件不仅会阻止鼠标点击事件 - 而是将它们传递给它下面的组件。有什么办法可以防止鼠标点击事件通过禁用的组件?或者,一种简单的方法来检查这种情况并丢弃这些事件?

我想在顶部制作透明的窗户,但对于看起来如此微不足道的东西来说,这听起来有点太复杂了。我还考虑在接受事件之前对每个容器的子级鼠标坐标进行命中测试。 有没有更好的办法?我的 WndProc 中已经有一个自定义区域(我对按钮类进行了子类化)来捕获鼠标按钮事件(如果有帮助的话)。

提前致谢!

【问题讨论】:

    标签: windows winapi mouse mouseevent


    【解决方案1】:

    来自EnableWindow documentation

    当输入被禁用时,窗口不接收鼠标点击和按键等输入。

    所以根据定义,当窗口被禁用时,它不会接收鼠标点击。您看到的是预期的预期行为,我认为没有任何方法可以改变它。

    我不确定你为什么要训练你的用户点击被禁用的东西(每个其他 Windows 应用程序都会忽略这些点击,所以你训练你的用户对你的应用程序或地球上所有其他应用程序),但如果你真的想支持这一点,最简单的方法可能是将按钮放在与按钮大小完全相同的面板中。

    【讨论】:

    • 在我的应用程序中单击窗口会执行某些操作,如果用户不小心单击了按钮,这将是意想不到的。但是,将按钮包含在面板中是一个不错的解决方案:)
    猜你喜欢
    • 2021-04-05
    • 2010-10-26
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    相关资源
    最近更新 更多