BeginPaint() does a little more than GetDC(). For instance, it automatically validates the regions that have been invalidated. Because it sets up clipping regions so that you won't paint in areas that are not invalidated, BeginPaint() will often be faster than GetDC().
I use GetDC() when painting but not in response to a WM_PAINT message. For instance, if I set up a timer to animate a sprite or something, you have to use GetDC(). However, for the reasons stated above, I always use BeginPaint() in response to WM_PAINT.
Principal Engineer, Propel
Do not credit Propel with my views or opinions.