• ベストアンサー

別のクラスからのタイマの起動方法

CXXXDlg ダイアログクラスに // ---------- タイムカウントタイマ起動 ---------- UINT CXXXDlg::StartTimeCount(UINT Interval) {   return SetTimer(1, Interval, NULL); } と言うメンバ関数を作り、別のクラスCTestで、下記の様な 感じでタイマ起動をしてOnTimerにて、ある変数のインクリ メント行おうとしているのですが、エラーが発生してしまいます。(コンパイルはOKです。OnTimerはもちろんCXXXDlgクラスに宣言) void CTest::TestTest() { CXXXDlg CXDlg; //100msタイマ起動 CXDlg.StartTimeCount(100); <- ここでエラー . . . (処理) . . . } WM_TIMERメッセージはウインドウが無いといけないことは 知っているのですが、上記の様な起動の仕方でも、やはり 駄目なのでしょうか?理由を教えて頂けるとありがたいで す。また、ダイアログクラスとは別のクラスでタイマの 起動・停止が可能でしたら、その方法もご存じの方 教えて下さい。 環境はWin2000 VC++ 6.0 SP6 MFC ダイアログベース です。よろしくお願いいたします。

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

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

>WM_TIMERメッセージはウインドウが無いといけないことは 知っているのですが、 >上記の様な起動の仕方でも、やはり 駄目なのでしょうか? >CXXXDlg CXDlg; > >//100msタイマ起動 >CXDlg.StartTimeCount(100); <- ここでエラー CXDlg.Create()を呼ばないとウィンドウが存在しないんですけど。 外から呼びたいんでしたら、まずウィンドウなりモードレスのダイアログなり先に作ってください。 >また、ダイアログクラスとは別のクラスでタイマの 起動・停止が可能でしたら、その方法もご存じの方 教えて下さい。 SetTimerでコールバック関数を指定。 もしくはtimeSetEvent等のマルチメディアタイマーを使うとか。

tamajun
質問者

お礼

マルチメディアタイマにて実現出来ました。 ありがとうございました。

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

その他の回答 (3)

  • hope10
  • ベストアンサー率48% (17/35)
回答No.4

>return SetTimer(1, Interval, NULL); これは CWnd::SetTimer を呼んでいるからです。 タイマだけでなく、ダイアログの基底のCWndはウィンドウが無いと殆ど使えません。これは基本ですね。 対処方法は他の方が言われてる通りです。

tamajun
質問者

お礼

ありがとうございました。 >これは CWnd::SetTimer を呼んでいるからです。 その通りですね。認識はしていたのですが、対処方法が 分かりませんでした。

すると、全ての回答が全文表示されます。
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>WM_TIMERメッセージはウインドウが無いといけないことは 知っているのですが、 >上記の様な起動の仕方でも、やはり 駄目なのでしょうか? >CXXXDlg CXDlg; > >//100msタイマ起動 >CXDlg.StartTimeCount(100); <- ここでエラー CXDlg.Create()を呼ばないとウィンドウが存在しないんですけど。 外から呼びたいんでしたら、まずウィンドウなりモードレスのダイアログなり先に作ってください。 >また、ダイアログクラスとは別のクラスでタイマの 起動・停止が可能でしたら、その方法もご存じの方 教えて下さい。 SetTimerでコールバック関数を指定。 もしくはtimeSetEvent等のマルチメディアタイマーを使うとか。

すると、全ての回答が全文表示されます。
  • keroro001
  • ベストアンサー率23% (71/304)
回答No.1

まったく自信なし。 ダイアログを生成してないからでは? Create後にやっても同じですかね? モーダルダイアログだと・・・うーん・・・

tamajun
質問者

お礼

ありがとうございました。マルチメディアタイマで 思っていた作業が出来ました。

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

関連するQ&A