YES!! Finally I got it right. And thanks goes to de_jean_7777 for doubting my timing functions.

I made some test and noticed that my timer leaps forward on time to time for some sort of bug from Microsoft side (thats why my shuttle 'jumps' ahead between the frames). there's even knowledge artice on MSDN about that bug.

Now I'm using both timers (TimeGetTime and QueryPerformanceCounter) together and when other leaps ahead another, then time difference is fixed with some calculation of about what the time should be. (This I realized when I found an article telling about physics simulation on computer).

I also found that GetDevicaps() can retrieve minimum and maximum timer resolutions which I took to use with TimeBeginPeriod and TimeEndPeriod routines.

Now everything goes smoothly with decent ~2000 frames per second at my laptop (Core 2 Duo T9500 @ 2,4GHz with nVidia Quadro FX 1600M 512MB)

Tomorrow I will put up a new application which can be downloaded from here with a source code. No need for DIBs anymore. CompatibleBitmap does it what's expected.

Thanks again de_jean_7777 to point me to the right tracks.


edit: And what comes to that Meteors 'game' it uses excactly the same timing functions than that GDI blit example, but DirectX handles the bad behavior somehow 'silent' at background.

Here's the executable with the new timer. It's still very, very unfinished (no error handling, no DIB back buffer, no optimization and etc.), but one can try and see the difference.

Here you go: http://www.saunalahti.fi/hag/share/GDIBlitting2.exe