• ベストアンサー

MFCでの終了処理

MFCでファイルを読み込み、画面表示するプログラムを作成しています。 読込ファイルにいくつかのバージョンがあり、旧バージョンを読み込んだ場合は旧バージョンのexeをShellExecuteで呼び出しています。 旧バージョンのファイルを読み込んだ場合バージョンチェック後旧バージョンのexeを呼び出し、起動中のプログラム(現在のバージョン)を終了しようと思っています。(ダイアログ表示等される前です。) その場合現在動いているプログラムはどのように終了させるべきでしょうか? VC++ではexitを使用しないような事をいくつかのページでみましたが、 exitに代わる方法を教えてください。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

ダイアログベースなら   CXXDlg dlg;   m_pMainWnd = &dlg;   int nResponse = dlg.DoModal();   if (nResponse == IDOK)   {     // TODO: ダイアログが <OK> で消された時のコードを     // 記述してください。   }   else if (nResponse == IDCANCEL)   {     // TODO: ダイアログが <キャンセル> で消された時のコードを     // 記述してください。   } となっている部分を   // ファイル入力部分   MyFileIO(ファイル名);   // バージョン判断   if ( nVersion != 2 ) {     // ShellExecuteでの起動   } else {     CXXDlg dlg;     m_pMainWnd = &dlg;     // ここでダイアログが表示されます     int nResponse = dlg.DoModal();     if (nResponse == IDOK)     {       // TODO: ダイアログが <OK> で消された時のコードを       // 記述してください。     }     else if (nResponse == IDCANCEL)     {       // TODO: ダイアログが <キャンセル> で消された時のコードを       // 記述してください。     }   } といった具合にすればいいのではないかと思いますよ

hormon_max
質問者

お礼

ありがとうございました。 予定していた動作にすることができました。

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

MFCでどのタイプで開発しているのでしょう MDI/SDI/ダイアログベース そのファイル読み込みはどの時点でしていますか AppクラスのInitInstanceとか 具体的な場所を明示しましょう

hormon_max
質問者

補足

MFCのダイアログベースで作成しています。 ファイルの読込みはAppクラスのInitInstanceから 別の関数を呼び出してそこで読込しています。 現行バージョンならそのまま呼び出した関数でデータを加工します。 旧バージョンならそこで旧バージョンのexeを呼び出して終了処理を しようと思っています。

関連するQ&A

  • Shellで起動したGnuplotを終了させるには

    VC++6.0からShellExecuteを使ってwgnuplot.exeと言うフリーのグラフ作成 プログラムを起動させています。 使い終わったらVCから終了させいのですが方法が解りません。 パイプ機能を使うと出来そうなのですが他に簡単な方法はないでしょうか。

  • 別アプリを終了する方法

    A.EXE と B.EXEがあったとします。 A.EXEからShellExecuteアプリケーションB.EXEを立ち上げたとします。 その時にA.EXEを終了せずにB.EXEの処理が終わり次第、B.EXEからA.EXEを、 終了させたいのですが、可能でしょうか? いろいろと調べてみたのですが、見当がつきません。 どなかたご教授願えませんでしょうか? ちなみにVC++6.0MFCです。

  • 終了時の画面のちらつきについて

    環境:VC6(MFC)+WinXP CFormViewのOnInitialUpdate()の中で、モーダルダイアログを表示し、 条件が違ったら、プログラムを終了されたいのですが、終了は 出来るのですが、元のフォームが一瞬表示されてしまいます。 表示しないようにできないのでしょうか? (記述場所がいけない?) よろしくお願いします。

  • C# MainForm_Load エラーで終了には

    C#を勉強中です。 Windowsフォームアプリケーションで、 MainForm_Load() 内でエラーが起こったためプログラムを終了したい場合、 例えば、なにか動作環境を定義した設定ファイルがあって、 その内容を読み込んで動作したい場合で、 MainForm_Load()内でその読み込みを行っているが、 ファイルがないなどで失敗したため処理を終わらせたい場合、 MainForm_Load() 内で Environment.Exit() としていいものでしょうか? そもそも MainForm_Load() 内でこういった初期処理をしてもいいものでしょうか? Shown ですべき? というのも、むかーし、ほんの少しだけ MFC VC++ をかじったことがあって、 そのときは、初期エラーで処理を終了させたい場合、 WM_CLOSE ウィンドウメッセージを Post してたような記憶があるもので...。 なんか、MainForm_Load() を途中で終了させてしまっていいのだろうか、と思った次第です。 よろしくお願いします。

  • MFCダイアログの終了判定

    開発環境:VC++2008 MFCダイアログ プロジェクト作成名:test 簡単なMFCの処理内容を勉強しています。 画像のようなダイアログベースで処理を行っており、 処理の流れは以下です。 1. "参照"で実行ファイルを選択 2. "エディットコントロール"で読み込んだディレクトリの絶対パスを表示 3. "起動"で実行を行う。 上記のプログラムにINIでの保存/読み込みを追加し、(iniは本プログラムと同階層に) 毎回、参照から読み込まなくても、次回以降は自動で変数に読み込まれるようにしようと思ってます。 そこで分からないことが2つあります。  ・質問1: test.cppで閉じるボタンが押されたときに処理を行う方法  ・質問2: INIの同ディレクトリに保存をtestDlg.cpp側で行う方法 質問1補足:  以下のようなOK/キャンセル処理が最初からありますが、  これらのような形式でtest.cpp側で終了判定を行いたいです。 --------------------------------------- INT_PTR nResponse = dlg.DoModal(); if (nResponse == IDOK) { // TODO: ダイアログが <OK> で消された時のコードを // 記述してください。 } else if (nResponse == IDCANCEL) { // TODO: ダイアログが <キャンセル> で消された時のコードを // 記述してください。 } --------------------------------------- ですが、私のプログラムではOK/キャンセルは使っていないので 閉じるボタンを押したとき、上記のような処理をさせることはできないでしょうか? できるならば、そこにINIの保存処理を入れたいと思います。 質問2補足:  test.cppのCtestApp::InitInstance()にて --------------------------------------- TCHAR path[_MAX_PATH+1]; GetModuleFileName( NULL, path, _MAX_PATH ); PathRenameExtension( path, TEXT(".ini") ); free((void*)m_pszProfileName); m_pszProfileName=_tcsdup(path); --------------------------------------- "本プログラムを実行したときと同じディレクトリにINIを保存する" ようにしているので testDlg.cppでボタンを押したときに保存する処理を行うと、 保存される場所がWINDOWSファイルの方に行ってしまうため、 どうしていいかわからない状況です。 初歩的な質問ですが、何卒宜しくお願いします。

  • MFCで作成したプログラムが起動しない(起動した瞬間に終了してしまう?)

    VC++6.0,MFCのダイアログベースでプログラムを作成しています. コンパイル,ビルドとも特にエラー,警告なく行えるのですが,なぜかプログラムが起動しません. メンバ変数をコメントアウトしたり,グローバルで宣言したりするとうまくいったりします. いったい,このような現象の原因としてどのようなことが考えられるのでしょうか.困っております. よろしくお願いします.

  • MFCのexeのプログラムを MFCのdllに書き換えたい

    VC++6.0を使用しています 新規作成 MFC AppWizard(exe) 新規 OK [ステップ1] ダイアログベース 次へ [ステップ2/4] 次へ [ステップ3/4] 次へ [ステップ4/4] 終了 で作られた、雛型のexeをそっくりMFCのDLLに書き換えたい と考えています exeで作られたアプリを他のユーザーがVB6.0からDLLとして呼び出したいので書き換えて欲しいと頼まれました MFCのDLLも雛型は簡単に出来上がるのですが 以下の関数を独立したオブジェクトにして、VB6.0からDLLの関数VBFUNC1として呼び出したいのですが、VBから呼び出すと AfxEnableControlContainer();でアサートで引っ掛かってしまいます ダイアログを使用したMFCのEXEをDLLとして使う場合の、コーディングについてご指南ください BOOL CAaaApp::VBFUNC1() //BOOL CAaaApp::InitInstance() {   AfxEnableControlContainer(); #ifdef _AFXDLL   Enable3dControls(); #else   Enable3dControlsStatic(); #endif   CAaaDlg dlg;   m_pMainWnd = &dlg;   int nResponse = dlg.DoModal();   if (nResponse == IDOK)   {   }   else if (nResponse == IDCANCEL)   {   }   return FALSE; }

  • MFCでのパイププログラム

    VC6のMFCダイアログベースでパイププログラムを作っています。 パイプをConnectNamedPipe()して待ち受けるまで出来たのですが、 待ち受けると同時にボタンクリック等のメッセージもハンドルしたいのですが、これって可能でしょうか?

  • WINDOWS終了時のお決まりエラー

    WIN-XPですが、シャットダウンする際に必ず、wlman.exeというプログラムの終了タスクがはじまり、途中で「プログラムが応答しません」 になります。結局、毎回、そのダイアログを無視して強制終了させているのですが、このwlman.exeってなんでしょう? 表示されなくするか、「プログラムが応答しません」にならないようにするにはどうすればいいのでしょう?

  • windows終了時のメッセージについて

    いつもお世話になります。 VC++6.0MFCダイアログベースでデスクトップアプリ を作成しているものです。 アプリ終了でINIファイルにウィンドウ位置を記憶させ 次回起動時に終了位置に表示させているのですが、 アプリが立ち上がったまま、スタートメニューからウィンドウズ自体を 終了させた時、アプリにはどのようなメッセージが飛んできているのか どなたか教えていただけないでしょうか? よろしくお願い致します。

専門家に質問してみよう