Как lparam и wparam работают в этом конкретном примере кода c? - PullRequest
0 голосов
/ 29 мая 2020

Я читаю некоторые примеры кодирования от 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. Итак, когда они собираются вместе, это означает нажатие Enter, удерживая Alt, но как работают эти два параметра? Почему Enter находится в wParam и что означает часть lParam справа? Что представляет собой значение lParam? Пожалуйста, помогите.

У меня есть еще один вопрос, который я хотел бы спросить.

Почему он использует 0x60000000? Это 31 бит, начинающийся с 2 "1", за которыми следуют 29 "0". Из документа, предоставленного tkausl, 31-й бит WM_SYSKEYDOWN всегда равен 0, поэтому с оператором «&» не должно быть никакого способа, чтобы выходные данные имели «1» в этом бите, так почему бы просто не использовать 0x20000000, который должен дать точно такой же результат?

...