SCROLL.ASM
上传用户:ys_happy
上传日期:2007-01-09
资源大小:20k
文件大小:4k
源码类别:

汇编语言

开发平台:

Asm

  1. locals
  2. .386
  3. .model flat,stdcall
  4. include win32.asi
  5. include win32.ase
  6. include fdui.asi
  7. public handlesb,scrollkeys,DisplayWindowBars,SetBarRanges, ShiftState
  8. extrn  Translate : PROC, Dispatch : PROC
  9. .data
  10. ShiftState db ?
  11. .code
  12. ;-----------------------------------------------------------------------------
  13. ;
  14. ; this routine calculates the new scroll bar position, then redraws
  15. ; the scroll bar and invalidates the screen
  16. ;
  17. handlesb PROC hwnd : dword, sbdata : dword, 
  18. sbmsg : dword, newpos : dword
  19. mov ebx,[sbdata]
  20. mov eax,[sbmsg]
  21. call Dispatch
  22. dd 8
  23. dd SB_BOTTOM,offset sbbot
  24. dd SB_TOP,offset sbtop
  25. dd SB_THUMBPOSITION,offset sbtpos
  26. dd SB_THUMBTRACK,offset sbttrack
  27. dd SB_PAGEUP,offset sbpup
  28. dd SB_PAGEDOWN,offset sbpdown
  29. dd SB_LINEUP,offset sblup
  30. dd SB_LINEDOWN,offset sbldown
  31. jc badbx
  32. call SetScrollPos,[hwnd],[ebx + sbinfo.sbstyle],
  33. [ebx + sbinfo.sbpos],1
  34.                 call    InvalidateRect,[hwnd],0,0,0,0
  35. badbx:
  36. ret
  37. sbbot PROC
  38. mov [ebx + sbinfo.sbpos],0
  39. ret
  40. sbbot ENDP
  41. sbtop PROC
  42. mov eax,[ebx + sbinfo.sbheight]
  43. mov [ebx + sbinfo.sbpos],eax
  44. ret
  45. sbtop ENDP
  46. sbtpos PROC
  47. mov eax,[newpos]
  48. mov dword ptr [ebx + sbinfo.sbpos],eax
  49. ret
  50. sbtpos ENDP
  51. sbttrack PROC
  52. ; intercept the tunhmbtrack message if you want to give
  53. ; feedback while they ard dragging the scrollbar
  54. mov eax,[newpos]
  55. mov dword ptr [ebx + sbinfo.sbpos],eax
  56. ret
  57. sbttrack ENDP
  58. sbpup PROC
  59. mov eax,[ebx + sbinfo.sbpaging]
  60. sub dword ptr [ebx + sbinfo.sbpos],eax
  61. jns sbpupx
  62. mov dword ptr [ebx + sbinfo.sbpos],0
  63. sbpupx:
  64. ret
  65. sbpup ENDP
  66. sbpdown PROC
  67. mov eax,[ebx + sbinfo.sbpaging]
  68. add dword ptr [ebx + sbinfo.sbpos],eax
  69. mov     eax,[ebx + sbinfo.sbheight]
  70. cmp dword ptr [ebx + sbinfo.sbpos],eax
  71. jc sbpdownx
  72. mov dword ptr [ebx + sbinfo.sbpos],eax
  73. sbpdownx:
  74. ret
  75. sbpdown ENDP
  76. sblup PROC
  77. dec dword ptr [ebx + sbinfo.sbpos]
  78. jns sblupx
  79. mov dword ptr [ebx + sbinfo.sbpos],0
  80. sblupx:
  81. ret
  82. sblup ENDP
  83. sbldown PROC
  84. inc dword ptr [ebx + sbinfo.sbpos]
  85. mov eax,[ebx + sbinfo.sbheight]
  86. cmp dword ptr [ebx + sbinfo.sbpos],eax
  87. jc sbldownx
  88. mov dword ptr [ebx + sbinfo.sbpos],eax
  89. sbldownx:
  90. ret
  91. sbldown ENDP
  92. handlesb ENDP
  93. ;-----------------------------------------------------------------------------
  94. ;
  95. ; this function translates a keypress into something handlesb can
  96. ; use
  97. ;
  98. ; we are using shift-right and shift-left here to do page-right and page-left
  99. ;
  100. scrollkeys proc hwnd : dword, key : dword, dwdata : dword
  101. mov eax,key
  102. mov ebx,[dwdata]
  103. test [ShiftState],1
  104. jnz isshifted
  105. call Translate
  106. dd 4
  107. dd VK_NEXT,SB_PAGEDOWN
  108. dd VK_PRIOR,SB_PAGEUP
  109. dd VK_UP,SB_LINEUP
  110. dd VK_DOWN,SB_LINEDOWN
  111. jc sk_chkhorz
  112. lea ebx,[ebx + dwinfo.pvsb]
  113. call handlesb,[hwnd],ebx,eax,0
  114. ret
  115. sk_chkhorz:
  116. call Translate
  117. dd 2
  118. dd VK_LEFT,SB_LINEUP
  119. dd VK_RIGHT,SB_LINEDOWN
  120. jnc skhorz
  121. ret
  122. isshifted:
  123. call Translate
  124. dd 2
  125. dd VK_LEFT,SB_PAGEUP
  126. dd VK_RIGHT,SB_PAGEDOWN
  127. jc sk_noredraw
  128. skhorz:
  129. lea ebx,[ebx + dwinfo.phsb]
  130. call handlesb,[hwnd],ebx,eax,0
  131. sk_noredraw:
  132. ret
  133. scrollkeys endp
  134. ;-----------------------------------------------------------------------------
  135. DisplayWindowBars PROC hwnd : dword, flag : dword
  136. call   ShowScrollBar,[hwnd],SB_BOTH,[flag]
  137. ret
  138. DisplayWindowBars ENDP
  139. SetBarRanges PROC hwnd : dword, sbr_vert : dword, sbr_horiz : dword
  140.  mov ebx,[sbr_horiz]
  141.  call SetScrollRange,[hwnd],SB_HORZ, 
  142. 0,[ebx + sbinfo.sbpos],[ebx + sbinfo.sbheight],1
  143.  mov ebx,[sbr_vert]
  144.  call SetScrollRange,[hwnd],SB_VERT, 
  145. 0,[ebx + sbinfo.sbpos],[ebx + sbinfo.sbheight],1
  146.                 call    InvalidateRect,[hwnd],0,0,0,0
  147. ret
  148. SetBarRanges ENDP
  149. end