home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 3_2004-2005.ISO / Data / Zips / FYI__Fun_w1840571162005.psc / Form1.frm < prev    next >
Text File  |  2005-01-16  |  8KB  |  237 lines

  1. VERSION 5.00
  2. Begin VB.Form frmShapedRgns 
  3.    BackColor       =   &H00FFFFC0&
  4.    BorderStyle     =   1  'Fixed Single
  5.    Caption         =   "Shaped Regions & AntiRegions"
  6.    ClientHeight    =   3570
  7.    ClientLeft      =   150
  8.    ClientTop       =   720
  9.    ClientWidth     =   4065
  10.    LinkTopic       =   "Form1"
  11.    MaxButton       =   0   'False
  12.    MinButton       =   0   'False
  13.    ScaleHeight     =   3570
  14.    ScaleWidth      =   4065
  15.    StartUpPosition =   3  'Windows Default
  16.    Begin VB.CheckBox chkAntiRgn 
  17.       BackColor       =   &H00FFFFC0&
  18.       Caption         =   "Show Anti-Region Shaped Form also"
  19.       Height          =   255
  20.       Left            =   90
  21.       TabIndex        =   7
  22.       Top             =   3075
  23.       Value           =   1  'Checked
  24.       Width           =   3825
  25.    End
  26.    Begin VB.ComboBox cboRotation 
  27.       Height          =   315
  28.       ItemData        =   "Form1.frx":0000
  29.       Left            =   1785
  30.       List            =   "Form1.frx":0016
  31.       Style           =   2  'Dropdown List
  32.       TabIndex        =   5
  33.       Top             =   2685
  34.       Width           =   2100
  35.    End
  36.    Begin VB.CommandButton Command2 
  37.       Caption         =   "Close Test Forms"
  38.       Height          =   555
  39.       Left            =   120
  40.       TabIndex        =   2
  41.       Top             =   990
  42.       Width           =   1545
  43.    End
  44.    Begin VB.CommandButton Command1 
  45.       Caption         =   "Create Shaped Regions"
  46.       Height          =   555
  47.       Left            =   120
  48.       TabIndex        =   1
  49.       Top             =   405
  50.       Width           =   1545
  51.    End
  52.    Begin VB.PictureBox Picture1 
  53.       AutoRedraw      =   -1  'True
  54.       AutoSize        =   -1  'True
  55.       BorderStyle     =   0  'None
  56.       DragMode        =   1  'Automatic
  57.       Height          =   2235
  58.       Left            =   1800
  59.       OLEDropMode     =   1  'Manual
  60.       Picture         =   "Form1.frx":0079
  61.       ScaleHeight     =   2235
  62.       ScaleWidth      =   2070
  63.       TabIndex        =   0
  64.       Top             =   405
  65.       Width           =   2070
  66.    End
  67.    Begin VB.Label Label3 
  68.       BackStyle       =   0  'Transparent
  69.       Caption         =   "Show as Rotated by"
  70.       Height          =   210
  71.       Left            =   75
  72.       TabIndex        =   6
  73.       Top             =   2760
  74.       Width           =   1710
  75.    End
  76.    Begin VB.Label Label2 
  77.       BackStyle       =   0  'Transparent
  78.       Caption         =   "2 Regions (forms) created: normal and anti-region"
  79.       Height          =   240
  80.       Left            =   165
  81.       TabIndex        =   4
  82.       Top             =   135
  83.       Width           =   3735
  84.    End
  85.    Begin VB.Label Label1 
  86.       BackStyle       =   0  'Transparent
  87.       Caption         =   "Drag && drop any bmp, jpg or gif into the test frame. It may resize off this from, but it doesn't matter. Jpgs are worse"
  88.       Height          =   1035
  89.       Left            =   60
  90.       TabIndex        =   3
  91.       Top             =   1650
  92.       Width           =   1710
  93.    End
  94.    Begin VB.Menu mnuMain 
  95.       Caption         =   "Play Time"
  96.       Begin VB.Menu mnuSample 
  97.          Caption         =   "&Clip Regions vs Masks"
  98.          Index           =   0
  99.       End
  100.       Begin VB.Menu mnuSample 
  101.          Caption         =   "&Anti Region"
  102.          Index           =   1
  103.       End
  104.       Begin VB.Menu mnuSample 
  105.          Caption         =   "More Region &Rotations"
  106.          Index           =   2
  107.       End
  108.       Begin VB.Menu mnuSample 
  109.          Caption         =   "&Stretch Regions"
  110.          Index           =   3
  111.       End
  112.    End
  113. End
  114. Attribute VB_Name = "frmShapedRgns"
  115. Attribute VB_GlobalNameSpace = False
  116. Attribute VB_Creatable = False
  117. Attribute VB_PredeclaredId = True
  118. Attribute VB_Exposed = False
  119. Option Explicit
  120.  
  121. Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
  122.  
  123. Private Sub Command1_Click()
  124. ' create the shaped window and the anti-region
  125.  
  126. ' Note: JPGs are the worse, GIFs are better & Bitmaps are the best
  127. ' image files to use because colors are more uniform between the
  128. ' original source image and the eventual saved file copy.
  129.  
  130. ' One last note: the region returned by the function should always be
  131. ' deleted when no longer needed; with an exception > whenever you
  132. ' apply a region using SetWindowRgn API, per MSDN, Windows owns that
  133. ' region and you are not to play with it any longer.
  134.  
  135. Dim testForms(0 To 1) As FrmTest
  136. Dim formLoop As Integer
  137. Dim windowRgn As Long
  138. Dim testPic As StdPicture
  139. Dim testFormCx As Long
  140. Dim testFormCy As Long
  141.  
  142. Call Command2_Click ' unload any open test forms
  143.  
  144. For formLoop = 0 To chkAntiRgn.Value
  145.     Set testForms(formLoop) = New FrmTest
  146.     ' call function to return the region
  147.     If cboRotation.ListIndex > 0 Then
  148.         windowRgn = RotateImageRegion(Picture1.Picture.Handle, 0, , formLoop = 1, cboRotation.ListIndex - 1, testPic)
  149.     Else
  150.         windowRgn = CreateShapedRegion2(Picture1.Picture.Handle, 0, , formLoop = 1)
  151.         Set testPic = Picture1
  152.     End If
  153.     ' position and show the shaped window
  154.     If windowRgn Then
  155.         testFormCx = ScaleX(testPic.Width, vbHimetric, vbPixels) * Screen.TwipsPerPixelX
  156.         testFormCy = ScaleY(testPic.Height, vbHimetric, vbPixels) * Screen.TwipsPerPixelY
  157.         With testForms(formLoop)
  158.             .Move (Screen.Width - testFormCx) \ 2, _
  159.                 (Screen.Height - testFormCy) \ 2, _
  160.                 testFormCx, testFormCy
  161.             .AutoRedraw = True
  162.             SetWindowRgn .hwnd, windowRgn, True
  163.             Set .Picture = testPic
  164.             ' using SetWindowRgn, so we don't use DeleteObject on the region
  165.             .Show
  166.         End With
  167.     End If
  168. Next
  169.  
  170. If windowRgn Then
  171.     If chkAntiRgn.Value Then
  172.         Label1.Caption = "They are stacked on each other. You can click and drag the test forms around anywhere on the visible areas."
  173.     Else
  174.         Label1.Caption = "You can click and drag the test form around anywhere on its visible areas."
  175.     End If
  176.     Command2.Enabled = True
  177. End If
  178.  
  179. Set testForms(0) = Nothing
  180. Set testForms(1) = Nothing
  181. End Sub
  182.  
  183. Private Sub Command2_Click()
  184. ' close test form(s)
  185.  
  186. Dim I As Integer
  187. For I = Forms.Count - 1 To 0 Step -1
  188.     If Forms(I).Name = "FrmTest" Then Unload Forms(I)
  189. Next
  190. Command2.Enabled = False
  191. Label1.Caption = "Drag && drop any bmp, jpg or gif into the test frame. It may resize off this from, but it doesn't matter. Jpgs are worse"
  192. End Sub
  193.  
  194. Private Sub Form_Load()
  195. cboRotation.ListIndex = 0
  196. Command2.Enabled = False
  197. chkAntiRgn = 0
  198. End Sub
  199.  
  200. Private Sub Form_Unload(Cancel As Integer)
  201. Call Command2_Click
  202. Unload frmFloodFill
  203. End Sub
  204.  
  205. Private Sub mnuSample_Click(Index As Integer)
  206. Select Case Index
  207. Case 0: frmAni.Show
  208. Case 1: frmFloodFill.Show
  209. Case 2: frmRotation.Show
  210. Case 3: frmStretch.Show
  211. Case Else
  212. End Select
  213. End Sub
  214.  
  215. Private Sub Picture1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
  216. ' drag & drop to use selected file
  217.  
  218. If Data.Files.Count Then
  219.     On Error Resume Next
  220.     ' use only the first file if multiple files were dropped
  221.     Set Picture1.Picture = LoadPicture(Data.Files(1))
  222.     If Err Then
  223.         MsgBox "Failed to load that file. Try another", vbInformation + vbOKOnly
  224.         Err.Clear
  225.     Else
  226. '        ' update the flood fill example form with selected picture
  227. '        frmFloodFill.picFF.Cls
  228. '        With Picture1.Picture
  229. '            .Render frmFloodFill.picFF.hdc, 0, 0, ScaleX(.Width, vbHimetric, vbPixels), ScaleY(.Height, vbHimetric, vbPixels), _
  230. '                0, .Height, .Width, -.Height, ByVal 0&
  231. '        End With
  232. '        ' show it again if user closed it
  233. '        If frmFloodFill.Visible = False Then frmFloodFill.Show
  234.     End If
  235. End If
  236. End Sub
  237.