您现在的位置: 天下网吧 >> 网吧天地 >> 天下码农 >> 微信小程序 >> 正文

积累的VC编程小技巧之打印相关

2011-1-5vczx佚名

1.修改打印预览的ToolBar

AFX_IDD_PREVIEW_TOOLBAR这个ID创建一个DialogBar。则系统就会用新创建的DialogBar代替系统默认的那个

2.关于打印

1.要打印哪个视就
((CMainFrame*)AfxGetMainWnd())->m_wndSplitter.SetActivePane(...)

//要打印的那个视对应的Pane

 

2.有一个单文档工程,文档窗口被切分:左视图由CTreeView 的派生类管理,右视图由CListView 的派生类CMyListView(其为风格为LVS_REPORT)管理,我想为右视图添加打印和打印预览,我在MyListView.cpp中添加了
    ON_COMMAND(ID_FILE_PRINT,CListView::OnFilePrint)
    ON_COMMAND(ID_FILE_PRINT_PREVIEW,CListView::OnFilePrintPreview)还有
    BOOL CMyListView::OnPreparePrinting(CPrintInfo* pInfo)
    {
         // TODO: call DoPreparePrinting to invoke the Print dialog box

         // return CListView::OnPreparePrinting(pInfo);
         pInfo->SetMaxPage(2);
         BOOL bret=DoPreparePrinting(pInfo);
         pInfo->m_nNumPreviewPages=2;
         return bret;
    }

3. 下面是从MSDN中摘出来的一段,是用来改变消息路由的。用了这段代码之后,CView中的消息(菜单,控件,子窗口)将先被CMyShape类来处理。不知道你要的是不是这样的效果。

    // This example illustrates extending the framework's standard command
    // route from the view to objects managed by the view.  This example
    // is from an object-oriented drawing application, similar to the
    // DRAWCLI sample application, which draws and edits "shapes".

    BOOL CMyView::OnCmdMsg(UINT nID, int nCode, void* pExtra,
       AFX_CMDHANDLERINFO* pHandlerInfo)
    {
           // Extend the framework's command route from the view to
           // the application-specific CMyShape that is currently selected
           // in the view. m_pActiveShape is NULL if no shape object
           // is currently selected in the view.
           if ((m_pActiveShape != NULL)
                && m_pActiveShape->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
             return TRUE;

           // If the object(s) in the extended command route don't handle
            // the command, then let the base class OnCmdMsg handle it.
            return CView::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
          }

          // The command handler for ID_SHAPE_COLOR (menu command to change
          // the color of the currently selected shape) was added to
          // the message map of CMyShape (note, not CMyView) using ClassWizard.  

          // The menu item will be automatically enabled or disabled, depending
          // on whether a CMyShape is currently selected in the view, that is,
          // depending on whether CMyView::m_pActiveView is NULL.  It is not
          // necessary to implement an ON_UPDATE_COMMAND_UI handler to enable
          // or disable the menu item.  

      BEGIN_MESSAGE_MAP(CMyShape, CCmdTarget)
       //{{AFX_MSG_MAP(CMyShape)
       ON_COMMAND(ID_SHAPE_COLOR, OnShapeColor)
       //}}AFX_MSG_MAP
      END_MESSAGE_MAP()

如果你只是想调用OnFilePrint( )函数,可以试一试下面的代码,就和调用其它类中的函数一样。

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();

pView->OnFilePrint( );

 

 

4.

void CMyReportView::OnFileOpen()
{
char Filter[] = "Crystal Report files(*.rpt)|*.rpt|All files(*.*)|*.*||";
CRect rect;
CFileDialog OpenDlg(TRUE,0,0,OFN_HIDEREADONLY|OFN_FILEMUSTEXIST,(LPCTSTR)Filter,NULL);
if(OpenDlg.DoModal()!=IDOK) ///显示文件对话框
return;
CString m_fName=OpenDlg.GetPathName(); ///取得文件名
if(m_CrystalReport)
m_CrystalReport.DestroyWindow();
GetClientRect(rect);
///////////////////创建控件///////////////
if (!m_CrystalReport.Create(AfxRegisterWndClass(0, AfxGetApp()->LoadStandardCursor(IDC_ARROW)),WS_CHILD|WS_VISIBLE,rect,this,IDC_CRYSTALREPORT1))
{
AfxMessageBox("控件创建失败!");
return ;
}
m_CrystalReport.SetWindowParentHandle((long)(this->m_hWnd));///设置父窗口
m_CrystalReport.SetWindowBorderStyle(0); ///设置为没有边框
m_CrystalReport.SetWindowLeft(0); ///左空间
m_CrystalReport.SetWindowTop(0); ///顶部空间
m_CrystalReport.SetWindowControls(FALSE); ///不显示工具条
m_CrystalReport.SetReportFileName(m_fName); ///设置报表文件
m_CrystalReport.SetWindowWidth(rect.Width()); ///设置窗口宽度
m_CrystalReport.SetWindowHeight(rect.Height()); ///设置窗口高度
m_CrystalReport.SetFormulas(0, "Company=\"VC知识库\""); ///将报表中的Company变量的值设置为VC知识库
m_CrystalReport.SetDestination(0); ///设置输出对象是屏幕
m_CrystalReport.PrintReport(); ///显示报表
}
void CMyReportView::OnFilePrint()
{
if(m_CrystalReport && m_CrystalReport.GetReportFileName() != "")
{
m_CrystalReport.SetDestination(1); ///设置输出对象是打印机
m_CrystalReport.PrintReport(); ///打印

}

欢迎访问最专业的网吧论坛,无盘论坛,网吧经营,网咖管理,网吧专业论坛 https://bbs.txwb.com

关注天下网吧微信/下载天下网吧APP/天下网吧小程序,一起来超精彩

本文来源:vczx 作者:佚名

声明
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。若文章侵犯了您的相关权益,请及时与我们联系,我们会及时处理,感谢您对本站的支持!联系邮箱:support@txwb.com,系统开号,技术支持,服务联系QQ:1175525021本站所有有注明来源为天下网吧或天下网吧论坛的原创作品,各位转载时请注明来源链接!
天下网吧 网吧天下