秘密基地、どこに作った?

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 ダイアログベース
です。よろしくお願いいたします。

A 回答 (4件)

>WM_TIMERメッセージはウインドウが無いといけないことは


知っているのですが、
>上記の様な起動の仕方でも、やはり
駄目なのでしょうか?

>CXXXDlg CXDlg;
>
>//100msタイマ起動
>CXDlg.StartTimeCount(100); <- ここでエラー

CXDlg.Create()を呼ばないとウィンドウが存在しないんですけど。

外から呼びたいんでしたら、まずウィンドウなりモードレスのダイアログなり先に作ってください。

>また、ダイアログクラスとは別のクラスでタイマの
起動・停止が可能でしたら、その方法もご存じの方
教えて下さい。

SetTimerでコールバック関数を指定。
もしくはtimeSetEvent等のマルチメディアタイマーを使うとか。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/04/26 20:26

>return SetTimer(1, Interval, NULL);


これは CWnd::SetTimer を呼んでいるからです。
タイマだけでなく、ダイアログの基底のCWndはウィンドウが無いと殆ど使えません。これは基本ですね。

対処方法は他の方が言われてる通りです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/04/26 20:29

>WM_TIMERメッセージはウインドウが無いといけないことは


知っているのですが、
>上記の様な起動の仕方でも、やはり
駄目なのでしょうか?

>CXXXDlg CXDlg;
>
>//100msタイマ起動
>CXDlg.StartTimeCount(100); <- ここでエラー

CXDlg.Create()を呼ばないとウィンドウが存在しないんですけど。

外から呼びたいんでしたら、まずウィンドウなりモードレスのダイアログなり先に作ってください。

>また、ダイアログクラスとは別のクラスでタイマの
起動・停止が可能でしたら、その方法もご存じの方
教えて下さい。

SetTimerでコールバック関数を指定。
もしくはtimeSetEvent等のマルチメディアタイマーを使うとか。
    • good
    • 0

まったく自信なし。



ダイアログを生成してないからでは?
Create後にやっても同じですかね?
モーダルダイアログだと・・・うーん・・・
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/04/26 20:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報