1. Рисовать что-либо нужно в WM_PAINT. Но вы НЕ должны вызывать повторную инвалидацию в WM_PAINT, да и работать с таймером нежелательно.
2. По срабатыванию таймера (т.е. или в WM_TIMER, или в колбэке, как вам удобно) нужно делать инвалидацию окна с помощью InvalidateRect или UpdateWindow. Вы НЕ должны рисовать в обработчике таймера.
Почитайте ещё про
виндовый механизм инвалидация-рисование, это критически важно для понимания происходящего. Вы не должны просить перерисовать что-либо напрямую. Вместо этого вы заявляете Винде, что вам больше "не нравится" какая-то область в окне (или всё окно целиком) и вы считаете эту область устаревшей и требующей обновления. Винда принимает это к сведению, и затем, через какое-то время, она пришлёт вам WM_PAINT, где вы всё нарисуете как считаете нужным.
Это удобно тем, что например если окно скрыто, Винда не посылает вам WM_PAINT и вы ничего не рисуете вообще, экономя ресурсы машины.
Если вы хотите добиться анимации, вам нужно регулярно (раз в N мс) заявлять Винде, что у вас устарело содержимое окна.