Click here to Skip to main content
15,938,218 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I'm creating an app that is kinda like Adding custom skins for Forms in VB.Net[^] but with way more features.

One thing I'm stuck on is Aerosnap. Is there a way in VB.NET to make Aerosnap work like in Photoshop or iTunes?
Updated 22-Jun-10 6:44am

1 solution

Imports System.Data

Imports System.Drawing

Imports System.Text

Imports System.Windows.Forms

Imports System.Runtime.InteropServices

Public Class Form1

' Import functions from dwmapi.dll - get this info from the sdk dwmapi.h


Public Shared Sub DwmExtendFrameIntoClientArea(ByVal hWnd As System.IntPtr, ByRef pMargins As Margins)

End Sub


Public Shared Sub DwmIsCompositionEnabled(ByRef IsIt As Boolean)

End Sub

' Create the brush that'll work around the Alpha transparency issue

Private DWMFrame As SolidBrush = New SolidBrush(Color.Black)

Dim BlurBehind As Boolean = False

Dim MaxTrans As Boolean = False

Dim blurect As Boolean = False

' Create an instance of the Margins struct for use in our form

Private inset As Margins = New Margins

' Define the Margins struct - get this from dwmapi.h

Public Structure Margins

Public Left As Integer

Public Right As Integer

Public Top As Integer

Public Bottom As Integer

End Structure

Public Sub New()


' Set the Margins to their default values

inset.Top = 40

inset.Left = 0

inset.Right = 0

inset.Bottom = 0

' Check if DWM is enabled. This is a pretty stupid way to check, since it requires dwmapi.dll to be present anyway...

Dim isit As Boolean = False


If isit Then

' If DWM is enabled, call the function that gives us glass, passing a reference to our inset Margins

DwmExtendFrameIntoClientArea(Me.Handle, inset)


' If DWM isn't enabled, shout it out

MessageBox.Show("DWM isn't enabled")

End If

End Sub

Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)


Me.PaintSquare(e, Me.DWMFrame)

End Sub

Private Sub PaintSquare(ByRef e As System.Windows.Forms.PaintEventArgs, ByVal b As SolidBrush)

e.Graphics.FillRectangle(b, 0, 0, Width, inset.Top)

e.Graphics.FillRectangle(b, 0, 0, inset.Left, Height)

' Note the numbers ( -14, -34) are just trial-and-error values, used to fix the glass... try omitting them, you'll get the idea.

e.Graphics.FillRectangle(b, Width - inset.Right - 14, 0, inset.Right, Height)

e.Graphics.FillRectangle(b, 0, Height - inset.Bottom - 34, Width, inset.Bottom)

End Sub

End Class
Share this answer

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900