Click here to Skip to main content
Rate this: bad
Please Sign up or sign in to vote.
See more: Visual-Studio VB.NET
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?
Posted 21-Jun-10 11:17am
Edited 22-Jun-10 7:44am

1 solution

Rate this: bad
Please Sign up or sign in to vote.

Solution 1

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

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

  Print Answers RSS
0 Zoltán Zörgő 330
1 Peter Leow 120
2 BillWoodruff 120
3 CHill60 110
4 bling 80
0 Sergey Alexandrovich Kryukov 9,423
1 OriginalGriff 6,891
2 Peter Leow 4,637
3 Zoltán Zörgő 4,304
4 CHill60 2,932

Advertise | Privacy | Mobile
Web02 | 2.8.150129.1 | Last Updated 10 Sep 2011
Copyright © CodeProject, 1999-2015
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100