質問じゃないけど、誰か VC++メーリングリストの
[mfc 49038] 1ヶ月経過したかどうか(SetTimerのタイムアウト値)
に返信してやってくれないかね。誰も SetTimer() の仕様について
解説していないんだ。参考程度の情報だが、ぜひ教えてやって欲しい。

------
最新のMSDNでは「Win2000では SetTimer の上限値
USER_TIMER_MAXIMUM 以上の値をセットすると
1 がセットされる事になる」と書かれてある。
現在は "USER_TIMER_MAXIMUM" という表現になっているが
ここはつい最近まで "0x7fffffff" という数値で記述されていた。
これはアンタが試した

>  1. 2147483647 → 正常
>  (実際にこの時間が経過したときにOnTimerが呼ばれるかどうかの確認は難しく、できていません)
>
>  2. 2147483648 → 異常
>  (すぐにOnTimerが呼ばれてしまいます)

という挙動にぴったり当てはまる。つまりこれは仕様って事。
1ヶ月の milliseconds はおよそ 0x9A7EC800 で 0x7fffffff を超えてしまうから
1ヶ月を測るのに SetTimer() は (余程工夫しない限り) 使えないって事ね。