TWMVScroll Msg的Pos是SmallInt,如何实现大于32767的pos???Delphi的Bug???? (100分)

  • 主题发起人 主题发起人 wlmmlw
  • 开始时间 开始时间
在API声明中 Pos是Cardinal型的,但在Delphi中却是SmallInt
 
你看看API文档:
WM_VSCROLL
nScrollCode = (int) LOWORD(wParam); // scroll bar value
nPos = (short int) HIWORD(wParam); // scroll box position
hwndScrollBar = (HWND) lParam; // handle of scroll bar

wParam分成2部分,低字是nScrollCode,高字是有符号的Pos,所以delphi包装的是正确的
pos只有SmallInt这么大
 
在WM_VSCROLL
SB_THUMBTRACK
我们就只能取到SmallInt的大小???
但实际的Pos有Cardinal大小????
我们怎么样才能正确的响应SB_THUMBTRACK???
 
补充:
api文档还说: WM_VSCROLL 消息处理的时候,可以从 GetScrollPos 得到32位数据
设置的话,也可以通过:SetScrollPos 设置32位数据
 
补充:
Unfortunately, there is no function to retrieve the thumb's 32-bit position
while the user moves it. GetScrollPos provides static position data only;
an application can therefore only obtain 32-bit position data before or
after a scroll has taken place.
不幸的是,移动过程中没有办法得到数据,GetScrollPos只能在移动之前或者
之后得到静态的数据
 
补充:上面那段话是delphi带来的win32sdk上说的,但是最新的MSDN文档并没有那段话
似乎表示是可以得到动态数据的
 
我试过了
On SB_THUMBTRACK
GetScrollInfo( ...SI...)
SI.nPos是没有用的
 
how to get the pos while scroll ??
 
GetScrollPos,而不是GetScrollInfo有没有用?
 
都用过!!!!
 
两个一起用
case of
SB_THUMBPOSITION,
SB_THUMBTRACK: begin
getScrollInfo(nTrackPos)
SetScrollInfo(nTrackPos)
end;
 
多人接受答案了。
 
后退
顶部