首页 > 解决方案 > 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 应该给出完全相同的结果?

标签: windowsevent-handlingcontrols

解决方案


推荐阅读