2014-12-06 6 views
2

Мне нужно поместить CView-производный класс в CDockablePane. Есть ли какой-либо пример кода где-нибудь, или кто-то может предоставить такой код?MFC CView в CDockablePane

Что я пробовал:

Видимо должна быть простой, онлайн я нашел совет, как «просто создать представление и установить его родителей, чтобы быть диалоговое окно или закрепляемые панели или какие окна вы хотите». Но почему-то это не работает, может быть, потому, что ему нужен CFrameWnd, я не знаю.

В любом случае, я должен иметь возможность сделать это, не создавая другого класса шаблона документа. Просто для работы с существующими документами и классами просмотра.

+0

Мой ответ помог? – user1

ответ

2

Вот пример:

класс, производный от CDockablePane:

// CRichEditPane .h

class CRichEditPane : public CDockablePane 
{ 
    DECLARE_DYNAMIC(CRichEditPane) 

public: 
    CRichEditPane(); 
    virtual ~CRichEditPane(); 

protected: 
    void AdjustLayout(); 
protected: 
    DECLARE_MESSAGE_MAP() 
public: 
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); 
    afx_msg void OnSize(UINT nType, int cx, int cy); 
}; 

// CRichEditPane .cpp

IMPLEMENT_DYNAMIC(CRichEditPane, CDockablePane) 

CRichEditPane::CRichEditPane() 
{ 

} 

CRichEditPane::~CRichEditPane() 
{ 
} 


BEGIN_MESSAGE_MAP(CRichEditPane, CDockablePane) 
    ON_WM_CREATE() 
    ON_WM_SIZE() 
END_MESSAGE_MAP() 


// CRichEditPane message handlers 


int CRichEditPane::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{ 
    if (CDockablePane::OnCreate(lpCreateStruct) == -1) 
     return -1; 

    CRuntimeClass *pClass = RUNTIME_CLASS(CRichEditViewInPane); 

    // calling constructor using IMPLEMENT_DYNCREATE macro 
    CRichEditViewInPane *pView = (CRichEditViewInPane*)pClass->CreateObject(); 


    if (!pView->Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, CRect(0,0,0,0), this, AFX_IDW_PANE_FIRST, NULL)) 
    { 
     return -1; 
    } 

    CRichEditCtrl ctrl; 
    ctrl.Create(WS_CHILD, CRect(0, 0, 0, 0), this, 10991); 

    return 0; 
} 


void CRichEditPane::OnSize(UINT nType, int cx, int cy) 
{ 
    CDockablePane::OnSize(nType, cx, cy); 

    AdjustLayout(); 
} 

вид класс, полученный по CView:

// CRichEditViewInPane .h

class CRichEditViewInPane : public CRichEditView 
{ 
    DECLARE_DYNCREATE(CRichEditViewInPane) 

protected: 
    CRichEditViewInPane();   // protected constructor used by dynamic creation 
    virtual ~CRichEditViewInPane(); 

public: 
#ifdef _DEBUG 
    virtual void AssertValid() const; 
#ifndef _WIN32_WCE 
    virtual void Dump(CDumpContext& dc) const; 
#endif 
#endif 

protected: 
    DECLARE_MESSAGE_MAP() 
}; 

// CRichEditViewInPane. cpp

IMPLEMENT_DYNCREATE(CRichEditViewInPane, CRichEditView) 

CRichEditViewInPane::CRichEditViewInPane() 
{ 

} 

CRichEditViewInPane::~CRichEditViewInPane() 
{ 
} 

BEGIN_MESSAGE_MAP(CRichEditViewInPane, CRichEditView) 
END_MESSAGE_MAP() 
+0

Работает отлично! –

+0

Как я могу изменить это на FormView? Я не могу получить доступ к функции Create, только CreateEx – manatttta

Смежные вопросы