EVC下打印的问题

yunfei1019   2009-5-18 14:47 楼主
我用EVC新建了个单文档带打印功能的工程。想实现直接打印的功能,也就是说在直接按一下打印按钮就可以打印了,不弹出设置的对话框。代码如下。。。




  1. // documentView.cpp : implementation of the CDocumentView class
  2. //

  3. #include "stdafx.h"
  4. #include "document.h"

  5. #include "documentDoc.h"
  6. #include "documentView.h"

  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif

  12. /////////////////////////////////////////////////////////////////////////////
  13. // CDocumentView

  14. IMPLEMENT_DYNCREATE(CDocumentView, CEditView)

  15. BEGIN_MESSAGE_MAP(CDocumentView, CEditView)
  16.         //{{AFX_MSG_MAP(CDocumentView)
  17.                 // NOTE - the ClassWizard will add and remove mapping macros here.
  18.                 //    DO NOT EDIT what you see in these blocks of generated code!
  19.         //}}AFX_MSG_MAP
  20.         // Standard printing commands
  21.         ON_COMMAND(ID_FILE_PRINT, CEditView::OnFilePrint)
  22. END_MESSAGE_MAP()

  23. /////////////////////////////////////////////////////////////////////////////
  24. // CDocumentView construction/destruction

  25. CDocumentView::CDocumentView()
  26. {
  27.         // TODO: add construction code here

  28. }

  29. CDocumentView::~CDocumentView()
  30. {
  31. }

  32. BOOL CDocumentView::PreCreateWindow(CREATESTRUCT& cs)
  33. {
  34.         // TODO: Modify the Window class or styles here by modifying
  35.         //  the CREATESTRUCT cs

  36.         BOOL bPreCreated = CEditView::PreCreateWindow(cs);
  37.         cs.style &= ~(ES_AUTOHSCROLL|WS_HSCROLL);        // Enable word-wrapping

  38.         return bPreCreated;
  39. }

  40. /////////////////////////////////////////////////////////////////////////////
  41. // CDocumentView drawing

  42. void CDocumentView::OnDraw(CDC* pDC)
  43. {
  44.         CDocumentDoc* pDoc = GetDocument();
  45.         ASSERT_VALID(pDoc);

  46.         // TODO: add draw code for native data here
  47. }

  48. /////////////////////////////////////////////////////////////////////////////
  49. // CDocumentView printing



  50. BOOL CDocumentView::OnPreparePrinting(CPrintInfo* pInfo)
  51. {
  52.         // default CEditView_WCE preparation
  53.         [color=#FF0000]pInfo->m_bDirect=TRUE;[/color]
  54.         return DoPreparePrinting(pInfo);
  55. }

  56. void CDocumentView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
  57. {
  58.         // Default CEditView_WCE begin printing.
  59.         CEditView::OnBeginPrinting(pDC, pInfo);
  60. }

  61. void CDocumentView::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)
  62. {
  63.         // Default CEditView_WCE end printing
  64.         CEditView::OnEndPrinting(pDC, pInfo);
  65. }

  66. /////////////////////////////////////////////////////////////////////////////
  67. // CDocumentView diagnostics

  68. #ifdef _DEBUG
  69. void CDocumentView::AssertValid() const
  70. {
  71.         CEditView::AssertValid();
  72. }

  73. void CDocumentView::Dump(CDumpContext& dc) const
  74. {
  75.         CEditView::Dump(dc);
  76. }

  77. CDocumentDoc* CDocumentView::GetDocument() // non-debug version is inline
  78. {
  79.         ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDocumentDoc)));
  80.         return (CDocumentDoc*)m_pDocument;
  81. }
  82. #endif //_DEBUG

  83. /////////////////////////////////////////////////////////////////////////////
  84. // CDocumentView message handlers




但是老是提示
D:\test\document\documentView.cpp(73) : error C2039: 'm_bDirect' : is not a member of 'CPrintInfo'

请问是什么问题,或者有什么解决办法??谢谢大家栏

回复评论 (8)

从 MFC 3.0 升级到 8.0 后不受支持的 eVC 类的列表

CPrintInfo Members

evc不支持CPrintInfo 的成员
点赞  2009-5-18 14:56
哪要如何实现这个功能呢
点赞  2009-5-18 14:59
你在这个函数中自己加一个可控的全局变量吧

BOOL CDocumentView::OnPreparePrinting(CPrintInfo* pInfo)
{
    // default CEditView_WCE preparation
    pInfo->m_bDirect=TRUE;替换掉它
    return DoPreparePrinting(pInfo);
}
点赞  2009-5-18 15:08
帮助文档上说
Remarks

MFC for Windows CE does not support the following data members of the CPrintInfo class:

CPrintInfo:: m_bDocObject
CPrintInfo:: m_bPreview
CPrintInfo:: m_bDirect
CPrintInfo:: m_nNumPreviewPages
CPrintInfo:: m_nOffsetPage
CPrintInfo:: m_dwFlags
Requirements

  Windows CE versions: 2.10 and later  
  Header file: Declared in Afxext.h



点赞  2009-5-18 15:16
提示: 作者被禁止或删除 内容自动屏蔽
点赞  2009-5-18 15:22
那句代码是我加上去的。去掉了是能打印,但是会出现Print对话框。
点赞  2009-5-18 15:29
EVC是不支持这个数据成员把,是否还有其他方法吗??
点赞  2009-5-18 15:48

  1. void CMyDialog::Print()
  2. {
  3.     CDC dc;
  4.     CPrintDialog printDlg(FALSE);

  5.     if (printDlg.DoModal() == IDCANCEL)     // Get printer settings from user
  6.         return;

  7.     dc.Attach(printDlg.GetPrinterDC());     // Get and attach a printer DC
  8.     dc.m_bPrinting = TRUE;

  9.     CString strTitle;                       // Get the application title
  10.     strTitle.LoadString(AFX_IDS_APP_TITLE);

  11.     DOCINFO di;                             // Initialise print document details
  12.     ::ZeroMemory (&di, sizeof (DOCINFO));
  13.     di.cbSize = sizeof (DOCINFO);
  14.     di.lpszDocName = strTitle;

  15.     BOOL bPrintingOK = dc.StartDoc(&di);    // Begin a new print job

  16.     // Get the printing extents and store in the m_rectDraw field of a
  17.     // CPrintInfo object
  18.     CPrintInfo Info;
  19.     Info.m_rectDraw.SetRect(0,0,
  20.                             dc.GetDeviceCaps(HORZRES),
  21.                             dc.GetDeviceCaps(VERTRES));

  22.     OnBeginPrinting(&dc, &Info);            // Call your "Init printing" function
  23.     for (UINT page = Info.GetMinPage();
  24.          page <= Info.GetMaxPage() && bPrintingOK;
  25.          page++)
  26.     {
  27.         dc.StartPage();                     // begin new page
  28.         Info.m_nCurPage = page;
  29.         OnPrint(&dc, &Info);                // Call your "Print page" function
  30.         bPrintingOK = (dc.EndPage() > 0);   // end page
  31.     }
  32.     OnEndPrinting(&dc, &Info);              // Call your "Clean up" function

  33.     if (bPrintingOK)
  34.         dc.EndDoc();                        // end a print job
  35.     else
  36.         dc.AbortDoc();                      // abort job.

  37.     dc.DeleteDC();                          // delete the printer DC
  38. }
点赞  2009-5-19 14:59
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复