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(); ///打印

}

积累的VC编程小技巧之打印相关的更多相关文章

  1. 积累的VC编程小技巧之文件操作

    1.删除文件夹 // 删除文件夹及其所有内容void CBaseDoc::RemoveFolder(const CString &strPathName){    CString path = ...

  2. 积累的VC编程小技巧之按钮

    1.资源种创建的控件,对其属性的动态控制: 在对话框类的头文件里创建所要改变属性的控件的对象,如要改变一个Button(其ID为IDC_MyButton)的属性,则需创建Cbutton的对象m_but ...

  3. 积累的VC编程小技巧之框架窗口及其他

    1.修改主窗口风格 AppWizard生成的应用程序框架的主窗口具有缺省的窗口风格,比如在窗口标题条中自动添加文档名.窗口是叠加型的.可改变窗口大小等.要修改窗口的缺省风格,需要重载CWnd::Pre ...

  4. 积累的VC编程小技巧之编辑框

    1.如何让对话框中的编辑框接收对话框的消息 ////////////////////////////////////////////////// 如何让对话框中的CEdit控件类接收对话框的消息/// ...

  5. 积累的VC编程小技巧之标题栏和菜单

    1.窗口最大最小化按纽的控制 ①怎样在程序开始的时候让它最大化? ②vc++做出来的exe文件在窗体的右上方是没有最大化和最小化按钮的,怎样实现这一功能? ③如何在显示窗口时,使最大化按钮变灰?   ...

  6. 积累的VC编程小技巧之图标、光标及位图

    1.图标透明 (1).Windows中的图标其实是有两个图像组成的,其中一个用于与它要显示的位置的图像做“AND”操作,另一个作“XOR”操作. 透明:用“白色”AND,用“黑色”XOR 反色:用“白 ...

  7. 积累的VC编程小技巧之视图

    1.如何得到视图指针 [问题提出]    现在你有一个多线程的Demo,你想在多线程里处理视图指针里的函数,我们给这个函数起个名字:Put();该如何实现呢?   //有两种方法可以实现你的要求:   ...

  8. 积累的VC编程小技巧之对话框

    1.用鼠标移动基于对话框的无标题栏程序的简单方法 void CVCTestDlg::OnLButtonDown(UINT nFlags, CPoint point) {    //一句话解决问题    ...

  9. 积累的VC编程小技巧之工具提示

    1.用鼠标移动基于对话框的无标题栏程序的简单方法 void CVCTestDlg::OnLButtonDown(UINT nFlags, CPoint point) {    //一句话解决问题    ...

随机推荐

  1. ethtool命令

    用途 显示或修改以太网卡的配置信息. 语法 ethtool [ -a | -c | -g | -i | -d | -k | -r | -S |] ethX ethtool [-A] ethX [aut ...

  2. spider-web 是爬虫的网页版,使用xml配置

    spider-web 是爬虫的网页版,使用xml配置,支持大部分页面的爬取,支持爬取内容的保存.下载等. 其中配置文件格式为: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 ...

  3. 基于visual Studio2013解决C语言竞赛题之0607strcpy

     题目

  4. 大整数乘法python3实现

    因为python具有无限精度的int类型,所以用python实现大整数乘法是没意义的,可是思想是一样的.利用的规律是:第一个数的第i位和第二个数大第j位相乘,一定累加到结果的第i+j位上,这里是从0位 ...

  5. 开源的Android视频播放器

    之前尝试自己解码视频,然后播放显示,虽然音视频都可以播放,但是实现不了音视频的同步,所以使用第三方的视频库Vitamio来实现视频播放器功能,这样自己只需要实现播放解码的制作不不要关心底层解码和显示问 ...

  6. 简单字符串处理 hdu2532 Engine

    本来可以把这篇文章放入上一篇文章里,不过做这个题花了一点时间,也有一点收获,同时觉得网上的这个题目可供参考的文章有些少,那么就单独成篇吧. 首先分析下题目思路: 这个题目是个模拟题,步骤也很清晰. 首 ...

  7. 一、Nginx配置文件详解

    配置文件介绍 主要有两部分:分别是 main:主体部分 http{}:虚拟主机配置部分 配置指令主要以分号结尾:配置语法:directive value1 [value2 ....] 支持使用的变量 ...

  8. Cloud Engine

    Cloud Engine:大杀器如何炼成   郑昀 创建于2016/6/18 最后更新于2016/6/19 点击查看我的<如何从零搭建一个技术平台>,这是一个系列.转载时请注明“转载自旁观 ...

  9. 【译】在Asp.Net中操作PDF – iTextSharp - 操作图片

    原文 [译]在Asp.Net中操作PDF – iTextSharp - 操作图片 作为我的iTextSharp系列的文章的第七篇,开始探索使用iTextSharp在PDF中操作图片,理解本篇文章需要看 ...

  10. Qt读取ANSI格式文件——利用QTextCodec将其他编码格式的QByteArray转换为Unicode格式,或者从文件中读出后直接做转换

    t使用Unicode来表示字符串.但是通常需要访问一些非Unicode格式的字符串,例如打开一个GBK编码的中文文本文件,甚至一些非Unicode编码的日文,俄文等. Qt提供了QTextCodec类 ...