For those who remember the Common Controls OCX's featured in Visual Basic 5 and 6, there was one peculiarity of these. In Visual Basic 5, the Common Controls were linked directly to their shell counterparts. As the shell was updated, so did the look of any VB app using these. However, for Visual Basic 6, this behaviour was changed and they didn't use the shell for drawing.
Curiously enough, history repeats itself in a limited way with
Visual Studio .NET. If you use the
controls on Windows Vista or higher, you'll find they are
somewhat drawn according to the "classic" Windows style - no
gradients on selection highlights, column separators (ListView)
or alternate +/- glyphs (TreeView).
Fortunately however, it is quite simple to enable this with a
single call to the
SetWindowTheme API when creating the
In the sample application (available for download from the link
below), we create two new
which inherit from their
In each class, override the
OnHandleCreated method, and check
to see what OS is being run - if you try to call
SetWindowTheme on an unsupported OS, you'll get a crash. In
this case, I'm checking for Windows Vista or higher.
If the version is fine, call
SetWindowTheme with the handle of
the control, and the name of the shell style - explorer in
It's as simple as that - now when you run the application, the controls will be drawn using whatever shell styles are in use.
TreeView control, I'd also recommend setting the
ShowLines property to
false as it will look odd otherwise.
- 2011-04-16 - First published
- 2020-11-21 - Updated formatting
Like what you're reading? Perhaps you like to buy us a coffee?