加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

winapi – Win32滚动示例

发布时间:2020-12-14 02:18:41 所属栏目:Windows 来源:网络整理
导读:任何人都可以指出(或提供?)一些很好的,明确的如何在Win32中实现滚动的例子?显然,谷歌提出了很多东西,但大多数例子对我来说似乎太简单或太复杂,无法确保他们能够证明正确的做事方式.我在当前项目中使用LispWorks CAPI(跨平台Common Lisp GUI库),在 Windows
任何人都可以指出(或提供?)一些很好的,明确的如何在Win32中实现滚动的例子?显然,谷歌提出了很多东西,但大多数例子对我来说似乎太简单或太复杂,无法确保他们能够证明正确的做事方式.我在当前项目中使用LispWorks CAPI(跨平台Common Lisp GUI库),在 Windows上我有一个难以弄清楚的与滚动相关的错误;基本上我想通过Win32 API直接做一些测试,看看我是否可以对这种情况有所了解.

非常感谢,
克里斯托弗

解决方法

我想你正在谈论如何处理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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读