I finally got a chance to play around with this a bit. The problem with magnifying on the same form you're moving around is that you have to keep hiding the form so that you can see what is behind it. Maybe there is someway to tap into the buffer used to repaint the background and get your data from there. Anyway here is what I have that works pretty well.
VB Code:
  1. Option Explicit
  2.  
  3. Private srcDc As Long
  4.  
  5. Private Declare Function StretchBlt Lib "gdi32" ( _
  6.     ByVal hdc As Long, _
  7.     ByVal x As Long, _
  8.     ByVal y As Long, _
  9.     ByVal nWidth As Long, _
  10.     ByVal nHeight As Long, _
  11.     ByVal hSrcDC As Long, _
  12.     ByVal xSrc As Long, _
  13.     ByVal ySrc As Long, _
  14.     ByVal nSrcWidth As Long, _
  15.     ByVal nSrcHeight As Long, _
  16.     ByVal dwRop As Long _
  17. ) As Long
  18.  
  19. Private Declare Function GetDC Lib "user32" ( _
  20.     ByVal hwnd As Long _
  21. ) As Long
  22.  
  23. Private Declare Function GetWindowRect Lib "user32" ( _
  24.     ByVal hwnd As Long, _
  25.     lpRect As RECT _
  26. ) As Long
  27.  
  28. Private Declare Function GetClientRect Lib "user32" ( _
  29.     ByVal hwnd As Long, _
  30.     lpRect As RECT _
  31. ) As Long
  32.  
  33. Private Type RECT
  34.         Left As Long
  35.         Top As Long
  36.         Right As Long
  37.         Bottom As Long
  38. End Type
  39.  
  40. Private Sub Form_Load()
  41.     Me.ScaleMode = vbPixels
  42.     srcDc = GetDC(0&)
  43.     Set FormSubClass = New clsSubClass
  44.     FormSubClass.Enable Me.hwnd
  45. End Sub
  46.  
  47. Sub ZoomIn(ZoomFactor As Long)
  48.  Dim xWidth As Long, yHeight As Long
  49.  Dim xLeft As Long, ytop As Long
  50.  Dim nSrcWidth As Long, nSrcHeight As Long
  51.  
  52.  Dim xBorder As Long
  53.  Dim yBorder As Long
  54.  Dim wndRect As RECT
  55.  Dim clientRect As RECT
  56.  
  57.  GetWindowRect Me.hwnd, wndRect
  58.  GetClientRect Me.hwnd, clientRect
  59.  
  60.  'need to hide form so we can see what is behind it
  61.   Me.Visible = False
  62.   DoEvents
  63.  
  64. 'get size and location of form
  65.  xBorder = Int((wndRect.Right - wndRect.Left - clientRect.Right) / 2)
  66.  yBorder = wndRect.Bottom - wndRect.Top - clientRect.Bottom - xBorder
  67.  
  68.  xWidth = clientRect.Right
  69.  yHeight = clientRect.Bottom
  70.  nSrcWidth = Int(xWidth / ZoomFactor)
  71.  nSrcHeight = Int(yHeight / ZoomFactor)
  72.  xLeft = wndRect.Left + xBorder
  73.  ytop = wndRect.Top + yBorder
  74.  
  75. 'make the magnified picture
  76.  StretchBlt Me.hdc, 0, 0, xWidth, yHeight, srcDc, xLeft, ytop, nSrcWidth, nSrcHeight, vbSrcCopy
  77.  Me.Visible = True
  78.  
  79. End Sub
Now, when do you call the ZoomIn routine? You can subclass the form and call it whenever the form is moved
VB Code:
  1. Private Sub FormSubClass_WMArrival(hwnd As Long, uMsg As Long, _
  2.     wParam As Long, lParam As Long, lRetVal As Long)
  3.     Select Case uMsg
  4.     Case WM_MOVE
  5.         ZoomIn 2
  6.     End Select
  7. End Sub
This causes a lot of flashing, so maybe you just want to call it once the form has completed moving