加载中…
个人资料
岩岩爸
岩岩爸
  • 博客等级:
  • 博客积分:0
  • 博客访问:53,759
  • 关注人气:9
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

[VC & MFC] 动态创建View的几个方法

(2008-09-05 10:14:25)
标签:

it

分类: MFC
  1. 如果是在CSplitterWnd内,可以如下方法:
    CCreateContext context;
    context.m_pNewViewClass = pViewClass;
    context.m_pCurrentDoc = pDoc;
    context.m_pNewDocTemplate = NULL;
    context.m_pLastView = NULL;
    context.m_pCurrentFrame = NULL;

     

    pSplitter->CreateView(row,col,pViewClass,size, &context);


    其中pViewClass是你要创建的View类的RUNTIME_CLASS,pSplitter是指向CSplitterWnd的指针。
  2. 在FrameWnd内,创建作为FrameWnd子窗口的View类:
    // the third way, use framewnd.
    CCreateContext ccx;
    ccx.m_pNewViewClass = RUNTIME_CLASS(CMainView);

     

    // here “this” means the framewnd.
    m_pMainView = DYNAMIC_DOWNCAST( CMainView, this->CreateView(&ccx) );

  3. 在其他任何地方创建View类:
    CView* pNewView = View*)pViewClass->CreateObject();
    pNewView->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,
    CRect(0,0,0,0),pSplitter,
    pSplitter->IdFromRowCol(row, col),&context);

其他:

  1. 创建完毕后,可以使用如下代码更新显示View:
    SetActiveView(pNewView);

     

    pSplitter->RecalcLayout();
    pNewView->OnInitialUpdate();
    pNewView->SendMessage(WM_PAINT);

  2. 可以使用下面的代码删除某个View,比如旧的View:
    pDoc->m_bAutoDelete = FALSE;
    pOldView->DestroyWindow();
    pDoc->m_bAutoDelete = TRUE;
  3. 下面代码可以设置View的ID:
    ::SetWindowLong(pOldActiveView->m_hWnd, GWL_ID, 0);
    ::SetWindowLong(pNewView->m_hWnd, GWL_ID, pSplitter->IdFromRowCol(row, col));
  4. 使用GetDlgItem()也可以根据ID来得到一个View的指针,这个是很方便的;
  5. 可以使用m_pMainView->ResizeParentToFit(FALSE);来使得父窗口从新调整大小。

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有