gpt4 book ai didi

delphi - MOUSE_WHEEL 增量始终为正

转载 作者:行者123 更新时间:2023-12-03 14:43:25 27 4
gpt4 key购买 nike

我正在尝试使用 Delphi 7 中的 TApplicationEvents.OnMessage 事件检测鼠标滚轮的移动(按下 CTRL 键时)。这是我正在使用的代码:

if Msg.message = WM_MOUSEWHEEL then begin
if Word(Msg.wParam) = MK_CONTROL then begin
Edit1.Text := IntToStr(HiWord(Msg.wParam));
if HiWord(Msg.wParam) < 0 then begin
IncZoom;
end else begin
DecZoom;
end;
end;
end;

根据 MSDN 资源 ( http://msdn.microsoft.com/en-us/library/windows/desktop/ms645617(v=vs.85).aspx ),(Msg.wParam) 的 HiWord 值为负表示滚轮已向后移动,朝向用户。

问题是,当轮子向后移动时,我从未收到负值。当我向后滚动时,我得到的值为 120。当我向前滚动时,我得到的值为 65416。

我做错了什么?

最佳答案

HiWord 返回 Word这是一个无符号 16 位整数。您链接的文档指出,

Use the following code to get the information in the wParam parameter:

  fwKeys = GET_KEYSTATE_WPARAM(wParam); 
zDelta = GET_WHEEL_DELTA_WPARAM(wParam);

其中 GET_WHEEL_DELTA_WPARAM 在“winuser.h”中定义如下:

#define GET_WHEEL_DELTA_WPARAM(wParam)  ((short)HIWORD(wParam))

正如您所看到的,高位字被类型转换为SHORT 作为 windows data type是一个 16 位有符号整数,对应于 Smallint在德尔福。所以你可以像这样转换它:

if Smallint(HiWord(Msg.wParam)) < 0 then begin

关于delphi - MOUSE_WHEEL 增量始终为正,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18811057/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com