回答編集履歴
1
マルチメディアタイマーについて言及
answer
CHANGED
@@ -2,8 +2,13 @@
|
|
2
2
|
SetTimer(hWnd, 1, 1, NULL);//タイマースタート
|
3
3
|
```
|
4
4
|
|
5
|
-
1ミリ秒間隔で `WM_TIMER` が来る想定になっていますが、タイマーの精度はそんなに高くできません。実際には10ミリ秒以上になります。
|
5
|
+
1ミリ秒間隔で `WM_TIMER` が来る想定になっていますが、タイマーの精度はそんなに高くできません。実際には10ミリ秒以上になります。また、10を指定しても`WM_TIMER` が来る間隔が10ミリ秒を超えることがあります。
|
6
|
+
|
6
7
|
https://learn.microsoft.com/ja-jp/windows/win32/api/winuser/nf-winuser-settimer
|
7
8
|
> _uElapse_ が`USER_TIMER_MINIMUM`未満 (0x0000000A) の場合、タイムアウトは `USER_TIMER_MINIMUM` に設定されます。
|
8
9
|
|
9
10
|
タイマー開始時に時刻を保存しておき、`WM_PAINT` 内では現在時刻とタイマー開始時刻の差から現在の透明度を決めるようにしましょう。
|
11
|
+
|
12
|
+
[マルチメディアタイマー](https://learn.microsoft.com/ja-jp/windows/win32/multimedia/about-multimedia-timers)を使うとより高精度にできた記憶がありますが、どちらにしても現在の一般的なディスプレイでは1秒間に1000回も描画できません。一般的には60回が上限です。
|
13
|
+
|
14
|
+
|