Видя, как MAKELONG принимает два параметра типа Word (16 бит), а Msg.Message и Msg.HWnd являются 32-битными, неудивительно, что вы получаете ошибки проверки диапазона. В общем, сообщения окна <8000 $, так что я сомневаюсь, что значение является проблемой. Тем не менее, интегральное значение HWnd может быть по всей карте и, конечно, довольно часто> $ FFFF. Из-за этого приведенный выше код на самом деле не имеет смысла, за исключением того, что он выглядит как давний артефакт из 16-битной версии.
Поскольку проверка диапазона включена, это четко подчеркивает тот факт, что приведенный выше код нуждается в некотором переосмыслении. В Win32 вы больше не можете вписать значение сообщения и дескриптор окна в 32 бита.
Я надеюсь, что дал вам несколько советов о том, как действовать. Без учета кода, который вызывает эту функцию, невозможно предложить альтернативную реализацию.