In answer to question 1, "Why do we need static member functions?"
I've used them in the past when I wanted to use a member function as a WNDPROC.
Since you can't use a non-static method as the callback that WndProc is, you need to create a static method. Then from within that static method you must determine which c++ object instance is pertinant to the particular window.
The practise leaves one feeling a little unlean, and is known as Thunking.
I first came across this use in the source-code for
Win32++[
^]
I'd assume that similar code was found within MFC