gpt4 book ai didi

c - Win32 滚动条 : When drag horizontal scroll bar to right most position, nPos 的值没有达到 nMaxPos

转载 作者:太空宇宙 更新时间:2023-11-04 08:42:21 26 4
gpt4 key购买 nike

我是 win32 API 的新手。我需要使用滚动条来移动屏幕以查看某些图形绘制。假设我的 X 轴是 1500 个单位长度(像素?)。我已经初始化我的滚动条如下:

SCROLLINFO  si; 

si.cbSize = sizeof (si) ;
si.fMask = SIF_ALL;
si.nMin = 0 ;
si.nMax = 1500 ;
si.nPage = 100 ;
SetScrollInfo (hwnd, SB_HORZ, &si, TRUE) ;

我还有如下处理 WM_SIZE 和 WM_HSCROLL 的案例:

case WM_SIZE:
SetScrollRange(hwnd, SB_HORZ, 0, 1500, TRUE);


case WM_HSCROLL:
GetScrollInfo (hwnd, SB_HORZ, &si) ;
iPosBeforeScroll = si.nPos ;
iWindowShiftPerScrollClick = 1;
switch (LOWORD (wParam))
{
case SB_LINELEFT: // press left button
si.nPos -= iWindowShiftPerScrollClick ;
xShift = -iWindowShiftPerScrollClick;
break ;

case SB_LINERIGHT: // press right button
si.nPos += iWindowShiftPerScrollClick ;
xShift = iWindowShiftPerScrollClick;
break ;
case SB_THUMBTRACK:
si.nPos = si.nTrackPos ;
xShift = si.nTrackPos - iPosBeforeScroll;
break;
}
si.fMask = SIF_ALL ;
SetScrollInfo (hwnd, SB_HORZ, &si, TRUE) ;
GetScrollInfo (hwnd, SB_HORZ, &si) ;
ScrollWindow (hwnd, -xShift, 0, NULL, NULL) ;
UpdateWindow(hwnd);

当我运行程序时,我观察到,当滚动条移动到最右边的位置时,si.nPos 的值只达到1401。它不应该是 1500 因为我已将范围设置为 1500 吗?另外,当滚动条在最右边的位置时,我仍然可以按滚动条向右移动按钮,屏幕移动但滚动条保持在同一位置。我可以按滚动条右键直到 nPos 达到最大值(在我的例子中是 1500)。

我的问题是:

1> 发生的事情是否超出正常范围?如果是,我如何计算当我将滚动条拖动到给定范围的最大限制时 nPos 的值是多少?

2> 滚动条移动一个单位是否等于窗口绘图移动一个单位(像素)?

更新:

只需观察滚动条最多只能拖动到“nMaxPos - 99”。这部分回答了我的第一个问题。

最佳答案

第一个问题:这在 SetScrollInfo 中有完整记录:

这里的相关因素是页面大小。

来自文档:

The SetScrollInfo function performs range checking on the values specified by the nPage and nPos members of the SCROLLINFO structure. The nPage member must specify a value from 0 to nMax - nMin +1. The nPos member must specify a value between nMin and nMax - max( nPage– 1, 0). If either value is beyond its range, the function sets it to a value that is just within the range.

问题2:这取决于你在做什么。事实上没有: 1. 滚动条中的勾号可能是滚动条中的 1 行(列表框、树控件等)。如果您使用 GDI 映射模式,则为 1 个逻辑点。滚动条做任何你想做的事。只要滚动条没有绑定(bind)到现有控件(ListCtrl、TreeCtrl、Edit Ctrl)

关于c - Win32 滚动条 : When drag horizontal scroll bar to right most position, nPos 的值没有达到 nMaxPos,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23100443/

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