스크롤바 구현하는 예제인데 제대로 소스 분적해 보지 않았지만 나름대로 소스가 짧아서 좋다.
헌데 이것 저것 몇가지 테스트 해본 결과 뭐랄까...바로 프로그램에 적용하기엔 좀 무리한 감이 따른다. 코드 실행시켜보면 알겠지만 스크롤링이 그리 좋지 않다.. -_- 스크롤을 마우스로 드래그하면 어느정도 되는데 스크롤바의 화살표 버튼을 이용하면 너무 느리다. 또 한가지 여기 소스는 A~L 까지 뿌려진 문자열을 스크롤 하는데 A~Z로 바꾸니 스크롤 크기가 좀 맞지 않는다. 뭔가 2% 부족한 스크롤이다.. -_-
2개의 PictureBox 컨트롤과 한개의 VScroll1만 대충 추가시켜놓으면 알아서 위치 잡아서 스크롤한다.(요건 좀 편하다 대게 스크롤 하려면 미세하게 컨트롤들 배열해야하는데 그럴 필요가 없다.)
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Const SRCCOPY = &HCC0020
Const SRCAND = &H8800C6
Const SRCINVERT = &H660046
Private TwipsX As Long
Private TwipsY As Long
Private DestPicx As Long
Private DestPicY As Long
Private Sub ScrollPic(SourcePic As Object, DestPic As Object, Scroll As Object)
BitBlt DestPic.hDC, 0&, 0&, DestPicx, DestPicY, SourcePic.hDC, 0&, Scroll.Value, SRCCOPY
End Sub
Private Sub Form_Activate()
'Picture2 개체를 Picture1 개체안에 삽입
ScrollPic Picture2, Picture1, VScroll1
End Sub
Private Sub Form_Load()
With Me
.Height = 5000
.Width = 6500
End With
With VScroll1
.Left = 3200
.Top = 200
.Height = 1000
End With
With Picture1
.Left = 200
.Top = 200
.Width = 3000
.Height = 1000
End With
With Picture2
.AutoRedraw = True
.Left = 200
.Top = 1500
.Width = 3000
.Height = 2500
.Visible = False
End With
TwipsX = Screen.TwipsPerPixelX
TwipsY = Screen.TwipsPerPixelY
DestPicx = Picture2.Width / TwipsX
DestPicY = Picture2.Height / TwipsY
VScroll1.Max = Picture2.Height / TwipsY - Picture1.Height / TwipsY
Dim i As Integer
For i = 0 To 11
Picture2.Print Chr$(65 + i)
Next i
End Sub
Private Sub VScroll1_Change()
ScrollPic Picture2, Picture1, VScroll1
End Sub
Private Sub VScroll1_Scroll()
ScrollPic Picture2, Picture1, VScroll1
End Sub
Source Page : http://www.mentalis.org/tips/tip057.shtml