Why are you creating a dummy window?
That should be done only if you need multisampling without FBO, in order to find appropriate pixel format.
That's actually the eventual plan.
However, the real reason is to make the design cleaner. Contexts require a window to be created, but this supposes that that window will be around forever. The way I've structured the architecture is to have a context wrapper object contain its own invisible window. So, the window that "owns" the context is guaranteed to be around for as long as the life of the context. This allows the user to create and destroy windows at will without affecting the context's existence.
In all other cases, you should do the following:
Don't I need to load extensions before using wglCreateContextAttribsARB?