• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 在CFormView中實現打印

    發表于:2007-07-04來源:作者:點擊數: 標簽:
    程念陵 蔡 璇 在Microsoft Visual C++中,CFormView是一個非常有用的視類,CFormView類允許在視中放置控制,進一步可以放置ActiveX控件,并且可以利用ResourceWizard直接進行編輯。但是,CFormView不支持打印及打印預覽,我們可以利用考屏功能將CFormView的窗
    程念陵 蔡 璇

      在Microsoft Visual C++中,CFormView是一個非常有用的視類,CFormView類允許在視中放置控制,進一步可以放置ActiveX控件,并且可以利用ResourceWizard直接進行編輯。但是,CFormView不支持打印及打印預覽,我們可以利用考屏功能將CFormView的窗口打印出來。


      一、 定義可打印的CFormView類


      首先,利用ClassWizard生成一個新類CPrintView ,繼承于CFormView類,在CPrintView中定義如下變量:

      CRect m_rect; //保存得到的打印機打印區域大小

      CBitmap* m_pBmp; //屏幕拷貝為一個CBitmap

      CDC* m_pMemDC; //一個內存設備環境,兼容與打印機的設備環境

      BOOL m_bFlag; //一個BOOL變量,用于決定只創建m_pBmp和m_pMemDC一次

      然后,重載以下函數:

      virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);

      virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);

      virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);

      virtual void OnPrint(CDC* pDC, CPrintInfo*);


      二、 在CPrintView類的構造函數中初始化變量


      CPrintView::CPrintView() : CFormView(CPrintView::IDD)

      {

       m_pMemDC = new CDC;

       m_pBmp = new CBitmap;

       m_bFlag = FALSE;

       //{{AFX_DATA_INIT(CPrintView)

       // NOTE: the ClassWizard will add member initialization here

       //}}AFX_DATA_INIT

      }


      三、 重載CPrintView::OnBeginPrinting()函數


      void CPrintView::OnBeginPrinting(CDC* pDC, CPrintInfo* /*pInfo*/)

      {

      m_pMemDC-〉CreateCompatibleDC(pDC); //創建兼容與打印機設備環境的內存設備環境,將內存設備環境的指針保存在m_pMemDC中

      CClientDC dc(this); //得到窗口用戶區的設備環境,保存在dc中

      CRect rect;

      GetClientRect(rect); //得到窗口用戶區的矩形區域,保存在rect中

      m_pMemDC-〉SetMapMode(MM_ANISOTROPIC); //設置映射方式為

      MM_ANISOTROPIC

      m_pMemDC-〉SetWindowExt(dc.GetDeviceCaps(LOGPIXELSX),

      dc.GetDeviceCaps(LOGPIXELSY));

      m_pMemDC-〉SetViewportExt(m_pMemDC-〉GetDeviceCaps(LOGPIXELSX),

      m_pMemDC-〉GetDeviceCaps(LOGPIXELSY)); //設置坐標系

      if (m_bFlag == FALSE)

      {

      m_pBmp-〉CreateCompatibleBitmap(&dc,rect.Width(),rect.Height());

      } //創建兼容與dc的CBitmap

      m_pMemDC-〉SelectObject(m_pBmp); //選擇GDI對象

      dc.DPtoLP(rect); //將設備坐標轉換為邏輯坐標

      m_rect = rect; //保存窗口用戶區矩形

      m_pMemDC-〉BitBlt(0,0,rect.Width(),rect.Height(),&dc,0,0,SRCCOPY);

      //將dc復制到m_pMemDC

      if (m_bFlag == FALSE)

      m_bFlag = TRUE; //判斷是否第一次運行

      }


      四、 重載CPrintView::OnPrint()函數


      void CPrintView::OnPrint(CDC* pDC, CPrintInfo*)

      {

      pDC-〉SetMapMode(MM_ANISOTROPIC); //設置打印機設備環境的坐標系為

       MM_ANISOTROPIC

      pDC-〉SetWindowExt(m_pMemDC-〉GetDeviceCaps(LOGPIXELSX),

      m_pMemDC-〉GetDeviceCaps(LOGPIXELSY));

      pDC-〉SetViewportExt(pDC-〉GetDeviceCaps(LOGPIXELSX), //設置坐標系

      pDC-〉GetDeviceCaps(LOGPIXELSY));

      pDC-〉StretchBlt(0,0,m_rect.Width(),m_rect.Height(),

      m_pMemDC,0,0,m_rect.Width(),m_rect.Height(),SRCCOPY); //在打印機設備環境中繪制內存設備環境中的圖形

      }


      五、 需要將析構函數改寫


      CPrintView::~CPrintView()

      {

      delete m_pMemDC; //刪除內存設備環境

      delete m_pBmp; //刪除CBitmap的指針

      }   

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>