OnDestroy 関数を表示させるには – プログラミング – Home

OnDestroy 関数を表示させるに...
 
通知
すべてクリア

[解決済] OnDestroy 関数を表示させるには


よし
 よし
(@よし)
ゲスト
結合: 23年前
投稿: 23
Topic starter  

VC++6.0でビットマップファイルに文字データを書き込むというソフトを作っています。

エディットコントロールを表示させ、文字データを書き込むということには成功しまし
た。

dlgクラスで、SetModifiedFlagをTRUEにして、終了するときにファイルが変更されて

います、というメッセージが出ますが、それを実行すると、コードを何も記述してないの

ですから当たり前ですが、空のファイルが保存されます。

そこで独自に OnDestroy 関数を作ってそこで保存の処理をしようとしていますが、そこ
で処理する前に、アプリケーションの終了や右上の×を選択して終了しようとすると、

OnDestroy関数が呼び出される前に、ウィンドーズ備え付けのダイアログが出てしまい

ます。

シリアライズ関数をコメントアウトして実現しようとしましたが、エラーが出て色々試し
ましたが、駄目でした。

プログラムを終了する前に唯一表示される関数がOnDestroy 関数になるようにするにはど
うしたらいいのでしょうか。よろしくお願いします。


引用未解決
トピックタグ
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

VC6は無いので具体的なアドバイスにはなりません。あしからず。

まず、SetModifiedFlagとは、CDocument::SetModifiedFlag(BOOL)でしょうか。
であれば

 仮定1.「MFCを使用している」

でよろしいですか。

次に、ビットマップをファイルに保管する件ですが、
自前でコードする場合は、対象ビットマップをDIB又は
DIBSECTIONに変換し、BITMAPFILEHEADERから保管することに
なりますが、これを自前でコードするのは結構大変です。

最も簡単なのは、CImageクラスを使用する方法となりますが、
VC6.0の頃のライブラリにCImageが含まれていたかどうかを失念しました。

また、CImageは、CObjectから派生していないので、Serialize()
メソッドを継承していません。独自にファイル名を指定して、
保管する必要があると考えられます。

さて、CImageが使えるのなら、とりあえず、

 1.ビットマップを読み込む
 2.ファイル名を指定して、読み込んだビットマップを保存する。

ところまで、コードしてみてはどうでしょう。


返信引用
よし
 よし
(@よし)
ゲスト
結合: 23年前
投稿: 23
Topic starter  

仲澤@失業者 様ありがとうございます。

ここまで出来ています。ダウンロードしてみて見てください。

http://www1.axfc.net/u/3163122.zip

XPでのみ動作を確認しています。


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

VS2003以降のMFCとVC6の頃のMFCは大きく異なります。
先の発言にあるようにVC6がないので、
ダウンロードしても評価できません。
あしからず。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

仲澤さん、
実行ファイルのみでした。

>OnDestroy関数が呼び出される前に、ウィンドーズ備え付けのダイアログが出てしまい
>ます。
Windowsの仕様ですね。
そのメッセージを出さないようにするのはかなり難しいと思います。

「BOOL IsModified();」で調べて手動でメッセージ出す方法はどうですか?

CDocument::SaveModified の説明を読んでみて........


返信引用
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
 

内容からして、MFC-SDI or MFC-MDI かな?

SetModifiedFlag(TRUE)したなら、そのまま普通にMFC流がよさげ。
OnDestroy()で処理したいなら、SetModifiedFlag(TRUE)はやめるのがよさげ。

前者であれば、CDocument::OnSaveDocument()をオーバーライドしましょう。
CDocument::OnSaveDocument()はふつーに考えて、保存確認をして欲しい
タイミングでばっちり呼ばれるはずです。


返信引用
よし
 よし
(@よし)
ゲスト
結合: 23年前
投稿: 23
Topic starter  

ITO さん bun さんありがとうございます。

bun さんのおっしゃるとおり MFC-SDI です。

SDKなら、始めから全部自分で作るのでこんなことは無いと思うのですが、MFCですので気
を利かせたつもりなのでしょうが、前もって色々と仕組みが出来ているので厄介です。

ITOさんの

>Windowsの仕様ですね。

>そのメッセージを出さないようにするのはかなり難しいと思います。

という事のようですので、あきらめるしかないのかなとも思っております。

DIBの保存も、テキストファイルの保存も全部出来ているのに、ここであきらめるのはつ
らいのですが、それしかないように思われます。

一応 bun さんの

>CDocument::OnSaveDocument()をオーバーライドしましょう。

を試してみようと思っています。

皆さんありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました