• ベストアンサー

VC++2003でSDIのMFCアプリ作成中です。

アイコン上にファイルをドロップし、ファイルをオープンする動作を実装し、 正常系は動作確認できました。 しかし、ファイルに読み込み制限などをかけていた場合、こちらのエラー処理に入る前に Windows内部エラー処理に入ってしまうようで、「○○へのアクセスは拒否されました」と ダイアログが表示されます。 デバッグで見て云ったところ、ProcessShellCommand(cmdInfo)の内部でエラーが発生し、 強制的におちているようですが、具体的にどこのクラス、メソッドでエラーを受け取って いるのでしょうか? オーバーライドしてエラー処理を自分で実装したいと考えています。

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

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

ドキュメントクラスのOnOpenDocumentの中で実行する GetFileがNULLを返した場合にそのMesseageBoxを表示しているようです アプリ側のドキュメントクラスに OnOpenDocumentを作成しておいて BOOL CXXXDocument::OnOpenDocument( LPCTSTR lpszPathName ) {   CFileException fe;   CFile* pFile = NULL;   pFile = GetFile( lpszPathName, CFile::modeRead, &fe );   if ( pFile ) {     // 正常に開けたので CDocumentで開けるようにココでは閉じる     pFile->Close();   } else {     // ここでエラー処理をする     return FALSE;       }   return CDocument::OnOpenDocument(lpszPathName ); } といった具合でいいように思います

gsfgsgshh
質問者

補足

CXXXDocumentというのはCDocumentを継承して新たにクラスを宣言するのでしょうか?

その他の回答 (2)

回答No.3

> CXXXDocumentというのはCDocumentを継承して新たにクラスを宣言するのでしょうか? 例えば、Testというプロジェクトを作成すると、CTestDocというCDocumentクラスから派生したクラスが自動で作成されますよね。それのことです。

回答No.2

virtual void CDocument::ReportSaveLoadException をオーバーライドする方法もあります。 OnOpenDocumentでエラーになった場合は、この関数が呼び出されます。 CDocument::ReportSaveLoadException http://msdn.microsoft.com/ja-jp/library/sw5196eb(v=VS.71).aspx

関連するQ&A