CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 3 of 3
  1. #1
    Join Date
    Aug 2001
    Posts
    3

    Mini-Map Type Effect

    Is there a way to have a very large picture behind a picture box and be able to move the picture box around the large picture showing different views?? Thanks a lot.


  2. #2
    Join Date
    Jan 2000
    Location
    Olen, Belgium
    Posts
    2,477

    Re: Mini-Map Type Effect

    The picturebox control has a PaintPicture method. This allows you to specify the location of where it needs to start drawing.

    ' This would look like the view has moved right
    Picture1.PaintPicture LoadPicture("somepic.bmp"), -100, 0

    ' This would look like the view has moved left
    Picture1.PaintPicture LoadPicture("somepic.bmp"), 100, 0

    ' This would look like the view has moved down
    Picture1.PaintPicture LoadPicture("somepic.bmp"), 0, -100

    ' This would look like the view has moved up
    Picture1.PaintPicture LoadPicture("somepic.bmp"), 0, 100




    Tom Cannaerts
    [email protected]

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning -- Rich Cook
    Tom Cannaerts
    email: [email protected]
    www.tom.be (dutch site)

  3. #3
    Join Date
    Mar 1999
    Location
    Nepal
    Posts
    540

    Re: Mini-Map Type Effect


    I have given below the form code of a project from which you can start with. Copy this code and paste onto either WordPad or Word and save it as a text file. Give it the name frmScroll.frm

    Now start VB by double clicking on frmScroll.frm. You will get one error while loading. Click on Yes.

    Set the picture property of picture3 to a large image.

    Now click on the CheckBox. When it is checked, the image will fit, when not, you can scroll through the image.

    When working with graphics, make sure that the picture boxes have AutoRedraw set to true and ScaleMode is set to Pixel.

    To make the program respond faster, you can use StretchBlt. I used PaintPicture for a quick solution.



    VERSION 5.00
    Begin VB.Form Form1
    Caption = "Form1"
    ClientHeight = 9030
    ClientLeft = 60
    ClientTop = 345
    ClientWidth = 9540
    LinkTopic = "Form1"
    ScaleHeight = 602
    ScaleMode = 3 'Pixel
    ScaleWidth = 636
    StartUpPosition = 3 'Windows Default
    Begin VB.CheckBox Check1
    Caption = "Fit"
    Height = 375
    Left = 8040
    TabIndex = 5
    Top = 840
    Width = 1095
    End
    Begin VB.VScrollBar VScroll1
    Height = 7815
    Left = 7560
    TabIndex = 4
    Top = 120
    Width = 255
    End
    Begin VB.HScrollBar HScroll1
    Height = 255
    Left = 360
    TabIndex = 3
    Top = 7920
    Width = 7215
    End
    Begin VB.PictureBox Picture3
    Appearance = 0 'Flat
    AutoRedraw = -1 'true
    AutoSize = -1 'true
    BackColor = &H80000005&
    BorderStyle = 0 'None
    ForeColor = &H80000008&
    Height = 9465
    Left = 8160
    Picture = "Form1.frx":0000
    ScaleHeight = 631
    ScaleMode = 3 'Pixel
    ScaleWidth = 926
    TabIndex = 2
    Top = 5520
    Visible = 0 'false
    Width = 13890
    End
    Begin VB.PictureBox Picture1
    Appearance = 0 'Flat
    AutoRedraw = -1 'true
    BackColor = &H80000005&
    BorderStyle = 0 'None
    ForeColor = &H80000008&
    Height = 7815
    Left = 360
    ScaleHeight = 521
    ScaleMode = 3 'Pixel
    ScaleWidth = 481
    TabIndex = 0
    Top = 120
    Width = 7215
    Begin VB.PictureBox Picture2
    Appearance = 0 'Flat
    AutoRedraw = -1 'true
    AutoSize = -1 'true
    BackColor = &H80000005&
    BorderStyle = 0 'None
    ForeColor = &H80000008&
    Height = 7815
    Left = 0
    ScaleHeight = 521
    ScaleMode = 3 'Pixel
    ScaleWidth = 481
    TabIndex = 1
    Top = 0
    Width = 7215
    End
    End
    End
    Attribute VB_Name = "Form1"
    Attribute VB_GlobalNameSpace = false
    Attribute VB_Creatable = false
    Attribute VB_PredeclaredId = true
    Attribute VB_Exposed = false
    private Sub ScrollPicBox(picSource as PictureBox, picContain as PictureBox, picTemp as PictureBox, Fit as Integer, HScroll1 as HScrollBar, VScroll1 as VScrollBar)
    Dim Hgt as Integer, Wdth as Integer, CopyMode as Long
    Dim TopCorner as Integer, LeftCorner as Integer
    Dim SC as Integer, LC as Integer
    Dim X as Long
    CopyMode = &HCC0020

    If Fit = 0 then
    picSource.Picture = picTemp.Image
    else
    Hgt = picTemp.Height
    Wdth = picTemp.Width
    If Hgt > picContain.Height And Wdth > picContain.Width then
    If Hgt / picContain.Height > Wdth / picContain.Width then
    Wdth = Wdth * picContain.Height / Hgt
    Hgt = picContain.Height
    else
    Hgt = Hgt * picContain.Width / Wdth
    Wdth = picContain.Width
    End If
    else
    If Hgt > picContain.Height then
    Wdth = Wdth * picContain.Height / Hgt
    Hgt = picContain.Height
    else
    If Wdth > picContain.Width then
    Hgt = Hgt * picContain.Width / Wdth
    Wdth = picContain.Width
    End If
    End If
    End If

    picSource.Height = Hgt
    picSource.Width = Wdth
    picSource.PaintPicture picTemp.Image, 0, 0, Wdth, Hgt, 0, 0, picTemp.Width, picTemp.Height, CopyMode
    End If

    TopCorner = (picContain.Height - picSource.Height) / 2
    If TopCorner < 0 then TopCorner = 0
    picSource.Top = TopCorner

    LeftCorner = (picContain.Width - picSource.Width) / 2
    If LeftCorner < 0 then LeftCorner = 0
    picSource.Left = LeftCorner

    If picSource.Width > picContain.Width then
    HScroll1.Visible = true
    HScroll1.Max = picSource.Width - picContain.Width
    SC = HScroll1.Max * 0.01
    If SC < 1 then SC = 1
    HScroll1.SmallChange = SC
    LC = HScroll1.Max * 0.1
    If LC < 1 then LC = 1
    HScroll1.LargeChange = LC

    else
    HScroll1.Visible = false
    End If

    If picSource.Height > picContain.Height then
    VScroll1.Visible = true
    VScroll1.Max = picSource.Height - picContain.Height
    SC = VScroll1.Max * 0.01
    If SC < 1 then SC = 1
    VScroll1.SmallChange = SC
    LC = VScroll1.Max * 0.1
    If LC < 1 then LC = 1
    VScroll1.LargeChange = LC
    else
    VScroll1.Visible = false
    End If
    End Sub

    private Sub Check1_Click()
    ScrollPicBox Picture2, Picture1, Picture3, Check1.Value, HScroll1, VScroll1
    End Sub

    private Sub VScroll1_Change()
    Picture2.Top = -VScroll1.Value
    End Sub

    private Sub HScroll1_Change()
    Picture2.Left = -HScroll1.Value
    End Sub






Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured