重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

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

A 回答 (3件)

ドキュメントクラスの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 );
}

といった具合でいいように思います

この回答への補足

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

補足日時:2011/01/18 20:33
    • good
    • 0

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



例えば、Testというプロジェクトを作成すると、CTestDocというCDocumentクラスから派生したクラスが自動で作成されますよね。それのことです。
    • good
    • 0

virtual void CDocument::ReportSaveLoadException をオーバーライドする方法もあります。


OnOpenDocumentでエラーになった場合は、この関数が呼び出されます。

CDocument::ReportSaveLoadException
http://msdn.microsoft.com/ja-jp/library/sw5196eb …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!