dポイントプレゼントキャンペーン実施中!

開発環境
VC++6.0
WindowsXP Home

CDateTimeCtrl(日時指定プロパティ)を使用していますが、
日付を変更した場合はメッセージを表示して、ある処理を行おうと思っています。

ドロップダウンで月のカレンダーを表示させ、
前月または次月などを行います。(何度か同じ処理を繰り返す)
日付が変更されるため、メッセージが表示されます。
「OKボタン」クリック後に自動的に次月→次月→次月・・・・と繰り返されます。

これはバグでしょうか?
また、回避策はありますでしょうか?


下記はサンプルプログラムです

void クラス::OnDatetimechangeXX(NMHDR* pNMHDR, LRESULT* pResult)
{
AfxMessageBox( "メッセージ", MB_ICONEXCLAMATION );
}

以上、ご教授よろしくお願いします

A 回答 (1件)

DateTimePickerコントロールで何かを変更してChangeイベントが発生し、その処理中にフォーカスが移動すると、同じ「変更」が発生して新たなChangeイベントが発生するようです。



ウィンドウ描画においてPaintイベント処理中にウィンドウ上のコントロールを変更すると再度Paintイベントが発生してしまうようなもので、とりたてて「バグ」と呼ぶには当たらず「制限事項」程度ではないかと思います。

回避方法としては

(1) Changeイベント処理中はメッセージボックス表示を行わず、これに代わって例えばウィンドウ上に用意したStaticにメッセージを表示する等する。

(2) メッセージボックスを表示したい場合は、Changeイベントの中ではフラグを立てるだけにしておき、Changeイベントを終了してからメッセージボックスを表示する。(例えば自ウィンドウに「メッセージボックス表示要求メッセージ」をPostしておく等。)

という感じかと思います。

ただし、1回の「変更」操作でChangeメッセージが複数発生する場合があるので、Changeメッセージが1回発生するたびごとにメッセージボックスを1つ表示することは好ましくありません。上記(2)の方法を取るとすれば「メッセージボックス表示前あるいは表示中は新たなメッセージボックス表示要求メッセージをPostしない」等の対処が必要でしょう。
    • good
    • 0
この回答へのお礼

ありがとうございました。
(2)を採用させていただきました。

Changeメッセージが複数発生に関しましては、
1回目だけ処理してフラグを立てる。
フラグはPost処理後にクリアする方法で制御しました。

お礼日時:2005/08/02 15:45

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