dポイントプレゼントキャンペーン実施中!

CRichEditCtrlを使用しているのですが「空のドキュメントの作成に失敗しました」とエラーが出てしまいます。
そこでネットで調べたら、アプリケーションクラスのInitInstance();でAfxInitRichEdit2();を呼び出せば解決すると書いてましたが状況は変わらず「空のドキュメントの作成に失敗しました」が出てしまいます。

解決法が分かる方、ご回答お願いします。

A 回答 (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
に変更すれば動くと思います。
    • good
    • 0
この回答へのお礼

動きました!ありがとうございます。
しかし、当方まちがっていまいました。
CRichEditCtrlは関数として使うべきなんですね。
すいません。

お礼日時:2006/03/25 17:19

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だと問題いんですが。

補足日時:2006/03/22 08:56
    • good
    • 0

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