我把窗口切分为块,其中两块为CView,一块为CFormView,
但我在打印的时候遇到这种问题,就是在当前的活动视图为CFormView时,
无法打印我所需要打印的CView1的内容,
只有在我用鼠标激活CView1时才可以正常打印CView1。我所要问的问题是:
在当前的活动视图是CFormView时,
如何仍然能通过选择打印菜单项来正常打印CView1,而不用通过手动激活CView1?
具体程序如何实现?
但我在打印的时候遇到这种问题,就是在当前的活动视图为CFormView时,
无法打印我所需要打印的CView1的内容,
只有在我用鼠标激活CView1时才可以正常打印CView1。我所要问的问题是:
在当前的活动视图是CFormView时,
如何仍然能通过选择打印菜单项来正常打印CView1,而不用通过手动激活CView1?
具体程序如何实现?
如果是你看看把整个设置成Active是不是可行?CWnd* SetActiveWindow( );
具体怎么放啊,我是个初学者,说得具体一点好吗?
我把打印消息发往框架窗口也不行,但是发存盘等消息能正常执行.
我自己找不出解决的办法.
高手帮帮忙吧,急啊! 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);//发打印消息到视图窗口
在Frame中,响应该消息OnPrintFrame,该函数首先将View1激活,然后pView1->PostMessage(IDPrint, 0,0) 这样就可以了.void OnPrintFrame()
{
m_wndSplitter1.SetActivePane(0,0);
//得到CView1的指针
AfxGetMainWnd()->SendMessage(WM_COMMAND,ID_FILE_PRINT,0);//
}
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);
}
在你原有的文档类CXXXXDoc中用AddView()加入你新的视图类,当然也可在OnCreateClient()中完成,正好借用CCreateContext 参数。