開発環境
VC++6.0
WindowsXP Home
CDateTimeCtrl(日時指定プロパティ)を使用していますが、
日付を変更した場合はメッセージを表示して、ある処理を行おうと思っています。
ドロップダウンで月のカレンダーを表示させ、
前月または次月などを行います。(何度か同じ処理を繰り返す)
日付が変更されるため、メッセージが表示されます。
「OKボタン」クリック後に自動的に次月→次月→次月・・・・と繰り返されます。
これはバグでしょうか?
また、回避策はありますでしょうか?
下記はサンプルプログラムです
void クラス::OnDatetimechangeXX(NMHDR* pNMHDR, LRESULT* pResult)
{
AfxMessageBox( "メッセージ", MB_ICONEXCLAMATION );
}
以上、ご教授よろしくお願いします
No.1ベストアンサー
- 回答日時:
DateTimePickerコントロールで何かを変更してChangeイベントが発生し、その処理中にフォーカスが移動すると、同じ「変更」が発生して新たなChangeイベントが発生するようです。
ウィンドウ描画においてPaintイベント処理中にウィンドウ上のコントロールを変更すると再度Paintイベントが発生してしまうようなもので、とりたてて「バグ」と呼ぶには当たらず「制限事項」程度ではないかと思います。
回避方法としては
(1) Changeイベント処理中はメッセージボックス表示を行わず、これに代わって例えばウィンドウ上に用意したStaticにメッセージを表示する等する。
(2) メッセージボックスを表示したい場合は、Changeイベントの中ではフラグを立てるだけにしておき、Changeイベントを終了してからメッセージボックスを表示する。(例えば自ウィンドウに「メッセージボックス表示要求メッセージ」をPostしておく等。)
という感じかと思います。
ただし、1回の「変更」操作でChangeメッセージが複数発生する場合があるので、Changeメッセージが1回発生するたびごとにメッセージボックスを1つ表示することは好ましくありません。上記(2)の方法を取るとすれば「メッセージボックス表示前あるいは表示中は新たなメッセージボックス表示要求メッセージをPostしない」等の対処が必要でしょう。
ありがとうございました。
(2)を採用させていただきました。
Changeメッセージが複数発生に関しましては、
1回目だけ処理してフラグを立てる。
フラグはPost処理後にクリアする方法で制御しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルについて教えてください。 1 2023/03/03 08:38
- Excel(エクセル) Excel セルに入っている日付を参照して、別シートのリストを表示させたい 1 2022/04/12 17:02
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/01/10 09:15
- LINE LINEのスマホ機種変更時の移行失敗の復旧 1 2022/06/20 14:52
- Windows 10 windows11 update の「更新の再開」について初歩的な質問なのですが 1 2022/10/19 00:57
- Excel(エクセル) 【vba】日付の形式が勝手に変わってしまう。 1 2022/09/29 10:54
- Excel(エクセル) ②Excel 簡単にシートコピーしたら前日の残高と日付を変更させたい→マクロの記録でエラーが出ます 8 2022/07/16 20:40
- Excel(エクセル) エクセルの数式で教えてください。 2 2022/12/23 14:57
- gooのスマホ ほっとくと+メッセージ(ショートメール)が使えなくなるってこと? 3 2022/07/13 07:49
- Android(アンドロイド) アンドロイドスマホ月表示 3 2023/06/11 20:51
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBSの処理中一旦処理を止めて再...
-
エクセルVBAでクリップボード内...
-
Excel VBA で処理中断(DoEvents...
-
VBSで応答不要のメッセージボッ...
-
ACCESS側からEXCELの書式を設定...
-
VBA kernel32 の意味
-
スロットゲームのプログラミング
-
VBA メッセージボックスを自動...
-
vb.netでバッチ処理
-
メッセージボックスのボタン名変更
-
Excel VBA 実行中に一瞬フリー...
-
Application.ScreenUpdating=Fa...
-
VB6 コマンドボタン クリック...
-
InvalidateRectがうまくいかない
-
VC++6.0 CDateTimeCtrl の暴走...
-
VB.NETのUsingキーワードの使い方
-
Excelのワークシートに行を挿入...
-
Excel VBA 自動的に閉じるMsgBox
-
スケジューリング方式
-
処理をとめるキャンセルボタン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSの処理中一旦処理を止めて再...
-
メッセージボックスのボタン名変更
-
ACCESS側からEXCELの書式を設定...
-
VBSで応答不要のメッセージボッ...
-
VBA kernel32 の意味
-
エクセルVBAでクリップボード内...
-
【C#】 あるイベントから別イ...
-
Excel VBA で処理中断(DoEvents...
-
VBA メッセージボックスを自動...
-
Application.ScreenUpdating=Fa...
-
Excel VBA 自動的に閉じるMsgBox
-
ASP.NETでのメッセージ画面を出...
-
メッセージBOXの「はい」「いい...
-
「キャンセル」ボタン付きの処...
-
B列に特定の文字列が入っている...
-
シャットダウン時のExcel強制終...
-
ASP VBScriptでスクリプト実行...
-
起動後直に実行するコードはど...
-
MFCのメニューバーのイベント取得
-
アクセスでのキー送信について
おすすめ情報