Top DevX Stories
Healthcare Adopts Virtualization, But Slowly
WorkLight Adds BlackBerry Support to its All-in-One Development Platform
Virtualization -- Security Is Still a Concern
iAd for Developers Called "Ineffective"
Choosing the Right Storage for Application Data
Search the forums:

Go Back   DevX.com Forums > DevX Developer Forums > VB Classic

Reply
 
Thread Tools Rate Thread Display Modes
  #1  
Old 10-07-2001, 09:30 AM
Tim Manos
Guest
 
Posts: n/a
AnimateWindow API

Hi all,

I'm trying to animate a splash screen form using the API function
AnimateWindow as shown below:

Sub Main()
Dim aFrm As New frmSpash
Load aFrm
aFrm.Move (Screen.Width - aFrm.Width) / 2, (Screen.Height - aFrm.Height) /
2
Call AnimateWindow(aFrm.hwnd, AW_DURATION_DEFAULT, AW_CENTER Or
AW_VER_POSITIVE)
aFrm.Show '-- although calling this has no affect because the form shows
afrer the _
previous line of code
aFrm.Refresh
End Sub

Private Sub Form_Unload(Cancel As Integer)
Call AnimateWindow(Me.hwnd, AW_DURATION_DEFAULT, AW_HIDE Or AW_CENTER)
Refresh
End Sub

Here are the declares:
Public Const AW_HOR_POSITIVE = &H1
Public Const AW_HOR_NEGATIVE = &H2
Public Const AW_VER_POSITIVE = &H4
Public Const AW_VER_NEGATIVE = &H8
Public Const AW_CENTER = &H10
Public Const AW_HIDE = &H10000
Public Const AW_ACTIVATE = &H20000
Public Const AW_SLIDE = &H40000
Public Const AW_BLEND = &H80000
Public Const AW_DURATION_DEFAULT = 200
Public Declare Function AnimateWindow Lib "user32" (ByVal hwnd As Long, _

ByVal dwTime As Long, _

ByVal dwFlags As Long) As Long

Although the animation itself works there are two things that look very
unprofessional:
1. During the animation the from's background looks like an abstract art
painting.
2. I can only animate forms whose BorderStyle is other that 0 (and that's
the style you usually need for a splash screen)

Has any of you have a solution to those issues?

Thanks in advance

Tim




Reply With Quote
  #2  
Old 10-08-2001, 11:26 AM
Kevin Westhead
Guest
 
Posts: n/a
Re: AnimateWindow API

You need to handle the WM_PRINTCLIENT message to do this properly, and even
then there are problems depending on what controls you have on the form. The
following sites have samples that might help you:

http://www.domaindlx.com/e_morcillo/
http://www.vbthunder.com/

--
Kevin Westhead

"Tim Manos" <timmanos@t-online.de> wrote in message
news:3bc057d3$1@news.devx.com...
> Although the animation itself works there are two things that look very
> unprofessional:
> 1. During the animation the from's background looks like an abstract

art
> painting.
> 2. I can only animate forms whose BorderStyle is other that 0 (and

that's
> the style you usually need for a splash screen)
>
> Has any of you have a solution to those issues?
>
> Thanks in advance
>
> Tim




Reply With Quote
  #3  
Old 10-08-2001, 11:26 AM
Kevin Westhead
Guest
 
Posts: n/a
Re: AnimateWindow API

You need to handle the WM_PRINTCLIENT message to do this properly, and even
then there are problems depending on what controls you have on the form. The
following sites have samples that might help you:

http://www.domaindlx.com/e_morcillo/
http://www.vbthunder.com/

--
Kevin Westhead

"Tim Manos" <timmanos@t-online.de> wrote in message
news:3bc057d3$1@news.devx.com...
> Although the animation itself works there are two things that look very
> unprofessional:
> 1. During the animation the from's background looks like an abstract

art
> painting.
> 2. I can only animate forms whose BorderStyle is other that 0 (and

that's
> the style you usually need for a splash screen)
>
> Has any of you have a solution to those issues?
>
> Thanks in advance
>
> Tim




Reply With Quote
  #4  
Old 10-19-2001, 06:06 AM
Hitesh Sadarangani
Guest
 
Posts: n/a
Re: AnimateWindow API

