• ベストアンサー

MFC VC++ 6.0 使用 

自分で作った class CPatchModel というクラスを 今まで OnDrawのなかで CPatchModel cpatchmodel; というふうに 宣言してつかっていましたが。グローバル宣言にしたところ つまり OnDrawの外で宣言したのですが、うまくうごかなくなりました。なにか こころあたりのあるかたは 教えてください。なんでもいいです。classの定義のあとに 宣言しているので、認識できないと いうわけでは ないはずです。

質問者が選んだベストアンサー

  • ベストアンサー
  • KamoPlat
  • ベストアンサー率46% (23/50)
回答No.1

ファイルが違うとかでしょうか。 同じファイルにその定義はありますか?

akagenoanfan
質問者

お礼

問題解決しました。ご協力ありがとうございました。 コンストラクタが OnDrawのたびに よびだされていたのが グローバルにしたことで よびだされなくなったのが 原因です。

その他の回答 (1)

  • txrx
  • ベストアンサー率45% (83/184)
回答No.2

関数の中でオート変数としてオブジェクトを構築した場合、OnDrawが呼び出された時にcpatchmodelのコンストラクタが実行されます。OnDrawからリターンする時には、cpatchmodelのデストラクタが実行されます。 コンストラクタとデストラクタはOnDraw呼び出し毎に毎回呼び出されます。 クラスCPatchModel をグローバル変数にした場合は、プロセス(プログラム)の起動時にcpatchmodelのコンストラクタが呼び出され、プロセスの終了時にcpatchmodelのデストラクタが呼び出されます。 コンストラクタとデストラクタはプログラム起動・終了時に1回のみ呼び出されます。 グローバルにして上手く動作しなくなったのであれば、CPatchModelクラスの初期化(コンストラクタ等)が1度しか呼び出されなくなるので、そこに問題があると思います。 つまり、OnDrawを呼び出してもcpatchmodelのコンストラクタは呼び出されなくなります。 そのへんをもう一度確認してみてはどうですか?

akagenoanfan
質問者

お礼

あ たぶん それが 原因です。今まで コンストラクタが よびだされてたのに グローバルにしたことで よびだされなくなった・・・ これで 説明がつきます。 ありがとうございました。

関連するQ&A