06/11/29 22:26:25
ウィンドウやダイアログ(以下、あわせて子画面と記述)を追加するMFC拡張のDLLを作成しています
仕組みそのものは簡単で、アプリケーションからグローバル関数を通じて呼び出されます
グローバル関数は子画面ごとに用意し、関数の引数にポインタを指定する形でデータの受け渡しを行います
それで早速これを作り始めたのですが、自分の知識が乏しいこともあって問題が発生してしまいました
それは、ウィンドウを上手く表示させて処理させることができないということです
ダイアログの方はモーダル表示であるためか、特に問題なく表示させて処理させることができました
しかし、ウィンドウの方は違いました
新規クラス作成でCFormViewを継承したクラスを追加しているのですが、生成の段階で問題が発生してしまいます
コンストラクタがprotectedとなっているため、newで生成したときにエラーとなるのです
これは手動でpublicに変えることで表面上は解決しました
しかし、標準でprotectedになっていたことには何か意味があるのではないかと不安に思えてきました
大丈夫なのでしょうか?
また他にも問題があります
それは、メモリの開放です
ウィンドウはモーダルではないため、基本的にグローバル変数として使っています
これが問題となるのはユーザが閉じるボタンでウィンドウをデストロイした場合です
グローバス関数では、対応するウィンドウのグローバル変数がNULLでない場合に明示的にDestroyWindowを呼んでいます
その後にdeleteをしております
しかし、ユーザがすでにウィンドウをデストロイしていた場合、エラーが発生します
これをどうにか防ぎたいのです
ウィンドウがすでにデストロイされていることを知る手段はありませんか?
またはメモリが未開放であることを知る手段はありませんか?
とても困っております
知恵を貸してください