はじめまして、kawashichiと申します。
プログラムの質問とは異なりますが、ご存知の方いらっしゃいましたら
どうぞお力添えをお願い致します。
BMP画像を表示させるプログラムを構築しているのですが、
そのプログラム内で、画面を再描画させるためにInvalidate関数を
記述しました。その後、ビルドするとエラーは0と表示されたので
実行してみようと思い、メニューのビルドから実行を選んだところ、
実行画面が表示されませんでした。これはおかしい、と思い、
Invalidate関数を削除し、改めてビルドしたところ、
実行画面が表示された状態のままビルドした時とまったく同一の
リンクエラーがでてしまい、やはり実行できませんでした。
エディタを立ち上げ直しても、パソコンを再起動してもこの現象は変化しません。
試しに、新規作成で別なプログラムを作って、ビルド>実行 してみたのですが、
そちらはきちんと実行画面が表示されました。
現在プログラム作成中のものだけが実行できないようです。
Invalidate関数を使用する前までは正常に実行することができました。
どなたか対処法をご存知の方がいらっしゃいましたら、
どうぞ御教授くださいますよう、宜しくお願い申し上げます。
開発環境:WindowsMe VC++6.0使用
あたらしくプロジェクトを作り直し、前のプロジェクトで
自分が書き加えたプログラムをそっちに書き写してみました。
最初、何も書き写していない状態の時に実行してみると
普通に実行できていたのですが、前のプログラムを書き写して
実行すると、画面に表示されませんでした。強制終了をかけてみると
たしかにプロジェクトと同名のプログラムが起動しているのですが、
強制終了しようとすると「反応がありません」と言われてしまいます。
書き写したプログラムは普通に動作していた時のものを書き写しました。
(Invalidate関数を記述する前の、正常に動いていた頃のプログラム)
追加したプログラムをじっくりと検証したのですが、やはりバグは
見つかりませんでした。
こちらでもエラーの原因は探ってまいりますので、どうか皆様方の
お力添えをいただけますよう、宜しくお願い申し上げます。
>リンクエラーがでてしまい
これどんな風に出てますか
LINK : fatal error LNK1168: 書き込みモードで Debug/CardsWar.exe を開けません
link.exe の実行エラー
このようなメッセージがでております。
このエラーメッセージはビルドから実行して、そのウインドウが開いている状態で
ビルドした時に出るエラーとまったく同一のものです。
おそらく実行されてはいるのですが、なんらかの理由により、ウインドウが
開かなくなってしまったのだと思います。
現在プログラムのミスを探しているところですので、プログラムミス以外で
何か思い当たることがございましたらご指摘の程、宜しくお願いします。
原因は不明でしたが、インストールし直したら再び動作するようになりました。
ご回答くださったwood様、本当にありがとうございました。
ここで誤作動の再発を防ぐ意味で、Invalidate関数について質問したいのですが、
私の知識では、この関数は「画面を再描画させたい時に使用する」と考えていたのですが
実際はどのような動作をする関数なのでしょうか?
>私の知識では、この関数は「画面を再描画させたい時に使用する」と考えていたのですが
>実際はどのような動作をする関数なのでしょうか?
そのとおりですよ。
で、その後Invalidate()をつけても動作するのでしょうか?
もしかして OnPaint 関数内で Invalidate してるとか?
Invalidate は、画面の全体を再描画が必要な領域(リージョン)に登録します。
OS はリージョンが存在するとすべてのリージョンに対して再描画(WM_PAINT)メッセージを送
り、結果、各ウインドウの OnPaint が実行されます。
上記の LINK エラーは プログラムが実行中のため更新できないのではありませんか?
EIJI様、Yasu様、ご回答ありがとうございます。
現在、Invalidate関数を適正な位置に記述してみましたところ、正常に動作いたしました。
問題が起きた時はonDraw関数内でInvalidate関数を記述しておりました。
これが問題だったのかもしれません。
何はともあれ無事、問題解決することができました。
回答いただきました皆様方、本当にありがとうございました。