有没有人能指出(或提供?)一些很好的,明确的如何在Win32中实现滚动的例子?显然,谷歌提出了很多东西,但大多数例子对我来说似乎太简单或太复杂,无法确保他们展示出正确的做事方式。我在当前项目中使用LispWorks CAPI(跨平台Common Lisp GUI库),在Windows上我有一个难以弄清楚的与滚动相关的错误;基本上我想直接通过Win32 API进行一些测试,看看我是否可以对这种情况有所了解。
非常感谢, 克里斯托弗
答案 0 :(得分:1)
我认为你正在谈论如何处理WM_VSCROLL / WM_HSCROLL事件的例子。如果是这样,第一步是处理该事件。您不应该使用该调用的HIWORD(wParam)值,而是使用GetScrollInfo,GetScrollPos和GetScrollRange函数。
以下是MSDN - Using Scroll Bars剪切的示例代码。之前通过调用GetScrollPos()来确定xCurrentScroll。
int xDelta; // xDelta = new_pos - current_pos
int xNewPos; // new position
int yDelta = 0;
switch (LOWORD(wParam)) {
// User clicked the scroll bar shaft left of the scroll box.
case SB_PAGEUP:
xNewPos = xCurrentScroll - 50;
break;
// User clicked the scroll bar shaft right of the scroll box.
case SB_PAGEDOWN:
xNewPos = xCurrentScroll + 50;
break;
// User clicked the left arrow.
case SB_LINEUP:
xNewPos = xCurrentScroll - 5;
break;
// User clicked the right arrow.
case SB_LINEDOWN:
xNewPos = xCurrentScroll + 5;
break;
// User dragged the scroll box.
case SB_THUMBPOSITION:
xNewPos = HIWORD(wParam);
break;
default:
xNewPos = xCurrentScroll;
}
[...]
// New position must be between 0 and the screen width.
xNewPos = max(0, xNewPos);
xNewPos = min(xMaxScroll, xNewPos);
[...]
// Reset the scroll bar.
si.cbSize = sizeof(si);
si.fMask = SIF_POS;
si.nPos = xCurrentScroll;
SetScrollInfo(hwnd, SB_HORZ, &si, TRUE);
答案 1 :(得分:0)
这是一个,ScrollCall,(从页面复制):。
<块引用>ScrollCall 是一个演示程序,它采用 Windows 标准的示例 控件,连同标准 GDI 图像,并将它们排列在一个 设备上下文(或 DC),在一个窗口中。视尺寸而定 图像,以及包含窗口的大小,水平和/或 系统滚动条变得可见,以启用图像滚动 和控制。因此 ScrollCall 至少同样专注于调整大小 因为它是滚动的,两者都为用户提供了独特的挑战 程序员。
ScrollCall 功能: