It works for me, no WM_PAINT BeginPaint and EndPaint in my source.
Although only tested with DrawText directly to the Window.
Got the interrupt timer implemented and synchronized it with the VerticalBlank.
It stays nicely within the VerticalBlank period at 60 Hz.

Is FillRect the fastest way to clear a buffer?
Or are there different ways to clear buffers in SytemMem and VideoMem.
Next step is the double buffering and drawing some graphics.
Study the DIB and DDB first, there are so many possibilities in GDI.

Hope it works....
EDIT: When done drawing I validate the window with " invoke ValidateRect,hWnd,NULL "
MSDN: Handle to the window whose update region is to be modified. If this parameter is NULL, the system invalidates and redraws all windows.