有个问题,我有一个MDI的工程,想实现一个Doc能对应多个View的功能,我的数组都放在Doc类中,当一个View关闭后,Doc类中的数组内容还保存,再新建一个View后,仍然能使用原来的数据,请指教我这样处理
void CResView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
ResizeParentToFit(); CResEditorDoc *pDoc = GetDocument();
if (pDoc->m_Array.GetSize() == 0)
{
AfxMessageBox("Is 0!!!");
m_ButtonResID = ID_MIN_GFXBUTTON_RANGE;
m_TxtResID = TXT_RES_ID_START;
}
else
{
m_ButtonResID = (pDoc->GetResIDElementByIndex(pDoc->m_Array.GetSize() - 1))->res_resID ++; }}
不行因为我知道默认一个文档对应一个视图,大家多指点,顺祝国庆快乐,来者都有分,谢谢!
void CResView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
ResizeParentToFit(); CResEditorDoc *pDoc = GetDocument();
if (pDoc->m_Array.GetSize() == 0)
{
AfxMessageBox("Is 0!!!");
m_ButtonResID = ID_MIN_GFXBUTTON_RANGE;
m_TxtResID = TXT_RES_ID_START;
}
else
{
m_ButtonResID = (pDoc->GetResIDElementByIndex(pDoc->m_Array.GetSize() - 1))->res_resID ++; }}
不行因为我知道默认一个文档对应一个视图,大家多指点,顺祝国庆快乐,来者都有分,谢谢!
2.
OnClose()
{
memset(m_Array,0,sizeof(m_Array));
}
保存数据是怎么写的
pDocTemplate1 = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CViewDoc),
RUNTIME_CLASS(CMainFrame), // main SDI frame window
RUNTIME_CLASS(CViewView1));
AddDocTemplate(pDocTemplate1); CSingleDocTemplate* pDocTemplate;
pDocTemplate2 = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CViewDoc),
RUNTIME_CLASS(CMainFrame), // main SDI frame window
RUNTIME_CLASS(CViewView2));
AddDocTemplate(pDocTemplate2);
我想你出错的原因是在开第二个视图的时候重新new了文档的对象,你取出的内容并不是第一个视图保存的内容
CChildFrame::CChildFrame()
{
// TODO: add member initialization code here
nScreenSizeX = 0;
nScreenSizeY = 0; //Get size from Dialog
if(IDOK == m_pSSSDlg.DoModal())
{
nScreenSizeX = m_pSSSDlg.nSizeX;
nScreenSizeY = m_pSSSDlg.nSizeY;
}
}BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs if( !CMDIChildWnd::PreCreateWindow(cs) )
return FALSE; //set MDIChildFrame style
cs.style &= ~WS_MAXIMIZEBOX;
cs.style &= ~WS_MINIMIZEBOX;
cs.style &= ~WS_THICKFRAME;
//Set CREATESTRUCT structure
if(IsSizeSelected())
{
cs.cx = nScreenSizeX;
cs.cy = nScreenSizeY;
m_GUILanguage = nLanguage; return TRUE;
}
else
{
return FALSE;
}
}先弹出一个Dialog框,取得设定的大小,然后置入,应该可以吧,好像没有重新new啊?谢谢
pDoc->XXX = nScreenSizeX;
有吗?
如果有的话,关注pDoc