Hmm... I'll give that a thought. Actually, I don't use InvalidateRect(), or UpdateWindow() either for that matter... I used to use RedrawWindow(), but not right now. I'm just using GetDC() to get the HDC for the screen, and storing it in the BUFFER struct. Then I SelectObject() a bitmap into dcBitmap (in the BUFFER), BitBlt() that into dcBack as well as whatever else, then BitBlt() dcBack into dcFront (the screen). Should I be doing something differently?
oh yeah... I don't know about the ship's position not changing, because when you press W, A, S, or D, it sets different bools to true, and when you release them, it sets them to false. Then ship.move() checks if they are true, and if they are, then it changes the ship's position.
And I don't see how Sleep() posting a message would help, because if it posts a message, wouldn't it skip the else?... besides, I'm not using any timers.