Sadly, I've programmed for Windows since 3.0. And it was only last year that I realized that WM_USER wasn't for "the code that called createwindow".
Hindsight 20/20 - perhaps WM_USER should have been WM_CLASS, and WM_APP -> WM_USER (I think of myself as the programmer of a dialog box as the user. Wrong I may be, but I also intuited that WM_APP would be application-domain and WM_USER would be local-window-domain.
I'm not sure why it took so many years to understand this distinction. I've read piles of books and read this blog for quite some time, your book, but for whatever reason, this piece of info never got past my "intuition filter."