关于Win32API中的MAKELONG

Win32API中有一个MAKELONG函数,其实是一个宏,其介绍如:

 

MAKELONG macro creates an unsigned 32-bit value by concatenating two given 16-bit values.

 

DWORD MAKELONG(
  WORD wLow, // low-order word of long value
  WORD wHigh // high-order word of long value
);

大概是将两个16位数值连接成一个32位无符号数值。

 

在很多地方,有用到例如 (Delphi语法):

 

var

li_row : Integer;

l_row : wparam;

begin

li_row := 1000;                                                                 // 例如要滚动到1000行

l_row := MAKELONG(SB_THUMBPOSITION, li_row);          // 转换,如果不转换,是滚动不了,API识别不了。

SendMessage(mle_record, WM_VSCROLL, l_row, 0);       // 滚动到 mle_record 的 li_row 行

end;

 

可是在Win32汇编里面,却发现没有这个东西,经过简单试了一下,发现

 

MAKELONG(SB_THUMBPOSITION, li_row) 其实是相当于 li_row * 65536 + 4

 

这下好了,在Win32汇编里面也可以使用这样的公式来代替 MAKELONG 宏。

 

顺便把整理的写下来吧,如下:

 

    xor  esi,esi
    mov  esi,li_row
    inc  esi
    mov  li_row,esi
    mov  eax,li_row
    mov  ecx,65536D
    mul  ecx
    mov  li_row,eax
    xor  esi,esi
    mov  esi,li_row
    add  esi,4D
    mov  li_row,esi
    invoke SendMessage,mle_record,WM_VSCROLL,li_row,0

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值