- ベストアンサー
MFC VC++ 6.0 使用
自分で作った class CPatchModel というクラスを 今まで OnDrawのなかで CPatchModel cpatchmodel; というふうに 宣言してつかっていましたが。グローバル宣言にしたところ つまり OnDrawの外で宣言したのですが、うまくうごかなくなりました。なにか こころあたりのあるかたは 教えてください。なんでもいいです。classの定義のあとに 宣言しているので、認識できないと いうわけでは ないはずです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ファイルが違うとかでしょうか。 同じファイルにその定義はありますか?
その他の回答 (1)
- txrx
- ベストアンサー率45% (83/184)
関数の中でオート変数としてオブジェクトを構築した場合、OnDrawが呼び出された時にcpatchmodelのコンストラクタが実行されます。OnDrawからリターンする時には、cpatchmodelのデストラクタが実行されます。 コンストラクタとデストラクタはOnDraw呼び出し毎に毎回呼び出されます。 クラスCPatchModel をグローバル変数にした場合は、プロセス(プログラム)の起動時にcpatchmodelのコンストラクタが呼び出され、プロセスの終了時にcpatchmodelのデストラクタが呼び出されます。 コンストラクタとデストラクタはプログラム起動・終了時に1回のみ呼び出されます。 グローバルにして上手く動作しなくなったのであれば、CPatchModelクラスの初期化(コンストラクタ等)が1度しか呼び出されなくなるので、そこに問題があると思います。 つまり、OnDrawを呼び出してもcpatchmodelのコンストラクタは呼び出されなくなります。 そのへんをもう一度確認してみてはどうですか?
お礼
あ たぶん それが 原因です。今まで コンストラクタが よびだされてたのに グローバルにしたことで よびだされなくなった・・・ これで 説明がつきます。 ありがとうございました。
お礼
問題解決しました。ご協力ありがとうございました。 コンストラクタが OnDrawのたびに よびだされていたのが グローバルにしたことで よびだされなくなったのが 原因です。