Add 2 pictureboxed to your form, one called pctSource and one called PctDest
Set pctSource.Autoredraw to true
set pctsource.borderstyle to none
make pctDest invisible and set pctDest.autoredraw to true
cut and paste your frame into pctSource (make sure it's a child window of pctsource and not just resting on top
make pctSource just large enough to display the entire contents of the fram and make pctdest the same size.
Insert the following code into your form
Code:
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 RasterOpConstants) As Long
Private Sub FrameOnPrinter(Left As Single, Top As Single)
Dim lngPicWidth As Long
Dim lngPicHeight As Long
'Calculate Picture Dimensions
lngPicWidth = ScaleX(pctSource.Width, vbTwips, vbPixels)
lngPicHeight = ScaleY(pctSource.Height, vbTwips, vbPixels)
'Copy Source picture to dest picture
BitBlt pctDest.hDc, 0, 0, lngPicWidth, lngPicHeight, pctSource.hDc, 0, 0, vbSrcCopy
'put destination picture on printer.
pctDest.Picture = pctDest.Image
Printer.PaintPicture pctDest.Picture, Left, Top
End Sub
FrameOnPrinter will draw your frame onto the printer object for you, I've left the rest of the print handling to you.
Hope this helps