Creating Translucent/Transparent Windows in VB (1) | CodeGuru

Creating Translucent/Transparent Windows in VB (1)

Translucent/Transparent Windows in VB (1) Definitions Transparent: Fully see-through Translucent: Partly transparent Introduction In this two-part article, I discuss how to get translucent/transparent windows. I’m writing two parts because I don’t want to confuse anyone. And, to keep things simple, I will not discuss the theory behind translucency in either part of this article. Part […]

Written By
CodeGuru Staff
CodeGuru Staff
Apr 21, 2004
2 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

Translucent/Transparent Windows in VB (1)

Definitions

Transparent: Fully see-through

Translucent: Partly transparent

Introduction

In this two-part article, I discuss how to get translucent/transparent windows. I’m writing two parts because I don’t want to confuse anyone.

And, to keep things simple, I will not discuss the theory behind translucency in either part of this article. Part 1 will show you how to make the whole window translucent/transparent (the whole VB Form, including controls). The second part will show you how to make certain parts of the window transparent by using a color value. Here we go….

Just make these three API calls and you get a translucent/transparent window:

  • GetWindowLong
  • SetWindowLong
  • SetLayeredWindowAttributes

GetWindowLong returns the window’s attributes. We are interested in the GWL_EXSTYLE attribute.

Public Declare Function GetWindowLong Lib "user32" Alias
"GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
   hwnd : Handle to window(VB Form) ex. Me.hwnd

nIndex: offset of attribute (ex. GWL_EXSTYLE)

Return Value: The value of the requested attribute. For example:

dim attrib as long
   attrib = GetWindowLong(Me.hwnd, GWL_EXSTYLE)

We will use the value returned in the SetWindowLong function.

SetWindowLong sets the window’s attributes. Again, we are interested in the GWL_EXSTYLE attribute.

Public Declare Function SetWindowLong Lib "user32"
       Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal _
       nIndex As Long, ByVal dwNewLong As Long) As Long

hwnd: Handle to window(VB Form) ex. Me.hwnd

nIndex: offset of attribute(ex. GWL_EXSTYLE)

Example:

dim attrib as long
   attrib = GetWindowLong(Me.hwnd, GWL_EXSTYLE)
   SetWindowLong Me.hwnd, attrib OR WS_EX_LAYERED

GWL_EXSTYLE must be set to WS_EX_LAYERED because the Set SetLayeredWindowAttributes function requires a handle to a layered window.

SetLayeredWindowAttributes is responsible for translucency.

Public Declare Function SetLayeredWindowAttributes Lib _
   "user32" (ByVal hwnd As Long, ByVal color As _
   Long, ByVal bAlpha As Byte, _
   ByVal alpha As Long) As Boolean

hwnd: Handle to layered window. For example, Me.hwnd.

color: Color used to make areas of a window completely transparent (see Translucent/Transparent Windows in VB, Part 2).

bAlpha: Value between 0 (transparent) and 255 (opaque) for alpha blend function.

Flag: Value between 1 and 3. We will use 2 (alpha) in this part, and we will use 1 (ColorKey), 2, and 3 (Both) in Part 2 of this article.

The way it works is that we get the current GWL_EXSTYLE by using GetWindowLong, and then we make it layered by using an OR operation between its current value and WS_EX_LAYERED by using SetWindowLong, and finally we make it translucent by using SetLayeredWindowAttributes.

Okay. We have all our tools and we know what to do, so let’s do it. I decided to make a little Sub SetTranslucent for the job.

Sub SetTranslucent(ThehWnd As Long, nTrans As Integer)
On Error GoTo ErrorRtn

   Dim attrib As Long

   'put current GWL_EXSTYLE in attrib
   attrib = GetWindowLong(ThehWnd, GWL_EXSTYLE)

   'change GWL_EXSTYLE to WS_EX_LAYERED - makes a window layered
   SetWindowLong ThehWnd, GWL_EXSTYLE, attrib Or WS_EX_LAYERED

   'Make transparent (RGB value does not have any effect at this
   'time, will in Part 2 of this article)
   SetLayeredWindowAttributes ThehWnd, RGB(0, 0, 0), nTrans, _
                                       LWA_ALPHA
   Exit Sub

ErrorRtn:
MsgBox Err.Description & " Source : " & Err.Source

End Sub

Now, just call the sub:

Private Sub Form_Load()
   SetTranslucent Me.hwnd, 150
End Sub

That’s all there is to it. In Part 2, I discuss how to make ‘holes’ in your window by sending a ColorKey and a flag to the SetLayeredWindowAttributes function.

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.