メッセージボックスについて – プログラミング – Home

メッセージボックスについて
 
通知
すべてクリア

[解決済] メッセージボックスについて


haruko
 haruko
(@haruko)
ゲスト
結合: 19年前
投稿: 38
Topic starter  

環境は
VC6++、Win2000 です。

ビューから、親ウィンドウなしの独立したサブウィンドウを作成し、そのウィンドウでデータを
入力し、データ入力が間違っていた場合、メッセージボックスで警告するコードを書いていま
す。

現象は、サブウィンドウが何回か点滅し中途半端な描画で止まり、最後にメッセージボックスが
表示されるのですがフォーカスはサブウィンドウのままです。

   CSubWnd* m_pView;
・・・・・・・・・・・・・

 HBRUSH hBrush = CreateSolidBrush(RGB(220, 220, 220));
 m_pView->CreateEx(0, AfxRegisterWndClass(NULL, NULL, hBrush), title,
WS_VISIBLE | WS_CAPTION | WS_THICKFRAME , CRect(150,150,700,500), NULL, NULL);
・・・・・・・・・・・・・

m_pView->SetWindowPos(&wndTop, NULL, NULL, NULL, NULL, SWP_NOMOVE | SWP_NOSIZE);

・・・・・・・・・・・・・

// 以下のコードは、OnDraw(),サブウィンドウのOnPaint()と両方で試しています。

if(errorflag == 1)
 {

  if(IDOK == AfxMessageBox(AとBを同時に選択することはできません。,MB_OK |
MB_APPLMODAL))
{
errorflag = 0;
}
}

以上です。

メッセージボックスにフォーカスを移せばよいと思うのですが、方法がわかりません。

よろしくお願いします。


引用未解決
トピックタグ
と
 と
(@と)
ゲスト
結合: 20年前
投稿: 33
 

レスが付かないようですが
ひょっとしたら、OnDraw()やOnPaint()に
AfxMessageBoxを記述しているからでは?

>// 以下のコードは、OnDraw(),サブウィンドウのOnPaint()と両方で試しています。

その場所にAfxMessageBoxは想像つかないんですが。


返信引用
haruko
 haruko
(@haruko)
ゲスト
結合: 19年前
投稿: 38
Topic starter  

レスありがとうございます。

初心者なので、使い方が間違っているのかもしれません。
データ入力の正誤をドキュメントクラスで判定し、UpdateAllView()を呼び出しています。
OnDraw()やOnPaint()内で、AfxMessageBox()を記述しています。

ビューウィンドウを親ウィンドウしたサブウィンドウを作成するとうまくいきます。
ところが、サブウィンドウを移動すると、フレームにサブウィンドウの残像が残ってしまいま
す。

m_pView->CreateEx(0, AfxRegisterWndClass(NULL, NULL, hBrush), title,
WS_VISIBLE | WS_CAPTION | WS_THICKFRAME , CRect(150,150,700,500), this, NULL);

よろしくお願いします。


返信引用
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
 

描画の最中にデータチェックしてはいけません。

なぜかというと、
OnDraw()やOnPaint()は、UpdateAllView()を呼びだしたときだけではなく、
サブウィンドウがスクロールしたり、別のウィンドウで隠されていた部分が現れ
たり、と様々な理由で(OSから)呼びだされます。
つまり、プログラム内でOnDraw()やOnPaint()がいつ呼ばれるのかは予測できな
いのです。

今回の場合、メッセージボックスが表示されると、サブウィンドウの一部をおお
い隠すので、それが原因でOnDraw()やOnPaint()が呼ばれます。
OnDraw()やOnPaint()の中では、メッセージボックスを表示します。
これではウィンドウズメッセージの無限ループです。

結論としては、
UpdateAllView()を呼んでいる場所でデータチェックを行い、NGならメッセージ
ボックスを表示するだけ、OKだったら初めてUpdateAllView()を呼ぶようにしま
しょう。


返信引用
haruko
 haruko
(@haruko)
ゲスト
結合: 19年前
投稿: 38
Topic starter  

ありがとうございました。

描画の最中に、メッセージボックスを呼び出すのを止めまたところ、うまくいきました。
今後、気をつけます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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