none
文档/视图结构,CChildFrame Cview关系 RRS feed

  • 问题

  • 大家好!

    我的程序是多文档 应用程序 起初我在Cview里的OnCreate()中加了个pdf的阅读控件!程序完全没效果。

    然后我尝试在CChildFrame 的OnCreate()加了同样的代码,同时删除Cview里的代码。程序正常运行了!

    后来我跟综代码发现,调用顺序是:CChildFrame::OnCreate()-》 Cview::OnCreate()。

    所以我想问的是,这不就矛盾了么!!
    2009年9月17日 12:45

答案

  • 我又试了一下! Cview::OnCreate() 添加是可以的,之所以没显示,是因为我没有在Cview::OnSize()里做设置!

    下面是我的加入pdf阅读控件的相关代码:(在Cview中
    int CTestView::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    	if (CView::OnCreate(lpCreateStruct) == -1)
    		return -1;
    
    	// TODO:  在此添加您专用的创建代码
    	CTesttApp* pApp = (CTesttApp*)AfxGetApp();
    	CString strFileName= pApp->GetFileName();
    
    	if(!::IsWindow(m_PdfReader.GetSafeHwnd()))
    	{
    		CRect rect;
    		GetClientRect(rect);
    		if (!m_PdfReader.Create(NULL,WS_VISIBLE,rect,this,0)) 
    		{
    			AfxMessageBox(_T("Create PDF.ocx failed..."));
    			return -1;
    		}
    	}
    
    	if(m_PdfReader)
    	{
    		
    		m_PdfReader.LoadFile(strFileName);
    	}
    
    	return 0;
    }

    下面就是我忘了的OnSize
    void CTestView::OnSize(UINT nType, int cx, int cy)
    {
    	CView::OnSize(nType, cx, cy);
    
    	// TODO: 在此处添加消息处理程序代码
    	if (GetSafeHwnd() == NULL)
    	{
    		return;
    	}
    	   if(!m_PdfReader)
    	{
    		return;
    	}
    	CRect rectClient;
    	GetClientRect(rectClient);
    
    
    	m_PdfReader.SetWindowPos(NULL, rectClient.left + 1, rectClient.top+ 1, rectClient.Width() - 2,
    		rectClient.Height()- 2, SWP_NOACTIVATE | SWP_NOZORDER);
    }

    2009年9月18日 2:39

全部回复

  • 执行的是CView吗?是不是有重载?


    麻烦把正确答案设为解答。
    2009年9月17日 15:04
    版主
  • 工程 test  执行 ctestview 谢谢!
    2009年9月18日 2:18
  • 我又试了一下! Cview::OnCreate() 添加是可以的,之所以没显示,是因为我没有在Cview::OnSize()里做设置!

    下面是我的加入pdf阅读控件的相关代码:(在Cview中
    int CTestView::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    	if (CView::OnCreate(lpCreateStruct) == -1)
    		return -1;
    
    	// TODO:  在此添加您专用的创建代码
    	CTesttApp* pApp = (CTesttApp*)AfxGetApp();
    	CString strFileName= pApp->GetFileName();
    
    	if(!::IsWindow(m_PdfReader.GetSafeHwnd()))
    	{
    		CRect rect;
    		GetClientRect(rect);
    		if (!m_PdfReader.Create(NULL,WS_VISIBLE,rect,this,0)) 
    		{
    			AfxMessageBox(_T("Create PDF.ocx failed..."));
    			return -1;
    		}
    	}
    
    	if(m_PdfReader)
    	{
    		
    		m_PdfReader.LoadFile(strFileName);
    	}
    
    	return 0;
    }

    下面就是我忘了的OnSize
    void CTestView::OnSize(UINT nType, int cx, int cy)
    {
    	CView::OnSize(nType, cx, cy);
    
    	// TODO: 在此处添加消息处理程序代码
    	if (GetSafeHwnd() == NULL)
    	{
    		return;
    	}
    	   if(!m_PdfReader)
    	{
    		return;
    	}
    	CRect rectClient;
    	GetClientRect(rectClient);
    
    
    	m_PdfReader.SetWindowPos(NULL, rectClient.left + 1, rectClient.top+ 1, rectClient.Width() - 2,
    		rectClient.Height()- 2, SWP_NOACTIVATE | SWP_NOZORDER);
    }

    2009年9月18日 2:39
  • 最后我还是不明白! 如果我在CChildFrame::OnCreate()中添加如上代码,那我的pdf控件不就应该被后来绘制的view所覆盖了么??

    可结果为什么却不是这样呢?
    2009年9月18日 2:42