首页
社区
课程
招聘
[求助]窗口的滚动条没作用呢?
发表于: 2008-4-15 19:24 5111

[求助]窗口的滚动条没作用呢?

2008-4-15 19:24
5111
我用radasm建立的窗口,我设置了scrollbar为both,但是滚动条没作用,他不会滚动,网上搜索说要自己控制,但是我都没有这个滚动条的ID啊,怎么控制呀?????????

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
你是使用RadAsm的资源工程创建的窗口(对话框窗口)吧,这个只须在回调函数里处理WM_HSCROLL(水平滚动条消息)和WM_VSCROLL(垂直滚动条消息)消息就行了,不用ID的,如下例子:
DlgProc proc hDlg, uMsg, wParam, lParam
        local xPos,yPos
        local sinfo:SCROLLINFO
        .if uMsg == WM_SIZE ; 在WM_SIZE消息中初始化滚动条大小和范围
                invoke RtlZeroMemory,addr sinfo,sizeof sinfo
                mov eax,lParam
                mov edx,eax
                and eax,0ffffh
                shr edx,16
                mov xPos,eax
                mov yPos,edx
                mov sinfo.cbSize,sizeof SCROLLINFO
                mov sinfo.fMask,SIF_RANGE or SIF_PAGE
                mov sinfo.nMin,0
                mov sinfo.nMax,10
                mov ecx,50
                xor edx,edx
                div ecx
                mov sinfo.nPage,eax
                invoke SetScrollInfo,hDlg,SB_HORZ,addr sinfo,TRUE
                mov eax,yPos
                mov ecx,50
                xor edx,edx
                div ecx
                mov sinfo.nPage,eax
                invoke SetScrollInfo,hDlg,SB_VERT,addr sinfo,TRUE
        .elseif uMsg == WM_VSCROLL ; 处理垂直滚动条消息
                invoke RtlZeroMemory,addr sinfo,sizeof sinfo
                mov sinfo.cbSize,sizeof SCROLLINFO
                mov sinfo.fMask,SIF_ALL
                invoke GetScrollInfo,hDlg,SB_VERT,addr sinfo
                push sinfo.nPos
                pop yPos
                .if WORD ptr [wParam] == SB_TOP
                        push sinfo.nMin
                        pop sinfo.nPos
                .elseif WORD ptr [wParam] == SB_BOTTOM
                        push sinfo.nMax
                        pop sinfo.nPos
                .elseif WORD ptr [wParam] == SB_LINEUP
                        dec sinfo.nPos
                .elseif WORD ptr [wParam] == SB_LINEDOWN
                        inc sinfo.nPos
                .elseif WORD ptr [wParam] == SB_PAGEDOWN
                        mov eax,sinfo.nPage
                        add sinfo.nPos,eax
                .elseif WORD ptr [wParam] == SB_PAGEUP
                        mov eax,sinfo.nPage
                        sub sinfo.nPos,eax
                .elseif WORD ptr [wParam] == SB_THUMBTRACK
                        push sinfo.nTrackPos
                        pop sinfo.nPos
                .endif
                mov eax,sinfo.nMax
                mov edx,sinfo.nMin
                .if SDWORD ptr [sinfo.nPos] > eax
                        push sinfo.nMax
                        pop sinfo.nPos
                .elseif SDWORD ptr [sinfo.nPos] < edx
                        push sinfo.nMin
                        pop sinfo.nPos
                .endif
                invoke SetScrollInfo,hDlg,SB_VERT,addr sinfo,TRUE
        .elseif uMsg == WM_HSCROLL ; 处理水平滚动条消息
                invoke RtlZeroMemory,addr sinfo,sizeof sinfo
                mov sinfo.cbSize,sizeof SCROLLINFO
                mov sinfo.fMask,SIF_ALL
                invoke GetScrollInfo,hDlg,SB_HORZ,addr sinfo
                push sinfo.nPos
                pop yPos
                .if WORD ptr [wParam] == SB_TOP
                        push sinfo.nMin
                        pop sinfo.nPos
                .elseif WORD ptr [wParam] == SB_BOTTOM
                        push sinfo.nMax
                        pop sinfo.nPos
                .elseif WORD ptr [wParam] == SB_LINEUP
                        dec sinfo.nPos
                .elseif WORD ptr [wParam] == SB_LINEDOWN
                        inc sinfo.nPos
                .elseif WORD ptr [wParam] == SB_PAGEDOWN
                        mov eax,sinfo.nPage
                        add sinfo.nPos,eax
                .elseif WORD ptr [wParam] == SB_PAGEUP
                        mov eax,sinfo.nPage
                        sub sinfo.nPos,eax
                .elseif WORD ptr [wParam] == SB_THUMBTRACK
                        push sinfo.nTrackPos
                        pop sinfo.nPos
                .endif
                mov eax,sinfo.nMax
                mov edx,sinfo.nMin
                .if SDWORD ptr [sinfo.nPos] > eax
                        push sinfo.nMax
                        pop sinfo.nPos
                .elseif SDWORD ptr [sinfo.nPos] < edx
                        push sinfo.nMin
                        pop sinfo.nPos
                .endif
                invoke SetScrollInfo,hDlg,SB_HORZ,addr sinfo,TRUE
2008-4-16 11:05
0
游客
登录 | 注册 方可回帖
返回
//