windows - lparam 和 wparam 在这个特定的代码示例中是如何工作的?
问题描述
我正在阅读 Microsoft 的一些编码示例。并被这个组合的关键部分弄糊涂了。
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_SYSKEYDOWN:
if (wParam == VK_RETURN && (lParam & 0x60000000) == 0x20000000)
{
//Do something
}
}
}
这是我不明白的,这段代码是关于在按 Alt+Enter 时在全屏和窗口之间切换应用程序。我知道 WM_SYSKEYDOWN 正在按住 Alt,而 VK_RETURN 正在按 Enter。因此,当它们放在一起时,这意味着在按住 Alt 的同时按 Enter,但是这两个参数是如何工作的呢?为什么 Enter 在 wParam 中,右边的 lParam 部分是什么意思?lParam的值代表什么?请帮忙。
我还有一件事想问。
为什么它使用0x60000000?它是一个 31 位,以 2 个“1”开头,后跟 29 个“0”。从 tkausl 提供的文档来看,WM_SYSKEYDOWN 的第 31 位始终为 0,因此使用“&”运算符,输出应该不可能在该位有“1”,所以为什么不直接使用 0x20000000 应该给出完全相同的结果?
解决方案
推荐阅读
- laravel - 脚本@php artisan package:discover --ansi 处理返回的自动加载转储后事件,错误代码为-1073741819
- javascript - 组件不处理空道具
- sql - 数据透视表查询问题。我在 django 中使用它作为 postgres 数据库的原始查询
- android - 如何为 RecyclerView 创建自定义适配器?
- javascript - Fullcalendar - 单击事件多个资源时如何获取单个资源
- python - 在 Python3 路径中使用 var 的问题 - EOF ERROR
- excel - 将美国日期格式转换为英国日期格式
- java - Flink Tumble Window 触发时间
- c# - 用于非 Web 项目的 Ninject InRequestScope
- sql-server - 在 View SQL server 中分组