Well there a few tricks to using that method, first if your passing a WNDPROC to the base class, you can do it in your derived class like this:
thats 1 way of doing it if you want to use a global WndProc, its nicer than actually setting up the WNDCLASSEX struct to use the Globaly defined name, b/c 1 if you use these classes again, you dont have to worry about the name of the global WndProc, where as if you go with your approach on your site you would have to make sure you have the global name the same every time you use that class. 2nd you can also construt an object like this:
CAppWindow::CappWindow(HINSTANCE hInstance, int xpos, int ypos, int xsize, int ysize, WNDPROC WndProc)
Now this second method requires you to define a new static WindowProc in your derived class. Which is defeating the purpose of polymorphism, but it works extreamly well (dont know about speed compared to other methods but everything ive tried this way has worked). With this second method you can use just like the origional static WndProc in the main base class, but you can omit using a virtual WndProc function. I liked this at first but I think its cheating so I stay with the static WindowProc in the base class, and use virtual WndProc's in all my derived classes.
CAppWindow::CAppWindow(HINSTANCE hInstance, int xpos, int ypos, int xsize, int ysize)
: CWindow(hInstance, xpos, ypos, xsize, ysize, &this->WIndowProc)