OnDraw関数でメッセージBoxを使用するには? – プログラミング – Home

OnDraw関数でメッセージBoxを使...
 
通知
すべてクリア

OnDraw関数でメッセージBoxを使用するには?


かず
 かず
(@かず)
ゲスト
結合: 24年前
投稿: 62
Topic starter  

問題が発生しました。
今、Visual C++でソフトを作成しています。
自分のPCで作成し、完成したので、別のPCに実行ファイルをコピー
して動かしたら、正常に動きませんでした。

例えば、メッセージを表示させる為に、OnDraw関数に下記の様に追加しました。

AfxMessageBox(Visual C スタート,MB_OK|MB_ICONEXCLAMATION);
AfxMessageBox(Visual C 途中,MB_OK|MB_ICONEXCLAMATION);
AfxMessageBox(Visual C エンド,MB_OK|MB_ICONEXCLAMATION);

これで実行させると自分のPCでは正常にメッセージBOXが出てきますが、別のPC
で実行させると、Visual C スタートと表示されて、OKをクリックすると、また
Visual C スタートと表示されました。このような事を何度か繰り返した後Vi
 sual C 途中と表示されてまた同じような現象に入りました。

なぜこのようになるか分かる人がいたら教えてください。おねがいします!


引用解決済
トピックタグ
Hal
 Hal
(@Hal)
ゲスト
結合: 25年前
投稿: 67
 

Halです。
OnDraw()は、ウィンドウが再描画される時に呼び出されます。
再描画される時、すなわちメッセージボックスが表示され
閉じる時にも呼び出されます。
質問されているような現象が発生します。
OnDraw()内で、メッセージボックスを表示すること自体が
間違っていると思いますよ。

それでは。


返信引用
かず
 かず
(@かず)
ゲスト
結合: 24年前
投稿: 62
Topic starter  

早速の指摘ありがとうございます。
OnDrawでmessage Boxが使えないという事で、1つ教えて
頂きたい事があります。1つの関数内で”CPen”を使用した線の表示と
message Boxを使用したメッセージの表示を行ないたいのですがどう
したら良いかが分かりません。
その為、今回のようにOnDraw関数の中でmessage Boxを使ってみまし
た。
もし良かったら、どうすれば良いか教えてもらえませんか??


返信引用
かず
 かず
(@かず)
ゲスト
結合: 24年前
投稿: 62
Topic starter  

早速の指摘ありがとうございます。
OnDrawでmessage Boxが使えないという事で、1つ教えて
頂きたい事があります。1つの関数内で”CPen”を使用した線の表示と
message Boxを使用したメッセージの表示を行ないたいのですがどう
したら良いかが分かりません。
その為、今回のようにOnDraw関数の中でmessage Boxを使ってみまし
た。
もし良かったら、どうすれば良いか教えてもらえませんか??


返信引用
Hal
 Hal
(@Hal)
ゲスト
結合: 25年前
投稿: 67
 

>1つの関数内で”CPen”を使用した線の表示と
>message Boxを使用したメッセージの表示を行ないたいのですがどう
>したら良いかが分かりません
Halです。
上記内容ですが、いまいちイメージがわきません。
何をしたいのか具体的に説明してもらえませんか。
それから、通常は、OnDraw内で線を表示する処理を
行わないと、ウィンドウが再描画されると線が消えて
しまいますよ。
それでは。


返信引用
かず
 かず
(@かず)
ゲスト
結合: 24年前
投稿: 62
Topic starter  

説明不足ですみません。
例えば、緑の四角を描いたあとに、”緑の四角”というメッセージBox
を使用したいと考えています。
その為、OnDraw部分に下記のように入れた所、一番始めのように何回も表示
される現象が出ました。その為、どのように作れば良いのかが分からな
いので教えて欲しいという内容でした。

CBrush brushGreen(RGB(0,255,0));

CRgn myRgn;
myRgn.CreateRectRgn(0,0,400,200);
pDC->SelectObject(&myRgn);
pDC->SelectObject(&brushGreen);
pDC->PaintRgn(&myRgn);

AfxMessageBox(緑の四角!,MB_OK|MB_ICONEXCLAMATION);


返信引用
Hal
 Hal
(@Hal)
ゲスト
結合: 25年前
投稿: 67
 

Halです。
やり方としては、いろいろありますが
一つの方法として、緑の四角を書かせる
イベントが発生したところで、フラグを
立てて、RedrawWindow()を行い、メッセージを
表示する。
OnDraw()内では、フラグが足っていたら
緑の四角を描画する処理を行う。
これで、イベントが発生した時だけメッセージが
表示され、緑の四角を描画する処理も問題なく
出来ると思います。
ウィンドウズアプリケーションはイベントドリブン
ですので、イベントを取得しどう処理するか
そこを充分理解して処理系を考えないと予想も
しない問題に直面します。
どこで何をやらせるのか、それを考えることが
非常に重要です。

それでは。


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

>その為、どのように作れば良いのかが分からな
>いので教えて欲しいという内容でした。

Halさんのおっしゃる通りに、AfxMessageBox()関数をOnDraw()内に書くのをやめましょう。

メッセージボックスのかわりに、pDC->TextOut()あたりを使われてはいかがでしょうか。


返信引用
かず
 かず
(@かず)
ゲスト
結合: 24年前
投稿: 62
Topic starter  

今回は、Bunさんの言った通り、TextOut()を使って表示させました。

HalさんからRedrawWindow()を使うというやり方を聞きましたが、具
体的にどうやればよいか分かりません。まだ初心者なので、詳しく教
えてもらえますか?
もう1つお願いなんですけれど、FTPをプログラム内でSYSTEM関数で実
行させたらどうしてもDOS画面が表示されます。SHELLを使えばよいと
いうような事をMSDNでみつけました。しかし、使い方が分かりません。
よろしければこちらも教えてもらえますか??
おねがいします!


返信引用
Hal
 Hal
(@Hal)
ゲスト
結合: 25年前
投稿: 67
 

Halです。
RedrawWindow()を使い方は、ヘルプを参照してください。
そんなに難しい話ではないと思いますよ。
それから、SHELLについては、今の貴方の技量では、説明しても
きっと理解できないと思います。
それと、まず使い方がわからない関数があったらヘルプやWebで
調べるという癖をつけたほうが良いと思います。
皆さん、昨日今日でプログラムを作れるようになったわけでは
無いのですから。自分で調べる癖をつけること。それが自分の
身になる一番の近道だと思います。
それでは。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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