You can try this bit of code..
It helped me get over that Artwork while the forms is loading....

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''
Const GWL_WNDPROC = (-4)

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA"
( _
ByVal hWnd As Long, _
ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA"
( _
ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

Const PROP_PREVPROC = "PrevProc"
Const PROP_FORM = "FormObject"

Private Declare Function SetProp Lib "user32" Alias "SetPropA" ( _
ByVal hWnd As Long, _
ByVal lpString As String, _
ByVal hData As Long) As Long
Private Declare Function GetProp Lib "user32" Alias "GetPropA" ( _
ByVal hWnd As Long, _
ByVal lpString As String) As Long
Private Declare Function RemoveProp Lib "user32" Alias "RemovePropA" ( _
ByVal hWnd As Long, _
ByVal lpString As String) As Long

Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
Dest As Any, _
Src As Any, _
ByVal DestL As Long)

Const WM_PRINTCLIENT = &H318

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Declare Function GetClientRect Lib "user32" ( _
ByVal hWnd As Long, _
lpRect As RECT) As Long

Private Declare Function apiOleTranslateColor Lib "oleaut32" Alias
"OleTranslateColor" ( _
ByVal lOleColor As Long, _
ByVal lHPalette As Long, _
lColorRef As Long) As Long

Enum AnimateWindowFlags
AW_HOR_POSITIVE = &H1
AW_HOR_NEGATIVE = &H2
AW_VER_POSITIVE = &H4
AW_VER_NEGATIVE = &H8
AW_CENTER = &H10
AW_HIDE = &H10000
AW_ACTIVATE = &H20000
AW_SLIDE = &H40000
AW_BLEND = &H80000
End Enum

Private Declare Function apiAnimateWindow Lib "user32" Alias "AnimateWindow"
( _
ByVal hWnd As Long, _
ByVal dwTime As Long, _
ByVal dwFlags As Long) As Long

Private Declare Function MulDiv Lib "kernel32" ( _
ByVal Mul As Long, _
ByVal Nom As Long, _
ByVal Den As Long) As Long

Private Declare Function CreateSolidBrush Lib "gdi32" ( _
ByVal crColor As Long) As Long
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

Private Declare Function GetDC Lib "user32" ( _
ByVal hWnd As Long) As Long
Private Declare Function CreateCompatibleDC Lib "gdi32" ( _
ByVal hDC As Long) As Long
Private Declare Function ReleaseDC Lib "user32" ( _
ByVal hWnd As Long, _
ByVal hDC As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" ( _
ByVal hDC As Long) As Long
Private Declare Function FillRect Lib "user32" ( _
ByVal hDC As Long, _
lpRect As RECT, _
ByVal hBrush As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" ( _
ByVal hObject As Long) As Long
Private Declare Function SelectObject Lib "gdi32" ( _
ByVal hDC As Long, _
ByVal hObject As Long) As Long

Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA"
( _
ByVal lpPrevWndFunc As Long, _
ByVal hWnd As Long, _
ByVal Msg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long

'
' AnimateWindow
'
' Wrapper for AnimateWindow api
'
Public Sub AnimateWindow( _
ByVal Form As Form, _
ByVal dwTime As Long, _
ByVal dwFlags As AnimateWindowFlags)

' Set the properties
SetProp Form.hWnd, PROP_PREVPROC, GetWindowLong(Form.hWnd, GWL_WNDPROC)
SetProp Form.hWnd, PROP_FORM, ObjPtr(Form)

' Subclass the window
SetWindowLong Form.hWnd, GWL_WNDPROC, AddressOf AnimateWinProc

' Call AnimateWindow API
apiAnimateWindow Form.hWnd, dwTime, dwFlags

' Unsubclass the window
SetWindowLong Form.hWnd, GWL_WNDPROC, GetProp(Form.hWnd, PROP_PREVPROC)

' Remove the properties
RemoveProp Form.hWnd, PROP_FORM
RemoveProp Form.hWnd, PROP_PREVPROC

' Refresh the form
'Form.Refresh

End Sub

'
' AnimateWinProc
'
' Window procedure for AnimateWindow
'
Private Function AnimateWinProc( _
ByVal hWnd As Long, _
ByVal Msg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long

Dim lPrevProc As Long
Dim lForm As Long
Dim oForm As Form

' Get the previous WinProc pointer
lPrevProc = GetProp(hWnd, PROP_PREVPROC)

' Get the form object
lForm = GetProp(hWnd, PROP_FORM)
MoveMemory oForm, lForm, 4&

Select Case Msg

Case WM_PRINTCLIENT
Dim tRect As RECT
Dim hBr As Long

' Get the window client size
GetClientRect hWnd, tRect

' Create a brush with the
' form background color
hBr = CreateSolidBrush(OleTranslateColor(oForm.BackColor))

' Fill the DC with the
' background color
FillRect wParam, tRect, hBr

' Delete the brush
DeleteObject hBr

If Not oForm.Picture Is Nothing Then
Dim lScrDC As Long
Dim lMemDC As Long
Dim lPrevBMP As Long

' Create a compatible DC
lScrDC = GetDC(0&)
lMemDC = CreateCompatibleDC(lScrDC)
ReleaseDC 0, lScrDC

' Select the form picture in the DC
lPrevBMP = SelectObject(lMemDC, oForm.Picture.Handle)

' Draw the picture in the DC
BitBlt wParam, _
0, 0, _
HM2Pix(oForm.Picture.Width), HM2Pix(oForm.Picture.Height), _
lMemDC, 0, 0, vbSrcCopy

' Release the picture
SelectObject lMemDC, lPrevBMP

' Delete the DC
DeleteDC lMemDC

End If

End Select

' Release the form object
MoveMemory oForm, 0&, 4&

' Call the original window procedure
AnimateWinProc = CallWindowProc(lPrevProc, hWnd, Msg, wParam, lParam)

End Function

'
' HM2Pix
'
' Converts HIMETRIC to Pixel
'
Private Function HM2Pix(ByVal Value As Long) As Long

HM2Pix = MulDiv(Value, 1440, 2540) / Screen.TwipsPerPixelX

End Function

'
' OleTranslateColor
'
' Wrapper for OleTranslateColor API
'
Private Function OleTranslateColor(ByVal Clr As Long) As Long
apiOleTranslateColor Clr, 0, OleTranslateColor
End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''

regards,
Hitesh.

"Tim Manos" <timmanos@t-online.de> wrote in message
news:3bc057d3$1@news.devx.com...
> Hi all,
>
> I'm trying to animate a splash screen form using the API function
> AnimateWindow as shown below:
>
> Sub Main()
> Dim aFrm As New frmSpash
> Load aFrm
> aFrm.Move (Screen.Width - aFrm.Width) / 2, (Screen.Height - aFrm.Height)

/
> 2
> Call AnimateWindow(aFrm.hwnd, AW_DURATION_DEFAULT, AW_CENTER Or
> AW_VER_POSITIVE)
> aFrm.Show '-- although calling this has no affect because the form shows
> afrer the _
> previous line of code
> aFrm.Refresh
> End Sub
>
> Private Sub Form_Unload(Cancel As Integer)
> Call AnimateWindow(Me.hwnd, AW_DURATION_DEFAULT, AW_HIDE Or AW_CENTER)
> Refresh
> End Sub
>
> Here are the declares:
> Public Const AW_HOR_POSITIVE = &H1
> Public Const AW_HOR_NEGATIVE = &H2
> Public Const AW_VER_POSITIVE = &H4
> Public Const AW_VER_NEGATIVE = &H8
> Public Const AW_CENTER = &H10
> Public Const AW_HIDE = &H10000
> Public Const AW_ACTIVATE = &H20000
> Public Const AW_SLIDE = &H40000
> Public Const AW_BLEND = &H80000
> Public Const AW_DURATION_DEFAULT = 200
> Public Declare Function AnimateWindow Lib "user32" (ByVal hwnd As Long, _
>
> ByVal dwTime As Long, _
>
> ByVal dwFlags As Long) As Long
>
> Although the animation itself works there are two things that look very
> unprofessional:
> 1. During the animation the from's background looks like an abstract

art
> painting.
> 2. I can only animate forms whose BorderStyle is other that 0 (and

that's
> the style you usually need for a splash screen)
>
> Has any of you have a solution to those issues?
>
> Thanks in advance
>
> Tim
>
>
>
>



Reply With Quote
  #5  
Old 10-19-2001, 06:06 AM
Hitesh Sadarangani
Guest
 
Posts: n/a
Re: AnimateWindow API

You can try this bit of code..
It helped me get over that Artwork while the forms is loading....

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''
Const GWL_WNDPROC = (-4)

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA"
( _
ByVal hWnd As Long, _
ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA"
( _
ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

Const PROP_PREVPROC = "PrevProc"
Const PROP_FORM = "FormObject"

Private Declare Function SetProp Lib "user32" Alias "SetPropA" ( _
ByVal hWnd As Long, _
ByVal lpString As String, _
ByVal hData As Long) As Long
Private Declare Function GetProp Lib "user32" Alias "GetPropA" ( _
ByVal hWnd As Long, _
ByVal lpString As String) As Long
Private Declare Function RemoveProp Lib "user32" Alias "RemovePropA" ( _
ByVal hWnd As Long, _
ByVal lpString As String) As Long

Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
Dest As Any, _
Src As Any, _
ByVal DestL As Long)

Const WM_PRINTCLIENT = &H318

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Declare Function GetClientRect Lib "user32" ( _
ByVal hWnd As Long, _
lpRect As RECT) As Long

Private Declare Function apiOleTranslateColor Lib "oleaut32" Alias
"OleTranslateColor" ( _
ByVal lOleColor As Long, _
ByVal lHPalette As Long, _
lColorRef As Long) As Long

Enum AnimateWindowFlags
AW_HOR_POSITIVE = &H1
AW_HOR_NEGATIVE = &H2
AW_VER_POSITIVE = &H4
AW_VER_NEGATIVE = &H8
AW_CENTER = &H10
AW_HIDE = &H10000
AW_ACTIVATE = &H20000
AW_SLIDE = &H40000
AW_BLEND = &H80000
End Enum

Private Declare Function apiAnimateWindow Lib "user32" Alias "AnimateWindow"
( _
ByVal hWnd As Long, _
ByVal dwTime As Long, _
ByVal dwFlags As Long) As Long

Private Declare Function MulDiv Lib "kernel32" ( _
ByVal Mul As Long, _
ByVal Nom As Long, _
ByVal Den As Long) As Long

Private Declare Function CreateSolidBrush Lib "gdi32" ( _
ByVal crColor As Long) As Long
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

Private Declare Function GetDC Lib "user32" ( _
ByVal hWnd As Long) As Long
Private Declare Function CreateCompatibleDC Lib "gdi32" ( _
ByVal hDC As Long) As Long
Private Declare Function ReleaseDC Lib "user32" ( _
ByVal hWnd As Long, _
ByVal hDC As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" ( _
ByVal hDC As Long) As Long
Private Declare Function FillRect Lib "user32" ( _
ByVal hDC As Long, _
lpRect As RECT, _
ByVal hBrush As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" ( _
ByVal hObject As Long) As Long
Private Declare Function SelectObject Lib "gdi32" ( _
ByVal hDC As Long, _
ByVal hObject As Long) As Long

Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA"
( _
ByVal lpPrevWndFunc As Long, _
ByVal hWnd As Long, _
ByVal Msg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long

'
' AnimateWindow
'
' Wrapper for AnimateWindow api
'
Public Sub AnimateWindow( _
ByVal Form As Form, _
ByVal dwTime As Long, _
ByVal dwFlags As AnimateWindowFlags)

' Set the properties
SetProp Form.hWnd, PROP_PREVPROC, GetWindowLong(Form.hWnd, GWL_WNDPROC)
SetProp Form.hWnd, PROP_FORM, ObjPtr(Form)

' Subclass the window
SetWindowLong Form.hWnd, GWL_WNDPROC, AddressOf AnimateWinProc

' Call AnimateWindow API
apiAnimateWindow Form.hWnd, dwTime, dwFlags

' Unsubclass the window
SetWindowLong Form.hWnd, GWL_WNDPROC, GetProp(Form.hWnd, PROP_PREVPROC)

' Remove the properties
RemoveProp Form.hWnd, PROP_FORM
RemoveProp Form.hWnd, PROP_PREVPROC

' Refresh the form
'Form.Refresh

End Sub

'
' AnimateWinProc
'
' Window procedure for AnimateWindow
'
Private Function AnimateWinProc( _
ByVal hWnd As Long, _
ByVal Msg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long

Dim lPrevProc As Long
Dim lForm As Long
Dim oForm As Form

' Get the previous WinProc pointer
lPrevProc = GetProp(hWnd, PROP_PREVPROC)

' Get the form object
lForm = GetProp(hWnd, PROP_FORM)
MoveMemory oForm, lForm, 4&

Select Case Msg

Case WM_PRINTCLIENT
Dim tRect As RECT
Dim hBr As Long

' Get the window client size
GetClientRect hWnd, tRect

' Create a brush with the
' form background color
hBr = CreateSolidBrush(OleTranslateColor(oForm.BackColor))

' Fill the DC with the
' background color
FillRect wParam, tRect, hBr

' Delete the brush
DeleteObject hBr

If Not oForm.Picture Is Nothing Then
Dim lScrDC As Long
Dim lMemDC As Long
Dim lPrevBMP As Long

' Create a compatible DC
lScrDC = GetDC(0&)
lMemDC = CreateCompatibleDC(lScrDC)
ReleaseDC 0, lScrDC

' Select the form picture in the DC
lPrevBMP = SelectObject(lMemDC, oForm.Picture.Handle)

' Draw the picture in the DC
BitBlt wParam, _
0, 0, _
HM2Pix(oForm.Picture.Width), HM2Pix(oForm.Picture.Height), _
lMemDC, 0, 0, vbSrcCopy

' Release the picture
SelectObject lMemDC, lPrevBMP

' Delete the DC
DeleteDC lMemDC

End If

End Select

' Release the form object
MoveMemory oForm, 0&, 4&

' Call the original window procedure
AnimateWinProc = CallWindowProc(lPrevProc, hWnd, Msg, wParam, lParam)

End Function

'
' HM2Pix
'
' Converts HIMETRIC to Pixel
'
Private Function HM2Pix(ByVal Value As Long) As Long

HM2Pix = MulDiv(Value, 1440, 2540) / Screen.TwipsPerPixelX

End Function

'
' OleTranslateColor
'
' Wrapper for OleTranslateColor API
'
Private Function OleTranslateColor(ByVal Clr As Long) As Long
apiOleTranslateColor Clr, 0, OleTranslateColor
End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''

regards,
Hitesh.

"Tim Manos" <timmanos@t-online.de> wrote in message
news:3bc057d3$1@news.devx.com...
> Hi all,
>
> I'm trying to animate a splash screen form using the API function
> AnimateWindow as shown below:
>
> Sub Main()
> Dim aFrm As New frmSpash
> Load aFrm
> aFrm.Move (Screen.Width - aFrm.Width) / 2, (Screen.Height - aFrm.Height)

/
> 2
> Call AnimateWindow(aFrm.hwnd, AW_DURATION_DEFAULT, AW_CENTER Or
> AW_VER_POSITIVE)
> aFrm.Show '-- although calling this has no affect because the form shows
> afrer the _
> previous line of code
> aFrm.Refresh
> End Sub
>
> Private Sub Form_Unload(Cancel As Integer)
> Call AnimateWindow(Me.hwnd, AW_DURATION_DEFAULT, AW_HIDE Or AW_CENTER)
> Refresh
> End Sub
>
> Here are the declares:
> Public Const AW_HOR_POSITIVE = &H1
> Public Const AW_HOR_NEGATIVE = &H2
> Public Const AW_VER_POSITIVE = &H4
> Public Const AW_VER_NEGATIVE = &H8
> Public Const AW_CENTER = &H10
> Public Const AW_HIDE = &H10000
> Public Const AW_ACTIVATE = &H20000
> Public Const AW_SLIDE = &H40000
> Public Const AW_BLEND = &H80000
> Public Const AW_DURATION_DEFAULT = 200
> Public Declare Function AnimateWindow Lib "user32" (ByVal hwnd As Long, _
>
> ByVal dwTime As Long, _
>
> ByVal dwFlags As Long) As Long
>
> Although the animation itself works there are two things that look very
> unprofessional:
> 1. During the animation the from's background looks like an abstract

art
> painting.
> 2. I can only animate forms whose BorderStyle is other that 0 (and

that's
> the style you usually need for a splash screen)
>
> Has any of you have a solution to those issues?
>
> Thanks in advance
>
> Tim
>
>
>
>



Reply With Quote
Reply

Bookmarks

Thread Tools
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Forum Jump


All times are GMT -4. The time now is 02:49 AM.


Sponsored Links



Acceptable Use Policy

Internet.com
The Network for Technology Professionals

Search:

About Internet.com

Legal Notices, Licensing, Permissions, Privacy Policy.
Advertise | Newsletters | E-mail Offers


Powered by vBulletin® Version 3.7.3
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.