VB6 was made to perform well on ~1996 vintage hardware. That took a trick or three, it notably uses window-less controls. There was a price, VB6 controls are hard to customize and their look-and-feel pretty much set in stone. You can tell a VB6 app from a hundred feet away.
Winforms changed that, every control is a window, even a simple one like a Label. Several big advantages to doing it that way, the object model is very simple with the base object providing a lot of functionality that can be customized with very little code. And very good wysiwyg designer support. Which is also its big disadvantage, Winforms programmers tend to stuff a window with dozens if not hundreds of controls. Very easy to do, the designer makes it simple. There was a price, the dispatcher overhead is significant and most easily seen by it taking a while for all these windows to repaint themselves. Visibly, giving the perception of a slow program. The workaround is simple.
WPF went back to the VB6 approach and also uses window-less controls. But with a significantly improved DirectX-based rendering engine and strong support for look-and-feel customization. And a deep object model with a steep learning curve, the primary reason Winforms still is used. Windows-less controls are also available in Winforms from .NET 2.0 additions like the ToolStripItem classes and from component vendors like Telerik.