• ベストアンサー

VC++のシンボルブラウザについて

VC++の勉強をはじめた初心者です。 時計を表示させる機能を学習しているのですが、 コールバック関数を使わず、WM_TIMERメッセージのみで 作成しています。 そのときにシンボルブラウザで タイマーIDを追加する意味がわかりません。 もともと、シンボルブラウザとは??? っというところから疑問なのですが、 その後、 SetTimer(○○○,1000,NULL); とし、時計用タイマーをスタートさせているのですが、 WM_TIMERの関数OnTimerで CTimeクラスのインスタンスを生成して、 GetCurrentTimeを使っています。 なんだか、わかりづらい説明で申し訳ないのですが、 時計用タイマーをスタートさせておいて、 なぜ、GetCurrentTimeで現在の時間を取得するのか 同じことを2回やっているような~ なにをやっているんだろう?? っと、混乱気味です。 すいません。長くなってしまいましたが、 うまく説明できないこの意味を理解してもらえたら 教えてください。(シンボルブラウザの意味も、、、)

質問者が選んだベストアンサー

  • ベストアンサー
  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.2

> シンボルブラウザとは??? シンボルというのはぶっちゃけ、リソースファイルの中で #define IDR_MAINFRAME 128 のように定義されている定数の事です。 AppWizardを利用してプロジェクトを作成したのなら、[ファイル]-[開く]から"resource.h"を開いて下さい。 [表示]-[シンボルブラウザ]で表示した内容と(主要な部分が)一致しているハズです。 追加の手順はシンボルブラウザから「新規」のボタンで行っても、直接resource.hを書き換えても同じです。 -- > 同じことを2回やっているような~ Windowsのタイマー処理は、 ○「○秒後と指定した時間後にメッセージを送る。」 ×「○時○分と指定した時刻にメッセージを送る。」 前者の方しか出来ません。 しかも、この精度はかなり悪いです。他の重い処理が動作していれば、必ず1秒後に呼び出される保証はありません。 そこで、だいたい1秒くらいの間隔(OnTimer)で、現在の時刻(GetCurrentTime)を取得して画面に描画する。という方法が取られています。 試しに、SetTimerの際にCTimerの変数に現在時刻を格納して、OnTimerではそれに1秒加算した時刻を表示するようなプログラムに書き換えてみてください。 別の処理を動かすと、実際の時間とズレていくのが観察できると思います。

noriemon
質問者

お礼

詳しい説明ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

タイマーは複数作成することが出来ます。 それらはすべてWM_TIMERで送られてくるため、それぞれのどのタイマーから送られたものか判断する必要があります。 で、タイマーIDで判断することになります。

すると、全ての回答が全文表示されます。

関連するQ&A