首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WParam的“低字”和“高字”位置在64位代码中会改变吗?

WParam的“低字”和“高字”位置在64位代码中会改变吗?
EN

Stack Overflow用户
提问于 2014-06-16 14:45:21
回答 2查看 2.6K关注 0票数 4

我正在尝试处理WM_XBUTTONUP消息,它来自一些鼠标上的额外鼠标按钮。SDK文档指出,wParam的低字保存虚拟密钥信息,高字保存按下哪个按钮。我理解32位代码是如何工作的,但是在64位代码中,wParam是一个64位无符号整数。我见过使用Lo(msg.wparam)和Hi(msg.wparam)的代码。这段代码是否仍然在64位内工作,还是某些东西必须改变?换句话说,“高字”的定义是否由32位改为64位?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-16 16:03:27

任何使用Lo()Hi()的代码都是错误的,因为这些函数返回Word的低阶和高阶字节。

MSDN 文档如下所示:

使用以下代码获取wParam参数中的信息: fwKeys = GET_KEYSTATE_WPARAM (wParam);fwButton = GET_XBUTTON_WPARAM (wParam);

这些宏在头文件中定义为:

代码语言:javascript
复制
#define GET_KEYSTATE_WPARAM(wParam)     (LOWORD(wParam))
#define GET_XBUTTON_WPARAM(wParam)      (HIWORD(wParam))

反过来,LOWORDHIWORD的定义如下:

代码语言:javascript
复制
#define LOWORD(_dw)     ((WORD)(((DWORD_PTR)(_dw)) & 0xffff))
#define HIWORD(_dw)     ((WORD)((((DWORD_PTR)(_dw)) >> 16) & 0xffff))

这些宏被设计成在编译成32位和64位代码时执行正确的任务。

在Delphi中,Windows单元包含LoWordHiWord的转换,它们执行相同的任务,尽管实现方式有些不同。因此,我将实现以下功能:

代码语言:javascript
复制
function GET_KEYSTATE_WPARAM(wParam: WPARAM): Word; inline;
function GET_XBUTTON_WPARAM(wParam: WPARAM): Word; inline;

....

function GET_KEYSTATE_WPARAM(wParam: WPARAM): Word;
begin
  Result := LoWord(wParam);
end;

function GET_XBUTTON_WPARAM(wParam: WPARAM): Word;
begin
  Result := HiWord(wParam);
end;
票数 3
EN

Stack Overflow用户

发布于 2014-06-16 15:09:37

你应该给我看看代码。LoHi分别返回16位值的低字节和高字节,因此它们也不能处理32位代码。也许你指的是LoWordHiWord

在64位代码中,可以将64位整数值键入到Int64Rec

case Int64Rec(Msg.WParam).Lo of ...

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24246317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档