关于Win32API中的MAKELONG

来源:互联网 发布:nba季后赛数据排行榜 编辑:程序博客网 时间:2024/06/07 03:30

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

 

 

 

原创粉丝点击