c++ visual-c++ mfc docking document-view

c++ - MFC CView en CDockablePane



visual-c++ docking (1)

Necesito ubicar una clase derivada CView en un CDockablePane. ¿Hay algún ejemplo de código en alguna parte, o alguien puede proporcionar dicho código?

Lo que probé:

Aparentemente debería ser simple, en línea encontré un consejo como "simplemente crea la vista y configura su principal para ser el cuadro de diálogo o el panel acoplable o qué tipo de ventana quieres". Pero por alguna razón, no funciona, tal vez es porque necesita un CFrameWnd, no lo sé.

De todos modos, necesito poder hacer esto sin crear otra clase de plantilla de documento. Solo para trabajar con documentos preexistentes y ver clases.


Aquí hay un ejemplo:

una clase derivada de 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(); }

una clase de vista derivada de 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()