問題が発生しました。
今、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です。
OnDraw()は、ウィンドウが再描画される時に呼び出されます。
再描画される時、すなわちメッセージボックスが表示され
閉じる時にも呼び出されます。
質問されているような現象が発生します。
OnDraw()内で、メッセージボックスを表示すること自体が
間違っていると思いますよ。
それでは。
早速の指摘ありがとうございます。
OnDrawでmessage Boxが使えないという事で、1つ教えて
頂きたい事があります。1つの関数内で”CPen”を使用した線の表示と
message Boxを使用したメッセージの表示を行ないたいのですがどう
したら良いかが分かりません。
その為、今回のようにOnDraw関数の中でmessage Boxを使ってみまし
た。
もし良かったら、どうすれば良いか教えてもらえませんか??
早速の指摘ありがとうございます。
OnDrawでmessage Boxが使えないという事で、1つ教えて
頂きたい事があります。1つの関数内で”CPen”を使用した線の表示と
message Boxを使用したメッセージの表示を行ないたいのですがどう
したら良いかが分かりません。
その為、今回のようにOnDraw関数の中でmessage Boxを使ってみまし
た。
もし良かったら、どうすれば良いか教えてもらえませんか??
>1つの関数内で”CPen”を使用した線の表示と
>message Boxを使用したメッセージの表示を行ないたいのですがどう
>したら良いかが分かりません
Halです。
上記内容ですが、いまいちイメージがわきません。
何をしたいのか具体的に説明してもらえませんか。
それから、通常は、OnDraw内で線を表示する処理を
行わないと、ウィンドウが再描画されると線が消えて
しまいますよ。
それでは。
説明不足ですみません。
例えば、緑の四角を描いたあとに、”緑の四角”というメッセージ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です。
やり方としては、いろいろありますが
一つの方法として、緑の四角を書かせる
イベントが発生したところで、フラグを
立てて、RedrawWindow()を行い、メッセージを
表示する。
OnDraw()内では、フラグが足っていたら
緑の四角を描画する処理を行う。
これで、イベントが発生した時だけメッセージが
表示され、緑の四角を描画する処理も問題なく
出来ると思います。
ウィンドウズアプリケーションはイベントドリブン
ですので、イベントを取得しどう処理するか
そこを充分理解して処理系を考えないと予想も
しない問題に直面します。
どこで何をやらせるのか、それを考えることが
非常に重要です。
それでは。
>その為、どのように作れば良いのかが分からな
>いので教えて欲しいという内容でした。
Halさんのおっしゃる通りに、AfxMessageBox()関数をOnDraw()内に書くのをやめましょう。
メッセージボックスのかわりに、pDC->TextOut()あたりを使われてはいかがでしょうか。
今回は、Bunさんの言った通り、TextOut()を使って表示させました。
HalさんからRedrawWindow()を使うというやり方を聞きましたが、具
体的にどうやればよいか分かりません。まだ初心者なので、詳しく教
えてもらえますか?
もう1つお願いなんですけれど、FTPをプログラム内でSYSTEM関数で実
行させたらどうしてもDOS画面が表示されます。SHELLを使えばよいと
いうような事をMSDNでみつけました。しかし、使い方が分かりません。
よろしければこちらも教えてもらえますか??
おねがいします!
Halです。
RedrawWindow()を使い方は、ヘルプを参照してください。
そんなに難しい話ではないと思いますよ。
それから、SHELLについては、今の貴方の技量では、説明しても
きっと理解できないと思います。
それと、まず使い方がわからない関数があったらヘルプやWebで
調べるという癖をつけたほうが良いと思います。
皆さん、昨日今日でプログラムを作れるようになったわけでは
無いのですから。自分で調べる癖をつけること。それが自分の
身になる一番の近道だと思います。
それでは。