BOOL CPrintView::GetPageSize(CSize &nRetVal)  // CPrintView 是自己创建的类
      {
         PRINTDLG FAR * pPrintDlg = new PRINTDLG;
         BOOL bRet = FALSE;
 
      // Get the current printer's settings.
 
         if(AfxGetApp()->GetPrinterDeviceDefaults(pPrintDlg))
         {
 
      // Get pointers to the two setting structures.
 
            DEVNAMES FAR *lpDevNames =
            (DEVNAMES FAR *)::GlobalLock(pPrintDlg->hDevNames);
 
            DEVMODE FAR *lpDevMode =
            (DEVMODE FAR *)::GlobalLock(pPrintDlg->hDevMode);
 
      // Get the specific driver information.
 
            CString szDriver((LPTSTR)lpDevNames +
                                 lpDevNames->wDriverOffset);
            CString szDevice((LPTSTR)lpDevNames +
                                 lpDevNames->wDeviceOffset);
            CString szOutput((LPTSTR)lpDevNames +
                                 lpDevNames->wOutputOffset);
 
      // Create a CDC object according to the current settings.
 
            CDC pDC;
            pDC.CreateDC(szDriver, szDevice, szOutput, lpDevMode);
 
      // Query this CDC object for the width and height of the current
      // page.
 
            /*static int*/ nRetVal.cx = pDC.GetDeviceCaps(HORZSIZE);
           /* static int*/ nRetVal.cy = pDC.GetDeviceCaps(VERTSIZE);
 
      // Get rid of the CDC object.
 
            pDC.DeleteDC();
 
      // Unlock the pointers to the setting structures.
 
            ::GlobalUnlock(pPrintDlg->hDevNames);
            ::GlobalUnlock(pPrintDlg->hDevMode);
 
          bRet = TRUE;
         }
       delete pPrintDlg;
       return bRet;
   }
posted on 2016-07-28 09:54  默默淡然  阅读(799)  评论(0编辑  收藏  举报