タイマーイベント? – プログラミング – Home

通知
すべてクリア

[解決済] タイマーイベント?


syo-san
 syo-san
(@syo-san)
ゲスト
結合: 23年前
投稿: 5
Topic starter  

タイマーイベントに関して質問があります。
MFCでソフトを作っているのですが
今使われているタイマーイベントの生成は
SetTimer(10,1000,NULL); //1秒ごとにタイマーイベントを発生
となっています。ですがヘルプを見ると第一引数はハンドルで
タイマーを消滅させるときもそのハンドルを使うように書いています。

そこで
HWND timer;
SetTimer(timer,10,1000,NULL);
としてみたところ「不正な4つの引数・・・」と出てしまいました。
MFCで使われるSetTimerはSDKのものとは違うのでしょうか。
それとも何か単純な勘違いをしているのでしょうか

VC++6.0/MFC使用


引用未解決
トピックタグ
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

困ったときにはまずMSDN。

UINT CWnd::SetTimer( UINT nIDEvent, UINT nElapse, void
(CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD) );

UINT SetTimer(
HWND hWnd, // handle of window for timer messages
UINT nIDEvent, // timer identifier
UINT uElapse, // time-out value
TIMERPROC lpTimerFunc // address of timer procedure
);

ちがいますね。


返信引用
syo-san
 syo-san
(@syo-san)
ゲスト
結合: 23年前
投稿: 5
Topic starter  

あ。。見るところが違っていましたね・・
ありがとうございます。無事解決です。

SetTimer(10,1000,NULL);
KillTimer(10);


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 188
 

昔どこかで書いた記憶がありますが、

>タイマーを消滅させるときもそのハンドルを使うように書いています。
>SetTimer(10,1000,NULL);
>KillTimer(10);

厳密には、タイマーを消滅させる場合とOnTimerで使用するIDは、関数の戻り値を使うべきだ
と、MSDNに書いてあると思います。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

ちょっと気になって読んでみたのですが、
MSDN(英語)のSetTimerの戻り値の解説には、次のように書いてあります。
(適当に訳してます)

| hWndがNULLの時、戻り値は新しいタイマーの識別子です。
| アプリケーションは、この値をKillTimerに渡してタイマー
| を停止させることができます。
|
| hWndがNULLでない場合、戻り値は非ゼロの整数です。
| アプリケーションは、nIDEventパラメータの値をKillTimer
| に渡してタイマーを停止させることができます。

hWndにNULL以外を指定した場合、戻り値をIDとして使っては
いけないような記述に読めますが、いかがでしょう?


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 188
 

dairygoodsさんのおっしゃる通りみたいですね・・(^^;

MSDNの ::SetTimer(英語)も確認しましたが確かにそのように書いてありました

---

CWnd::SetTimerで起動したタイマは、引数をそのまま使用して停止

CWnd::SetTimer( nIDEvent, ... );
CWnd::KillTimer( nIDEvent, ... );

::SetTimerで起動したウインドウに結びつくタイマも、引数をそのまま使用して停止

::SetTimer( hWnd, nIDEvent, ... );
::KillTimer( hWnd, nIDEvent, ... );

::SetTimerで起動したグローバルタイマは、戻り値を使用して停止

UINT nRetIDEvent = ::SetTimer( NULL, nIDEvent, ... );
::KillTimer( NULL, uRetIDEvent, ... );

----
以上が正しいようですね・・

日本語MSDNの変換ミスみたいですね・・・(汗

日本語版だけMSDN通りの仕様と言う可能性もありますが、
考えられませんね・・・

私がMSDNに騙されていた模様・・


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました