请问:
在SDI和MDI的mainfram里怎样得到view的指针;
app,mainframe,doctemple,doc,view的诞生时序是怎样的?
在SDI中创建了两个模式对话框dlg1.DoModal(),dlg2.DoModal(),在dlg1中怎样才能访问dlg2的数据呀?我用dlg.GetSafeHwnd(),FindWindow(类名,标题)返回的窗口名柄均为:0x00000000,这是怎么回事?是我调用的时机不对,还是位置不对。请各位大侠不悉赐教。

解决方案 »

  1.   

    SDI:GetActiveView   MDI:GetActiveFrame GetActiveView
    app mainframe view doc
    模态对话框能同时显示?
      

  2.   

    app,mainframe,doctemple,doc,view的诞生时序是:
    app,doctemple,mainframe,doc,view
    ////----------------------------
    模态对话框不可能一下显示俩个啊。
    Cdlg2 dlg2;
    m_my变量  = dlg2.变量;
    也就是可以直接访问啊
      

  3.   

    1.SDI和MDI都可以用GetActiveView();
      MDI:
      CMDIFrameWnd *pFrame = 
                 (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;// Get the active MDI child window.
    CMDIChildWnd *pChild = 
                 (CMDIChildWnd *) pFrame->GetActiveFrame();// or CMDIChildWnd *pChild = pFrame->MDIGetActive();// Get the active view attached to the active MDI child
    // window.
    CMyView *pView = (CMyView *) pChild->GetActiveView();2.app mainframe doctemplate doc childframe view3.一个SDI的模式对话框一次只会存在一个,除非是不同进程/线程之间,或者有一个非模式对话框;模式对话框domodal之后,在其调用的函数里是没有直接销毁的,所以可以直接读取出dlg的数据。
      

  4.   

    3 给你看个例子:
    假设父对话框为CFatherDlg;
    子对话框为CSonDlg,其为CFatherDlg的成员变量; 在CFatherDlg中的变量有:
    public:
         int m_nValue;
         CSonDlg m_SonDlg;在CSonDlg中的变量有:
    public:
        int m_nValue;
        CButton m_btnTansfer;//传递m_nValue到父对话框的m_nValue;为按钮m_btnTansfer添加消息响应函数:
    void CSonDlg::OnButtonTransfer() 
    {
        // TODO: Add your control notification handler code here
        
            UpdateData(TRUE);//根据需要,是否有需要更新的控件变量
            m_nValue=100;//如果m_nValue不是控件变量;
            ((CFatherDlg*)(CDialog*)GetParent())->m_nValue=m_nValue;
    ////////注意这里要强制转换两次!!!//1:还可以利用这个方法直接给CFatherDlg中的控件赋值
    //((CFatherDlg*)(CDialog*)GetParent())->SetDlgItemInt(IDC_EDIT_VALUE,m_nValue);
    //2:直接从父对话框中获得变量,传到子对话框
    //((CFatherDlg*)(CDialog*)GetParent())->GetDlgItem(IDC_EDIT_VALUE)->GetWindowText(m_strValue);m_strValue是CSonDlg的成员变量;可以直接看到变化;
    //m_nYear=((CFatherDlg*)(CDialog*)GetParent())->m_nValue}
      

  5.   

    2 http://218.108.41.12/vchome/book/new1/mfc_docview.zip 很好的文章解决你的问题
      

  6.   

    DoModal()之后,点IDOK或者IDCANCEL,此dlg就会被销毁吗
      

  7.   

    DoModal()之后,点IDOK或者IDCANCEL,此dlg就会被销毁吗
    ---no。
    这个dlg变量无效之后才会。
      

  8.   

    默认的IDOK或者IDCANCEL函数会自动调用EndDialog()函数,但是你不能访问对话框的变量
      

  9.   

    EndDialog(0),EndDialog(1)是可以销毁模式对话框的。。而且返回0或者1给调用该对话框的函数