自動的に「ファイルを保存」して「閉じる」には

[戻る]
はまち 2002/06/03(月) 00:32:17
////////////////////////////////////////////////////////////////////////////////
    
    開発環境 : Visual C++ 6.0 Service Pack 3
    動作環境 : Windows 98 Second Edition
    MFC使用 MDIベース

////////////////////////////////////////////////////////////////////////////////
○○○Docクラスで、ある処理を、たとえば10時間ぐらいした後、自動的にデータを保存して
ファイルを閉じる、というようなことをしたいと思いました。データの保存はSerialize関数を
実装したので、普通に「上書き保存」をクリックすれば保存できるのですが、この「上書き保存
」と「ファイルを閉じる」を自動的にコンピュータにさせるにはどうすればいいのでしょうか。

はじめ、
○○○Docクラス内で、
POSITION pos = GetFirstViewPosition();
CView* pView = GetNextView(pos);
CChildFrame* pChildF = (CChildFrame*)pView->GetParentFrame();
として、CChildFrameクラスへのポインタを取得してから、

pChildF->SendMessage(ID_FILE_SAVE);
pChildF->SendMessage(ID_FILE_CLOSE);

とすればいいのかと思ったのですがうまく行きません。引数にこういったリソースIDを入れても
ダメなのでしょうか。
 実際、コンピュータにこういった、自動的にツールバーをクリックさせるようなことはよく
やりそうなことだと思ったので、僕自身のやり方がぜんぜん違うのかとも思ったのですが、どう
でしょうか。よろしくお願いします。

kazuma 2002/06/03(月) 00:44:35
コマンドIDとウィンドウメッセージは別物です。

やるならこうです。
AfxGetMainWnd()->PostMessage(WM_COMMAND, ID_FILE_SAVE);

はまち 2002/06/04(火) 00:55:39
[[解決]]
kazumaさん、お返事ありがとうございました。
やっぱり、kazumaさんのいうコマンドIDとウィンドウメッセージは違うものと考えなくては
いけなかったんですね。うすうすはそんな感じがしていたのですが、では、どうやって、
コマンドIDのメッセージを出せばいいのだろうと思案に暮れていたところでした。

 実際、

AfxGetMainWnd()->PostMessage(WM_COMMAND, ID_FILE_SAVE);

と変えてみるととてもうまく動くようになりました。これで、また、プログラムを再開する
ことができます。
 ありがとうございました!

古いスレッドには追加発言できません。