windows - windows操作系统如何确定应该将消息发布到哪个窗口
问题描述
问题:
假设我有一个带有主窗口和子窗口的进程。当我使用键盘键入时,操作系统如何确定要向其发送 WM_KEYDOWN 消息的 HWND?
我知道事件循环和函数 GetMessage、TranslateMessage 和 DispatchMessage,但我不明白如何在 MSG 结构中设置 hwnd 字段。
例子:
使用 Spy++ 我看到有时子窗口会收到 WM_KEYDOWN 消息,有时会收到父窗口。
在 winforms 中,具有焦点的文本框接收消息。但是在其他 UI 中,消息会跳过子窗口并直接发布到主窗口。
解决方案
输入被发送到具有焦点的窗口
根据 MSalters 的评论:
GITHREADINFO结构包含变量:
HWND hwndFocus;
Type: HWND
A handle to the window that has the keyboard focus.
这是默认行为。如果程序将消息转发到另一个窗口,则该行为是由开发人员实现的。
检测和处理输入的方法有很多,但标准方法是使用消息队列。您可能会发现程序在没有焦点的情况下检测输入,这可能是因为它们使用了另一种读取输入的方法,例如 GetKeyboardState()。
推荐阅读
- html - 调整窗口大小时,我需要将 div 移到左侧
- javascript - 整个打字稿界面的后备?
- office365 - Microsoft Graph - 我们是否需要特定的 Office365 许可证才能使用 Webhooks?
- javascript - Java Script 排序算法可视化工具
- java - 不要在 CloudFormation 中删除堆栈时为 Rds DbInstance 创建快照
- python - 使用 Python3 设置标准输出 UTF8 编码
- java - java - 如何使用优先级队列将arraylist转换为java中的最大堆
- kubernetes - 如何在 Google Kubernetes 上添加 SSL/TLS 证书
- fiware-orion - FIWARE Orion:为什么实体类型是不可变的?
- azure-devops - Where are the definitions for Azure Boards work item types?