MDI中无模式对话框中,创建视图(CStatic),出现异常,(带源代码的),请高手帮忙!请看附件源代码!

解决方案 »

  1.   

    CCreateContext cc;
    cc.m_pNewViewClass = RUNTIME_CLASS(CModelessView);
    cc.m_pCurrentDoc = m_pView->GetDocument();
    cc.m_pNewDocTemplate = NULL;
    cc.m_pLastView = NULL;
    cc.m_pCurrentFrame = NULL;

    m_pView = (CModelessView*)CreateNewView(&cc, this, CRect(0, 0, 0, 0), 0);
    if (m_pView == NULL)
    EndDialog(IDCANCEL);

    // place the View in the view rectangle
    CRect rect;
    CStatic *s = (CStatic*)GetDlgItem(IDC_STATIC_MAP);
    s->GetWindowRect (&rect);
    ScreenToClient(rect);
    m_pView->MoveWindow(&rect);
    s->ShowWindow(SW_HIDE);
    这样还是不行阿
      

  2.   

    view和dialog最好别混用,两者差别很大。
    对话框是用对话框模板来创建的,对话框本身是在代码中构造并创建的,初始化是通过WM_INITDIALOG消息响应函数OnInitDialog来进行的;
    view是一种用于文档-视图模型的特殊窗口类,本身支持动态创建和自我删除特性,创建不是由用户进行的,而是通过定义在文档模板里面,然后由框架自动创建的,初始化是通过OnInitialUpdate虚拟函数来进行的。
    view和dialog都提供了一些功能相似的类,比如基于对话框模板的CDialog和CFormView;显示HTML的CDHtmlDialog和CHtmlView;CEditView和有edit控件的dialog;CListView和有CListCtrl控件的dialog。如果你使用MDI或者SDI,请尽量使用view类,而不要使用Dialog类
      

  3.   

    楼主为啥不用FormView呢,和你现在的效果一样啊
      

  4.   

    代码大概看了.
    你的Dialog的风格应该设置为WS_CHILD.
    这样一来就可以创建了.
    出错的地方也看了.但是绝对不是对话框造成的。
    是在View的OnDraw的时候GetDocument()这个函数中错的,。
    把这里注释就可以绘制出来对话框了。
    你用向导再生成一个,然后使用你的方法再创建个Dialog试试看注意设置风格为WS_CHILD。
    感觉你的CModelessViewEx和CModellessView以及Document这里的关系似乎错了。另外个人认为,你的Dialog应该放在Document中,因为Document应该是来存放数据的。而View的责任只是显示数据。
      

  5.   

    cc.m_pCurrentDoc = m_pView->GetDocument();int CModelessView::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message)
    {
    // TODO: Add your message handler code here and/or call default return CWnd::OnMouseActivate(pDesktopWnd, nHitTest, message);
    }建议 CModelessView 直接派生于CWnd