首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MFC CView转化为CDockablePane

MFC CView转化为CDockablePane
EN

Stack Overflow用户
提问于 2014-12-06 11:41:30
回答 1查看 3.7K关注 0票数 2

我需要将CView派生类放置到CDockablePane中。有没有什么代码示例,或者有人能提供这样的代码吗?

我试过的是:

显然应该很简单,我在网上发现了这样的建议:“只需创建视图并将其父窗口设置为对话框或可停靠窗格,或您想要什么样的窗口”。但由于某些原因,它不起作用,也许是因为它需要一个CFrameWnd,我不知道。

无论如何,我需要能够做到这一点,而不需要创建另一个文档模板类。仅用于处理已存在的文档和视图类。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-06 12:03:32

下面是一个例子:

派生自CDockablePane的类:

//CRichEditPane .h

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
IMPLEMENT_DYNCREATE(CRichEditViewInPane, CRichEditView)

CRichEditViewInPane::CRichEditViewInPane()
{

}

CRichEditViewInPane::~CRichEditViewInPane()
{
}

BEGIN_MESSAGE_MAP(CRichEditViewInPane, CRichEditView)
END_MESSAGE_MAP()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27331291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档