我把窗口切分为块,其中两块为CView,一块为CFormView,
但我在打印的时候遇到这种问题,就是在当前的活动视图为CFormView时,
无法打印我所需要打印的CView1的内容,
只有在我用鼠标激活CView1时才可以正常打印CView1。我所要问的问题是:
在当前的活动视图是CFormView时,
如何仍然能通过选择打印菜单项来正常打印CView1,而不用通过手动激活CView1?
具体程序如何实现?

解决方案 »

  1.   

    不知道你是不是要全部打印?
    如果是你看看把整个设置成Active是不是可行?CWnd* SetActiveWindow( );
      

  2.   

    把响应打印的程序放在CChildFrame中。
      

  3.   

    to: small_wei(small我的是sdi程序,只是切分了窗口。
      

  4.   

    to: small_wei(small):
    具体怎么放啊,我是个初学者,说得具体一点好吗?
      

  5.   

    我认为不必放在CMainframe实现,你可以重载CView::OnPrint()函数把当前视中的内容打印完毕后再取另一个View内容接着打印。
      

  6.   

    如果一定要激活才能打印,你可以用程序激活CView1呀,不是一样吗
      

  7.   

    to: ghtsao(月之暗面) 如何在CFormView中激活CView1啊,帮帮忙吧,程序等着急用啊.
      

  8.   

    我试着用SendMessage发打印消息到CView1窗口,译连接能通过,但是执行是非法操作.
    我把打印消息发往框架窗口也不行,但是发存盘等消息能正常执行.
    我自己找不出解决的办法.
    高手帮帮忙吧,急啊!  CMainFrame *pWnd=(CMainFrame*)AfxGetApp()->m_pMainWnd;
      CComUIView *pView=(CComUIView*)(pWnd->m_wndSplitter1).GetPane(0,0);//得到CView1的指针
      HWND hWnd=pView->GetSafeHwnd(); //得到CView1窗口的句柄 
      ::SendMessage(hWnd,WM_COMMAND,ID_FILE_PRINT,0);//发打印消息到视图窗口
      

  9.   

    把响应打印的程序放在CFrame中,注意将打印,打印预览的ID号改为自己定义的新ID号,这样View就不会先处理该消息.例如ID_Print_Frame
    在Frame中,响应该消息OnPrintFrame,该函数首先将View1激活,然后pView1->PostMessage(IDPrint, 0,0) 这样就可以了.void OnPrintFrame()
    {
      m_wndSplitter1.SetActivePane(0,0);
      //得到CView1的指针
      AfxGetMainWnd()->SendMessage(WM_COMMAND,ID_FILE_PRINT,0);//  
    }
      

  10.   

    试试在 CFormView 中截获 WM_COMMAND, ID_FILE_PRINT 消息,然后将消息传递给另一个 View 处理:CMyFormView::OnCmdMsg(UINT nID, int nCode, void* pExtra,
        AFX_CMDHANDLERINFO* pHandlerInfo)
    {
        if (nID >= ID_FILE_PRINT_SETUP && nID <= ID_FILE_PRINT_PREVIEW)
        {
            // receive pointer of another view
            CView *pView = ...;
            return pView->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
        }    return CFormView::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
    }
      

  11.   

    我知道你的问题,实际上你的打印工具条变灰而不可选取,菜单也一样。
    在你原有的文档类CXXXXDoc中用AddView()加入你新的视图类,当然也可在OnCreateClient()中完成,正好借用CCreateContext 参数。