![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
MFCの既存のフレームで、「最近使ったファイル」という欄があります。
これを選んだ際に、指定したプログラムでそのファイルを開きたいのですが、うまくいきません。
どうすればよろしいでしょうか?
HogeView.cpp
...(省略)
/***************************************
OnOpenRecentFileのオーバーライド
***************************************/
BOOL CWinApp::OnOpenRecentFile(UINT nID)
{
ASSERT_VALID(this);
ASSERT(m_pRecentFileList != NULL);
ASSERT(nID >= ID_FILE_MRU_FILE1);
ASSERT(nID < ID_FILE_MRU_FILE1 + (UINT)m_pRecentFileList->GetSize());
int nIndex = nID - ID_FILE_MRU_FILE1;
ASSERT((*m_pRecentFileList)[nIndex].GetLength() != 0);
/* 選んだファイルを表示 */
AfxMessageBox((*m_pRecentFileList)[nIndex]);
CHogeView *myview = new CHogeView();
★myview->GetDocument()->SetFilePath((*m_pRecentFileList)[nIndex]);
AfxMessageBox(myview->GetDocument()->GetFilePath());
myview->ReadFile((*m_pRecentFileList)[nIndex]);
TRACE2("MRU オリジナル関数内: open file (%d) '%s'.\n", (nIndex) + 1,
(LPCTSTR)(*m_pRecentFileList)[nIndex]);
if (OpenDocumentFile((*m_pRecentFileList)[nIndex]) == NULL){
m_pRecentFileList->Remove(nIndex);
}
return TRUE;
}
/******************************************************************
ファイル読み込み
******************************************************************/
void CHogeViewerView::ReadFile(CString filename){
...(省略)
}
コンパイルはできるのですが、どうやら★のところがうまく行かず、
Debug Assertion Failed!
とエラーがでます。
何が原因なのでしょうか?
No.1ベストアンサー
- 回答日時:
ん~ MFCのDOC/VIEWを使うのであればファイルの読み込みをViewクラスでやるのはお勧めできません
質問の直接の原因は Viewクラスは作っているがViewと関連のあるDocumentクラスが無いので
GetDocumentがNULLを返してくるためにアサーションが発生します
OpenDocumentFileからの戻り値の CDocument* を お使いのCDocumentからの派生クラスにキャストしてやれば Documentに関する部分は操作可能になります
CHogeDocument* pDoc = NULL;
if ((pDoc = (CHogeDocument*)OpenDocumentFile((*m_pRecentFileList)[nIndex])) == NULL){
といった具合にif文を書き換えてやります
このif文が成り立つのは Documentクラスを生成できなかった場合です
何らかの原因でドキュメント内容が読み込めなかったとか サイズ0のファイルを指定したとか
ドキュメント内容の取得は CHogeDocumentクラスの Serializeルーチンで読み込むようにしましょう
… 書き込み時もSerializeを使います
読み込み後Viewクラスで何かやりたいのであれば ViewクラスのOnInitialUpdateなどが適当かとおもいます
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) セレクトボックスで選択された値をコントローラーで使用したい 2 2022/07/26 16:41
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- 画像編集・動画編集・音楽編集 DVD Styler トラブル解決方法 6 2022/10/29 16:00
- Perl perlのflock関数でロックをかけたままopen関数で何度もファイルを開きなおすことはできますか 3 2023/05/01 22:25
- その他(プログラミング・Web制作) pythonのこのエラーがわかりません 3 2022/11/16 14:54
- その他(プログラミング・Web制作) python flask から fastapiへの移行時のエラー対処 1 2023/02/05 12:26
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アルキメデスの大戦の櫂はなぜ2...
-
自作のクラスファイルがインポ...
-
java eclipse 型に解決できません
-
グローバルIPとプライベートIP...
-
「天声人語」をインターネット...
-
IPアドレスの3バイト目の呼び方
-
packageとimport の違いって?
-
配列の重複する値とその個数を...
-
eclipseのパッケージって何?
-
会員制スポーツクラブ
-
河合塾
-
Java「デフォルトのパッケージ...
-
アクション?ロジック?
-
どこからも呼ばれていない無意...
-
クラスのプロパティに構造体を...
-
成人式の後中3のクラスで集まろ...
-
CImageクラスをVisualC++6.0で...
-
クラスにアクセスできません。
-
EclipseでJSPのコンパイルエラー
-
リアル世界三大贅沢とは?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
グローバルIPとプライベートIP...
-
配列の重複する値とその個数を...
-
java eclipse 型に解決できません
-
「天声人語」をインターネット...
-
オブジェクト指向プログラミン...
-
同一パッケージにあるクラスが...
-
SQLです教えてくださいお願いし...
-
自作のクラスファイルがインポ...
-
packageとimport の違いって?
-
重複エラーを解決するには
-
1 つのヘッダファイルに複数の...
-
UMLのクラス図はmain()も含むん...
-
main()を持つクラスが2つ以上...
-
3年間同じクラスになる確率
-
河合塾のクラス分けについて
-
EclipseでJSPのコンパイルエラー
-
どこからも呼ばれていない無意...
-
IPアドレスの3バイト目の呼び方
-
同じクラスにならない確率を教...
-
IPアドレスのクラスAを取得して...
おすすめ情報