gpt4 book ai didi

winapi - Win32 滚动示例

转载 作者:行者123 更新时间:2023-12-03 17:59:59 28 4
gpt4 key购买 nike

谁能指出(或提供?)一些关于如何在 Win32 中实现滚动的漂亮、清晰的示例?显然,谷歌提出了很多东西,但大多数例子对我来说要么太简单要么太复杂,以至于我无法确定它们展示了正确的做事方式。我在当前项目中使用 LispWorks CAPI(跨平台 Common Lisp GUI 库),在 Windows 上我有一个与滚动相关的难以解决的错误;基本上我想直接通过 Win32 API 做一些测试,看看我是否可以对这种情况有所了解。

非常感谢,
克里斯托弗

最佳答案

我认为您正在谈论如何处理 WM_VSCROLL/WM_HSCROLL 事件的示例。如果是这样,第一步是处理该事件。您不应使用该调用的 HIWORD(wParam) 值,而应使用 GetScrollInfo、GetScrollPos 和 GetScrollRange 函数。

以下是由 MSDN - Using Scroll Bars 截取的示例代码.例如,xCurrentScroll 之前是通过调用 GetScrollPos() 确定的。

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);

关于winapi - Win32 滚动示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2754254/

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