Basic DirectX window class
I have one big swooping recommendation that I feel you should address before tackling anything else:

Mind your class invariants!

When designing a class, ideally you want to ensure every single public member function handles correctly any possible valid state of the class, in conjunction with any possible passed argument. In your case, ask yourself:

What happens if Loop() gets called before Init()? What happens if Init() gets called twice in a row? What happens if Create3DWindow() is called after Init()?

A good way to tackle that is to define what's known as a class invariant. 

First, jot down on paper a description of the legal internal states of the class. That's known as the class invariant.

For example, you may want to have m_hInstance is either NULL or points to a window instance in your invariant definition, but m_hInstance points to a window instance would be even better, because it allows you to rely on that being true, so you don't have to constantly check.

Second, for each public member function, make sure that the function's behavior is well defined for every possible invariant state, and that it leaves the class in an invariant state after it's done. 

Mind you, it doesn't mean that every public member function must "work", just that it doesn't explode, cause memory leaks, etc...

Edit: There are some extreme exceptions to this, such as std::vector&lt;&gt;'s operator[]. But this is an exception, and the class' documentation makes it extremely clear that you enter no-mans land if you call that with an index outside of the bounds.