- ベストアンサー
C++.NET 2003 「空のドキュメントの作成に失敗しました」って何?
CRichEditCtrlを使用しているのですが「空のドキュメントの作成に失敗しました」とエラーが出てしまいます。 そこでネットで調べたら、アプリケーションクラスのInitInstance();でAfxInitRichEdit2();を呼び出せば解決すると書いてましたが状況は変わらず「空のドキュメントの作成に失敗しました」が出てしまいます。 解決法が分かる方、ご回答お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>Error: Trying to create object which is not >DECLARE_DYNCREATE >or DECLARE_SERIAL: CTest2View. まさにこれが原因ですね。 .hファイルにある DECLARE_DYNAMIC を DECLARE_DYNCREATE に変更し、 おそらく.cppファイルにある IMPLEMENT_DYNAMIC を IMPLEMENT_DYNCREATE に変更すれば動くと思います。
その他の回答 (1)
- FAY
- ベストアンサー率49% (95/193)
CMainFrameのOnCreate()で -1が返されるとそういうメッセージが出ます。 OnCreate()内の処理で何らかの処理に失敗し、 -1が返されていませんか?
補足
CMainFrameのOnCreate()で-1が返されてはいないみたいですね。 最初に言えば良かったんですが、デバックでは Error: Trying to create object which is not DECLARE_DYNCREATE or DECLARE_SERIAL: CTest2View. と表示されています。 CTest2View が CrichEditCtrlです。 そこでTest2View.hを見てみると、 #pragma once // CTest2View class CTest2View : public CRichEditCtrl { DECLARE_DYNAMIC(CTest2View) public: CTest2View(); virtual ~CTest2View(); protected: DECLARE_MESSAGE_MAP() }; となっていました。 クラスの追加で CTest2View を作成していましたが、DECLARE_DYNCREATE も DECLARE_SERIAL もありません。 自分で記述しないといけないのでしょうか? 補足としてプロジェクトの概要とプロジェクト作成手順から説明いたします。何が悪いのか分からないので。 多分、上記の理由が一番と思いますが。 ◆概要◆ Outlook Express のように3分割されたウィンドウの作成。なのでクラスの配置は、 左にCTreeView 右上にCListView 右下にCRichEditCtrl と計画。 ◆手順◆ プロジェクト名:Test1(MFCアプリケーション) アプリケーションの種類:SDI プロジェクト形式:Windowsエクスプローラ 作成すると、この段階で2分割ウィンドウができます。(CTest1ViewがCListView、CLeftViewがCTreeView) 次にMFCクラスの追加(CTest2ViewでCRichEditCtrl) ◆コード◆ (1)MainFrm.h の CSplitterWnd m_wndSplitter;の下に、 CSplitterWnd m_wndSplitter1; を追加。 (2)MainFrm.cpp の初めに #include "Test2View.h" を追加。 (3)MainFrm.cpp の OnCreateClient を下記の通り書き換え。 { // 分割ウィンドウを作成します // 1行2列のスプリッターを作成 if( !m_wndSplitter.CreateStatic(this, 1, 2)) return FALSE; // 2列目(右側)のペインとなるスプリットを作成 // 2行1列のスプリッターを作成 if( !m_wndSplitter1 .CreateStatic( &m_wndSplitter, 2, 1, WS_CHILD | WS_VISIBLE | WS_BORDER, m_wndSplitter.IdFromRowCol(0, 1))) { m_wndSplitter.DestroyWindow(); return FALSE; } // 右上のペインを作成 if (!m_wndSplitter1.CreateView(0, 0, RUNTIME_CLASS(CTest1View), CSize(100, 100), pContext)) { m_wndSplitter.DestroyWindow(); return FALSE; } // 右下のペインを作成 if (!m_wndSplitter1.CreateView(1, 0, RUNTIME_CLASS(CTest2View), CSize(100, 100), pContext)) { m_wndSplitter.DestroyWindow(); return FALSE; } // 左のペインを設定 if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(100, 100), pContext)) { m_wndSplitter.DestroyWindow(); return FALSE; } return TRUE; } (4)Test1.cpp の InitInstance()で、CWinApp::InitInstance();の下に、 AfxInitRichEdit2();を追加。 これで動くと思っていたんですが。。 CRichEditViewだと問題いんですが。
お礼
動きました!ありがとうございます。 しかし、当方まちがっていまいました。 CRichEditCtrlは関数として使うべきなんですね。 すいません。