如何在 MFC 中的对话框上阻止鼠标输入
Posted
技术标签:
【中文标题】如何在 MFC 中的对话框上阻止鼠标输入【英文标题】:How to block mouse inputs on dialog box in MFC 【发布时间】:2015-09-15 09:14:43 【问题描述】:我有一个基于对话框的 MFC 应用程序。我有一个隐藏的编辑控件,它具有读取 USB 连接的扫描仪输入的默认焦点。对话框上的所有其他控件都是只读的。但是当用户单击任何控件时,隐藏的编辑控件会失去焦点。我怎样才能解决这个问题,让这个隐藏的编辑控件即使在用户点击任何地方的对话框后也能获得焦点。
【问题讨论】:
当您想让用户选择/复制控件中的文本时,可以使用只读控件,否则控件通常会被禁用——您可以禁用这些其他控件吗? 你想阻止输入?你有没有考虑打电话给BlockInput?除此之外,如果控件是只读的,用户将理解他们可以阅读和复制内容。如果这破坏了您的应用程序,您可能希望重新编写已有的恶意代码。除此之外,禁用的窗口不会获得输入。但实际上,您绝对应该重新考虑您的设计。当前的实施与辅助技术配合得很好吗? @Edward Clements 我的所有控件都是只读的,但我无法禁用它们。 @IInspectable 使用 BlockInput() 不仅阻止了我的应用程序的输入,还阻止了窗口的所有输入。 为什么隐藏的编辑控件必须有焦点才能读取 USB? 【参考方案1】:嗯,MFC 应用程序中的大多数鼠标消息都是张贴而不是发送的。因此,您可以在 CDialog 派生类中覆盖 PreTranslateMessage(MSG*),然后通过返回 TRUE 来阻止消息分发或返回 FALSE 以允许正常处理来吃掉这些消息。
BOOLCMyDlg::PreTranslateMessage(MSG* pMsg)
switch (pMsg->message)
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
///etc, etc
// might want other tests
return TRUE;
break;
return CDialog::PreTranslateMessage(MSG* pMsg);
【讨论】:
以上是关于如何在 MFC 中的对话框上阻止鼠标输入的主要内容,如果未能解决你的问题,请参考以下文章