本程序是基于多文档/视图的 ,开发环境2010添加了一个菜单, 点击菜单,想实现 弹出个对话框的功能。但是这个对话框的基类不是CDialog,而是CFormView。 ...........CFormView的派生类为:CMyDialogclass CMyDialog:public CFormView
{
...........};问题1:是不是按照一般对话框那样创建,直接new一下,再Create ,Show一下就可以了。
问题2:构造函数我已经改成public 的。我发现 这个CFormView没有OnInitDialog。 也没有OnCreate?  简直不可思议。太诡异了。 还有,这种对话框如何销毁。。百度又找不到相关资料

解决方案 »

  1.   

    CFormView和CDialog本来就不是相同的类,怎么可能方法会相同呢。你看它们的父类隔多远?
      

  2.   

    看看这个结构图就知道了
    http://msdn.microsoft.com/en-us/library/ws8s10w4(vs.71).aspx
      

  3.   

    你好,你说那该如何用?比如:菜单里面弹出对话框(这个对话框是基于CFormView)
      

  4.   

    你好, 怎么添加啊?他不是说, CFormView 派生的对话框和一般的对话框不一样。。
    所以不能new  Create Show 这样来创建
      

  5.   


    CFrameWnd* pFrameWnd = new CFrameWnd();
    pFrameWnd->Create(NULL, NULL, WS_VISIBLE | WS_OVERLAPPEDWINDOW, CRect(200, 200, 400, 300));
    CCreateContext cc;
    cc.m_pCurrentDoc = NULL;
    cc.m_pNewViewClass = RUNTIME_CLASS(CNewFormView);
    cc.m_pCurrentFrame = pFrameWnd;
    CNewFormView* pView = (CNewFormView*)(pFrameWnd->CreateView(&cc));
    pView->ShowWindow(SW_SHOW);
    pView->UpdateWindow();有点需要注意的是CFromView派生类关联的对话框资源的风格是WS_CHILD风格
      

  6.   

    部长,我想在菜单的相应函数里面创建对话框你 new  CFrameWnd,是不是不对啊?
      

  7.   

    你不是要在菜单的响应函数中弹出一个窗口吗?弹出的窗口不是CDialog
      

  8.   

    我是要在菜单中弹出个对话框(基类是CFormView的派生类)我尝试一下,部长是个大大的好人啊
      

  9.   

    1.在其他类的头文件中声明CMyClass类的指针,如:CMyClass *m_pMyCls;2.在其他类的构造函数中,添加如下代码:m_pMyCls = (CMyClass*)(RUNTIME_CLASS(CMyClass)->CreateObject());//最重要的地方3.在其他类的OnCreate函数中,添加如下代码:RECT rect;
    GetClientRect(&rect);
    m_pformOption->Create(NULL, "Option window", WS_CHILD|WS_VISIBLE, rect, this, 0, NULL);//重要的地方4.因为第3步调用到了CMyClass的Create函数,这个函数是继承CFormView类的,在CFormView中它是保护类型,因此,为了可以访问它,我们要在CMyClass中重载它,类型为公开类型。
      

  10.   

    http://blog.sina.com.cn/s/blog_3c9c4add0100dyaz.html
      

  11.   

    你要销毁窗口的话就直接调用pFrameWnd->DestroyWindow();就可以了
      

  12.   

    VisualEleven
    已经给你答案了!