• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VC++6.0 CDateTimeCtrl の暴走について)

VC++6.0 CDateTimeCtrl の暴走について

このQ&Aのポイント
  • VC++6.0環境でCDateTimeCtrlを使用している際に、日時が変更されると暴走する問題について
  • メッセージが表示されるたびに自動的に次月に進むバグが発生する場合があります
  • 回避策としては、バグの修正や別のライブラリの使用が考えられます

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

  • ベストアンサー
  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.1

DateTimePickerコントロールで何かを変更してChangeイベントが発生し、その処理中にフォーカスが移動すると、同じ「変更」が発生して新たなChangeイベントが発生するようです。 ウィンドウ描画においてPaintイベント処理中にウィンドウ上のコントロールを変更すると再度Paintイベントが発生してしまうようなもので、とりたてて「バグ」と呼ぶには当たらず「制限事項」程度ではないかと思います。 回避方法としては (1) Changeイベント処理中はメッセージボックス表示を行わず、これに代わって例えばウィンドウ上に用意したStaticにメッセージを表示する等する。 (2) メッセージボックスを表示したい場合は、Changeイベントの中ではフラグを立てるだけにしておき、Changeイベントを終了してからメッセージボックスを表示する。(例えば自ウィンドウに「メッセージボックス表示要求メッセージ」をPostしておく等。) という感じかと思います。 ただし、1回の「変更」操作でChangeメッセージが複数発生する場合があるので、Changeメッセージが1回発生するたびごとにメッセージボックスを1つ表示することは好ましくありません。上記(2)の方法を取るとすれば「メッセージボックス表示前あるいは表示中は新たなメッセージボックス表示要求メッセージをPostしない」等の対処が必要でしょう。

noname#59240
質問者

お礼

ありがとうございました。 (2)を採用させていただきました。 Changeメッセージが複数発生に関しましては、 1回目だけ処理してフラグを立てる。 フラグはPost処理後にクリアする方法で制御しました。

関連するQ&A

専門家に質問してみよう