Theming widgets

I'm starting to work on theming some widgets, and I've come up with a few methods of doing this:
1) Add theming code to every widget itself, static link to uxtheme.dll
2) Add theming code to every widget itself, using LoadLibrary/GetProcAddress
3) Subclass widgets when uxtheme.dll is loaded and override default painting
Windows takes a totally different approach, using a different version of common controls that implement
theming, under windows in order to enable theming you first need a manifest to load the proper version of comctrl32
then you also must call InitCommonControls which registers the standard controls (BUTTON,EDIT,etc)
Going with that, I think #3 might be the best option, and extend InitCommonControls to subclass the standard
controls if theming is enabled
Any comments/suggestions?