10 #define __ATLPRINT_H__ 15 #error atlprint.h is not supported on Windows CE 19 #error atlprint.h requires atlapp.h to be included first 23 #error atlprint.h requires atlwin.h to be included first 49 template <
unsigned int t_nInfo>
53 typedef void infotype;
56 template <>
class _printer_info<1> {
public:
typedef PRINTER_INFO_1 infotype; };
57 template <>
class _printer_info<2> {
public:
typedef PRINTER_INFO_2 infotype; };
58 template <>
class _printer_info<3> {
public:
typedef PRINTER_INFO_3 infotype; };
59 template <>
class _printer_info<4> {
public:
typedef PRINTER_INFO_4 infotype; };
60 template <>
class _printer_info<5> {
public:
typedef PRINTER_INFO_5 infotype; };
61 template <>
class _printer_info<6> {
public:
typedef PRINTER_INFO_6 infotype; };
62 template <>
class _printer_info<7> {
public:
typedef PRINTER_INFO_7 infotype; };
64 #ifdef _ATL_USE_NEW_PRINTER_INFO 65 template <>
class _printer_info<8> {
public:
typedef PRINTER_INFO_8 infotype; };
66 template <>
class _printer_info<9> {
public:
typedef PRINTER_INFO_9 infotype; };
67 #endif // _ATL_USE_NEW_PRINTER_INFO 70 template <
unsigned int t_nInfo>
75 typename _printer_info<t_nInfo>::infotype* m_pi;
83 GetPrinterInfo(hPrinter);
92 bool GetPrinterInfo(HANDLE hPrinter)
95 return GetPrinterInfoHelper(hPrinter, (BYTE**)&m_pi, t_nInfo);
101 delete [] (BYTE*)m_pi;
105 static bool GetPrinterInfoHelper(HANDLE hPrinter, BYTE** pi,
int nIndex)
107 ATLASSERT(pi != NULL);
110 ::GetPrinter(hPrinter, nIndex, NULL, 0, &dw);
113 ATLTRY(pb =
new BYTE[dw]);
118 if (!::GetPrinter(hPrinter, nIndex, pb, dw, &dwNew))
134 template <
bool t_bManaged>
142 CPrinterT(HANDLE hPrinter = NULL) : m_hPrinter(hPrinter)
153 if (hPrinter != m_hPrinter)
156 m_hPrinter = hPrinter;
161 bool IsNull()
const {
return (m_hPrinter == NULL); }
163 bool OpenPrinter(HANDLE hDevNames,
const DEVMODE* pDevMode = NULL)
166 DEVNAMES* pdn = (DEVNAMES*)::GlobalLock(hDevNames);
169 LPTSTR lpszPrinterName = (LPTSTR)pdn + pdn->wDeviceOffset;
170 b = OpenPrinter(lpszPrinterName, pDevMode);
171 ::GlobalUnlock(hDevNames);
176 bool OpenPrinter(LPCTSTR lpszPrinterName,
const DEVMODE* pDevMode = NULL)
179 PRINTER_DEFAULTS pdefs = { NULL, (DEVMODE*)pDevMode, PRINTER_ACCESS_USE };
180 ::OpenPrinter((LPTSTR) lpszPrinterName, &m_hPrinter, (pDevMode == NULL) ? NULL : &pdefs);
182 return (m_hPrinter != NULL);
185 bool OpenPrinter(LPCTSTR lpszPrinterName, PRINTER_DEFAULTS* pprintdefs)
188 ::OpenPrinter((LPTSTR) lpszPrinterName, &m_hPrinter, pprintdefs);
189 return (m_hPrinter != NULL);
192 bool OpenDefaultPrinter(
const DEVMODE* pDevMode = NULL)
195 const int cchBuff = 512;
196 TCHAR buffer[cchBuff] = { 0 };
197 ::GetProfileString(_T(
"windows"), _T(
"device"), _T(
",,,"), buffer, cchBuff);
198 int nLen = lstrlen(buffer);
201 LPTSTR lpsz = buffer;
204 if (*lpsz == _T(
','))
209 lpsz = CharNext(lpsz);
211 PRINTER_DEFAULTS pdefs = { NULL, (DEVMODE*)pDevMode, PRINTER_ACCESS_USE };
212 ::OpenPrinter(buffer, &m_hPrinter, (pDevMode == NULL) ? NULL : &pdefs);
214 return m_hPrinter != NULL;
219 if (m_hPrinter != NULL)
222 ::ClosePrinter(m_hPrinter);
227 bool PrinterProperties(HWND hWnd = NULL)
230 hWnd = ::GetActiveWindow();
231 return !!::PrinterProperties(hWnd, m_hPrinter);
234 HANDLE CopyToHDEVNAMES()
const 239 LPTSTR lpszPrinterName = NULL;
241 if (pinfon5.GetPrinterInfo(m_hPrinter))
242 lpszPrinterName = pinfon5.m_pi->pPrinterName;
243 else if (pinfon2.GetPrinterInfo(m_hPrinter))
244 lpszPrinterName = pinfon2.m_pi->pPrinterName;
245 if (lpszPrinterName != NULL)
247 int nLen =
sizeof(DEVNAMES) + (lstrlen(lpszPrinterName) + 1) *
sizeof(TCHAR);
248 h = ::GlobalAlloc(GMEM_MOVEABLE, nLen);
249 BYTE* pv = (BYTE*)::GlobalLock(h);
250 DEVNAMES* pdev = (DEVNAMES*)pv;
254 pdev->wDeviceOffset =
sizeof(DEVNAMES) /
sizeof(TCHAR);
255 pv = pv +
sizeof(DEVNAMES);
256 SecureHelper::strcpy_x((LPTSTR)pv, lstrlen(lpszPrinterName) + 1, lpszPrinterName);
263 HDC CreatePrinterDC(
const DEVMODE* pdm = NULL)
const 268 LPTSTR lpszPrinterName = NULL;
270 if (pinfo5.GetPrinterInfo(m_hPrinter))
271 lpszPrinterName = pinfo5.m_pi->pPrinterName;
272 else if (pinfo2.GetPrinterInfo(m_hPrinter))
273 lpszPrinterName = pinfo2.m_pi->pPrinterName;
274 if (lpszPrinterName != NULL)
275 hDC = ::CreateDC(NULL, lpszPrinterName, NULL, pdm);
279 HDC CreatePrinterIC(
const DEVMODE* pdm = NULL)
const 284 LPTSTR lpszPrinterName = NULL;
286 if (pinfo5.GetPrinterInfo(m_hPrinter))
287 lpszPrinterName = pinfo5.m_pi->pPrinterName;
288 else if (pinfo2.GetPrinterInfo(m_hPrinter))
289 lpszPrinterName = pinfo2.m_pi->pPrinterName;
290 if (lpszPrinterName != NULL)
291 hDC = ::CreateIC(NULL, lpszPrinterName, NULL, pdm);
295 void Attach(HANDLE hPrinter)
298 m_hPrinter = hPrinter;
303 HANDLE hPrinter = m_hPrinter;
308 operator HANDLE()
const {
return m_hPrinter; }
318 template <
bool t_bManaged>
327 CDevModeT(HANDLE hDevMode = NULL) : m_hDevMode(hDevMode)
329 m_pDevMode = (m_hDevMode != NULL) ? (DEVMODE*)::GlobalLock(m_hDevMode) : NULL;
344 void Attach(HANDLE hDevModeNew)
347 m_hDevMode = hDevModeNew;
348 m_pDevMode = (m_hDevMode != NULL) ? (DEVMODE*)::GlobalLock(m_hDevMode) : NULL;
353 if (m_hDevMode != NULL)
354 ::GlobalUnlock(m_hDevMode);
355 HANDLE hDevMode = m_hDevMode;
360 bool IsNull()
const {
return (m_hDevMode == NULL); }
362 bool CopyFromPrinter(HANDLE hPrinter)
365 bool b = pinfo.GetPrinterInfo(hPrinter);
367 b = CopyFromDEVMODE(pinfo.m_pi->pDevMode);
371 bool CopyFromDEVMODE(
const DEVMODE* pdm)
375 int nSize = pdm->dmSize + pdm->dmDriverExtra;
376 HANDLE h = ::GlobalAlloc(GMEM_MOVEABLE, nSize);
379 void* p = ::GlobalLock(h);
380 SecureHelper::memcpy_x(p, nSize, pdm, nSize);
387 bool CopyFromHDEVMODE(HANDLE hdm)
392 DEVMODE* pdm = (DEVMODE*)::GlobalLock(hdm);
393 b = CopyFromDEVMODE(pdm);
399 HANDLE CopyToHDEVMODE()
401 if ((m_hDevMode == NULL) || (m_pDevMode == NULL))
403 int nSize = m_pDevMode->dmSize + m_pDevMode->dmDriverExtra;
404 HANDLE h = ::GlobalAlloc(GMEM_MOVEABLE, nSize);
407 void* p = ::GlobalLock(h);
408 SecureHelper::memcpy_x(p, nSize, m_pDevMode, nSize);
416 bool UpdateForNewPrinter(HANDLE hPrinter)
419 LONG nLen = ::DocumentProperties(NULL, hPrinter, NULL, NULL, NULL, 0);
421 DEVMODE* pdm = buff.AllocateBytes(nLen);
424 memset(pdm, 0, nLen);
425 LONG l = ::DocumentProperties(NULL, hPrinter, NULL, pdm, m_pDevMode, DM_IN_BUFFER | DM_OUT_BUFFER);
427 bRet = CopyFromDEVMODE(pdm);
433 bool DocumentProperties(HANDLE hPrinter, HWND hWnd = NULL)
436 pi.GetPrinterInfo(hPrinter);
438 hWnd = ::GetActiveWindow();
441 LONG nLen = ::DocumentProperties(hWnd, hPrinter, pi.m_pi->pName, NULL, NULL, 0);
443 DEVMODE* pdm = buff.AllocateBytes(nLen);
446 memset(pdm, 0, nLen);
447 LONG l = ::DocumentProperties(hWnd, hPrinter, pi.m_pi->pName, pdm, m_pDevMode, DM_IN_BUFFER | DM_OUT_BUFFER | DM_PROMPT);
449 bRet = CopyFromDEVMODE(pdm);
455 operator HANDLE()
const {
return m_hDevMode; }
457 operator DEVMODE*()
const {
return m_pDevMode; }
462 if (m_hDevMode != NULL)
464 ::GlobalUnlock(m_hDevMode);
466 ::GlobalFree(m_hDevMode);
486 printer.OpenDefaultPrinter();
487 Attach(printer.CreatePrinterDC());
488 ATLASSERT(m_hDC != NULL);
491 CPrinterDC(HANDLE hPrinter,
const DEVMODE* pdm = NULL)
495 Attach(p.CreatePrinterDC(pdm));
496 ATLASSERT(m_hDC != NULL);
514 virtual void BeginPrintJob(HDC hDC) = 0;
515 virtual void EndPrintJob(HDC hDC,
bool bAborted) = 0;
516 virtual void PrePrintPage(UINT nPage, HDC hDC) = 0;
517 virtual bool PrintPage(UINT nPage, HDC hDC) = 0;
518 virtual void PostPrintPage(UINT nPage, HDC hDC) = 0;
525 virtual DEVMODE* GetNewDevModeForPage(UINT nLastPage, UINT nPage) = 0;
526 virtual bool IsValidPage(UINT nPage) = 0;
534 virtual void BeginPrintJob(HDC )
538 virtual void EndPrintJob(HDC ,
bool )
542 virtual void PrePrintPage(UINT , HDC hDC)
544 m_nPJState = ::SaveDC(hDC);
547 virtual bool PrintPage(UINT , HDC ) = 0;
549 virtual void PostPrintPage(UINT , HDC hDC)
551 RestoreDC(hDC, m_nPJState);
554 virtual DEVMODE* GetNewDevModeForPage(UINT , UINT )
559 virtual bool IsValidPage(UINT )
573 CPrinterHandle m_printer;
575 DEVMODE* m_pDefDevMode;
580 unsigned long m_nStartPage;
581 unsigned long m_nEndPage;
584 CPrintJob() : m_nJobID(0), m_bCancel(
false), m_bComplete(
true)
589 ATLASSERT(IsJobComplete());
593 bool IsJobComplete()
const 598 bool StartPrintJob(
bool bBackground, HANDLE hPrinter, DEVMODE* pDefaultDevMode,
600 unsigned long nStartPage,
unsigned long nEndPage,
601 bool bPrintToFile =
false, LPCTSTR lpstrOutputFile = NULL)
603 ATLASSERT(m_bComplete);
607 memset(&m_docinfo, 0,
sizeof(m_docinfo));
608 m_docinfo.cbSize =
sizeof(m_docinfo);
609 m_docinfo.lpszDocName = lpszDocName;
611 m_nStartPage = nStartPage;
612 m_nEndPage = nEndPage;
613 m_printer.Attach(hPrinter);
614 m_pDefDevMode = pDefaultDevMode;
618 m_docinfo.lpszOutput = (lpstrOutputFile != NULL) ? lpstrOutputFile : _T(
"FILE:");
623 return StartHelper();
627 DWORD dwThreadID = 0;
628 #if !defined(_ATL_MIN_CRT) && defined(_MT) 629 HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, (UINT (WINAPI*)(
void*))StartProc,
this, 0, (UINT*)&dwThreadID);
631 HANDLE hThread = ::CreateThread(NULL, 0, StartProc, (
void*)
this, 0, &dwThreadID);
636 ::CloseHandle(hThread);
642 static DWORD WINAPI StartProc(
void* p)
645 pThis->StartHelper();
646 pThis->m_bComplete =
true;
653 dcPrinter.Attach(m_printer.CreatePrinterDC(m_pDefDevMode));
654 if (dcPrinter.IsNull())
657 m_nJobID = ::StartDoc(dcPrinter, &m_docinfo);
661 m_pInfo->BeginPrintJob(dcPrinter);
664 unsigned long nLastPage = 0;
665 for (
unsigned long nPage = m_nStartPage; nPage <= m_nEndPage; nPage++)
667 if (!m_pInfo->IsValidPage(nPage))
669 DEVMODE* pdm = m_pInfo->GetNewDevModeForPage(nLastPage, nPage);
671 dcPrinter.ResetDC(pdm);
672 dcPrinter.StartPage();
673 m_pInfo->PrePrintPage(nPage, dcPrinter);
674 if (!m_pInfo->PrintPage(nPage, dcPrinter))
676 m_pInfo->PostPrintPage(nPage, dcPrinter);
683 m_pInfo->EndPrintJob(dcPrinter, m_bCancel);
685 ::AbortDoc(dcPrinter);
693 void CancelPrintJob()
708 CPrinterHandle m_printer;
710 DEVMODE* m_pDefDevMode;
711 DEVMODE* m_pCurDevMode;
712 SIZE m_sizeCurPhysOffset;
715 CPrintPreview() : m_pInfo(NULL), m_pDefDevMode(NULL), m_pCurDevMode(NULL)
717 m_sizeCurPhysOffset.cx = 0;
718 m_sizeCurPhysOffset.cy = 0;
722 void SetPrintPreviewInfo(HANDLE hPrinter, DEVMODE* pDefaultDevMode,
IPrintJobInfo* pji)
724 m_printer.Attach(hPrinter);
725 m_pDefDevMode = pDefaultDevMode;
728 m_pCurDevMode = NULL;
731 void SetEnhMetaFile(HENHMETAFILE hEMF)
736 void SetPage(
int nPage)
738 if (!m_pInfo->IsValidPage(nPage))
741 m_pCurDevMode = m_pInfo->GetNewDevModeForPage(0, nPage);
742 if (m_pCurDevMode == NULL)
743 m_pCurDevMode = m_pDefDevMode;
744 CDC dcPrinter = m_printer.CreatePrinterDC(m_pCurDevMode);
746 int iWidth = dcPrinter.GetDeviceCaps(PHYSICALWIDTH);
747 int iHeight = dcPrinter.GetDeviceCaps(PHYSICALHEIGHT);
748 int nLogx = dcPrinter.GetDeviceCaps(LOGPIXELSX);
749 int nLogy = dcPrinter.GetDeviceCaps(LOGPIXELSY);
751 RECT rcMM = { 0, 0, ::MulDiv(iWidth, 2540, nLogx), ::MulDiv(iHeight, 2540, nLogy) };
753 m_sizeCurPhysOffset.cx = dcPrinter.GetDeviceCaps(PHYSICALOFFSETX);
754 m_sizeCurPhysOffset.cy = dcPrinter.GetDeviceCaps(PHYSICALOFFSETY);
757 m_pInfo->PrePrintPage(nPage, dcMeta);
758 m_pInfo->PrintPage(nPage, dcMeta);
759 m_pInfo->PostPrintPage(nPage, dcMeta);
760 m_meta.Attach(dcMeta.Close());
763 void GetPageRect(RECT& rc, LPRECT prc)
765 int x1 = rc.right-rc.left;
766 int y1 = rc.bottom - rc.top;
767 if ((x1 < 0) || (y1 < 0))
771 ENHMETAHEADER* pmh = emfinfo.GetEnhMetaFileHeader();
774 int x2 = pmh->szlDevice.cx;
775 int y2 = pmh->szlDevice.cy;
776 int y1p = MulDiv(x1, y2, x2);
777 int x1p = MulDiv(y1, x2, y2);
778 ATLASSERT((x1p <= x1) || (y1p <= y1));
781 prc->left = rc.left + (x1 - x1p) / 2;
782 prc->right = prc->left + x1p;
784 prc->bottom = rc.bottom;
789 prc->right = rc.right;
790 prc->top = rc.top + (y1 - y1p) / 2;
791 prc->bottom = prc->top + y1p;
804 ENHMETAHEADER* pmh = emfinfo.GetEnhMetaFileHeader();
805 int nOffsetX = MulDiv(m_sizeCurPhysOffset.cx, rc.right-rc.left, pmh->szlDevice.cx);
806 int nOffsetY = MulDiv(m_sizeCurPhysOffset.cy, rc.bottom-rc.top, pmh->szlDevice.cy);
808 dc.OffsetWindowOrg(-nOffsetX, -nOffsetY);
809 dc.PlayMetaFile(m_meta, &rc);
820 template <
class T,
class TBase = ATL::CWindow,
class TWinTraits = ATL::CControlWinTraits>
824 DECLARE_WND_CLASS_EX(NULL, CS_VREDRAW | CS_HREDRAW, -1)
826 enum { m_cxOffset = 10, m_cyOffset = 10 };
833 void SetPrintPreviewInfo(HANDLE hPrinter, DEVMODE* pDefaultDevMode,
836 CPrintPreview::SetPrintPreviewInfo(hPrinter, pDefaultDevMode, pji);
837 m_nMinPage = nMinPage;
838 m_nMaxPage = nMaxPage;
843 if (m_nCurPage == m_nMaxPage)
845 SetPage(m_nCurPage + 1);
852 if (m_nCurPage == m_nMinPage)
856 SetPage(m_nCurPage - 1);
863 MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd)
864 MESSAGE_HANDLER(WM_PAINT, OnPaint)
865 MESSAGE_HANDLER(WM_PRINTCLIENT, OnPaint)
868 LRESULT OnEraseBkgnd(UINT , WPARAM , LPARAM , BOOL& )
873 LRESULT OnPaint(UINT , WPARAM wParam, LPARAM , BOOL& )
875 T* pT =
static_cast<T*
>(
this);
880 pT->DoPrePaint((HDC)wParam, rc);
881 pT->DoPaint((HDC)wParam, rc);
886 pT->DoPrePaint(dc.m_hDC, rc);
887 pT->DoPaint(dc.m_hDC, rc);
896 RECT rcClient = { 0 };
897 GetClientRect(&rcClient);
898 RECT rcArea = rcClient;
899 T* pT =
static_cast<T*
>(
this);
901 ::InflateRect(&rcArea, -pT->m_cxOffset, -pT->m_cyOffset);
902 if (rcArea.left > rcArea.right)
903 rcArea.right = rcArea.left;
904 if (rcArea.top > rcArea.bottom)
905 rcArea.bottom = rcArea.top;
906 GetPageRect(rcArea, &rc);
908 rgn1.CreateRectRgnIndirect(&rc);
909 rgn2.CreateRectRgnIndirect(&rcClient);
910 rgn2.CombineRgn(rgn1, RGN_DIFF);
911 dc.SelectClipRgn(rgn2);
912 dc.FillRect(&rcClient, COLOR_BTNSHADOW);
913 dc.SelectClipRgn(NULL);
914 dc.FillRect(&rc, (HBRUSH)::GetStockObject(WHITE_BRUSH));
926 DECLARE_WND_CLASS_EX(_T(
"WTL_PrintPreview"), CS_VREDRAW | CS_HREDRAW, -1)
935 template <
class T,
class TBase = ATL::CWindow,
class TWinTraits = ATL::CControlWinTraits>
941 CZoomPrintPreviewWindowImpl()
943 SetScrollExtendedStyle(SCRL_DISABLENOSCROLL);
951 m_nZoomMode = ZOOMMODE_OFF;
952 m_fZoomScaleMin = 1.0;
956 BEGIN_MSG_MAP(CZoomPrintPreviewWindowImpl)
961 #if !((_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400)) 963 #endif // !((_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400)) 970 MESSAGE_HANDLER(WM_SIZE, OnSize)
971 MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd)
972 MESSAGE_HANDLER(WM_PAINT, OnPaint)
973 MESSAGE_HANDLER(WM_PRINTCLIENT, OnPaint)
989 LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
991 SIZE sizeClient = {GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)};
992 POINT ptOffset = m_ptOffset;
993 SIZE sizeAll = m_sizeAll;
994 SetScrollSize(sizeClient);
996 ptOffset.x = ::MulDiv(ptOffset.x, m_sizeAll.cx, sizeAll.cx);
998 ptOffset.y = ::MulDiv(ptOffset.y, m_sizeAll.cy, sizeAll.cy);
999 SetScrollOffset(ptOffset);
1004 T* pT =
static_cast<T*
>(
this);
1005 pT->ShowScrollBar(SB_HORZ, TRUE);
1006 pT->ShowScrollBar(SB_VERT, TRUE);
1011 LRESULT OnEraseBkgnd(UINT , WPARAM , LPARAM , BOOL& )
1016 LRESULT OnPaint(UINT , WPARAM wParam, LPARAM , BOOL& )
1018 T* pT =
static_cast<T*
>(
this);
1024 int nMapModeSav = dc.GetMapMode();
1025 dc.SetMapMode(MM_ANISOTROPIC);
1026 SIZE szWindowExt = { 0, 0 };
1027 dc.SetWindowExt(m_sizeLogAll, &szWindowExt);
1028 SIZE szViewportExt = { 0, 0 };
1029 dc.SetViewportExt(m_sizeAll, &szViewportExt);
1030 POINT ptViewportOrg = { 0, 0 };
1031 dc.SetViewportOrg(-m_ptOffset.x, -m_ptOffset.y, &ptViewportOrg);
1033 pT->DoPrePaint(dc, rc);
1034 pT->DoPaint(dc, rc);
1036 dc.SetMapMode(nMapModeSav);
1037 dc.SetWindowExt(szWindowExt);
1038 dc.SetViewportExt(szViewportExt);
1039 dc.SetViewportOrg(ptViewportOrg);
1044 pT->PrepareDC(dc.m_hDC);
1045 pT->DoPrePaint(dc.m_hDC, rc);
1046 pT->DoPaint(dc.m_hDC, rc);
1060 RECT rcClient = { 0 };
1061 GetClientRect(&rcClient);
1062 RECT rcArea = rcClient;
1063 T* pT =
static_cast<T*
>(
this);
1065 ::InflateRect(&rcArea, -pT->m_cxOffset, -pT->m_cyOffset);
1066 if (rcArea.left > rcArea.right)
1067 rcArea.right = rcArea.left;
1068 if (rcArea.top > rcArea.bottom)
1069 rcArea.bottom = rcArea.top;
1070 GetPageRect(rcArea, &rc);
1071 HBRUSH hbrOld = dc.SelectBrush(::GetSysColorBrush(COLOR_BTNSHADOW));
1072 dc.PatBlt(rcClient.left, rcClient.top, rc.left - rcClient.left, rcClient.bottom - rcClient.top, PATCOPY);
1073 dc.PatBlt(rc.left, rcClient.top, rc.right - rc.left, rc.top - rcClient.top, PATCOPY);
1074 dc.PatBlt(rc.right, rcClient.top, rcClient.right - rc.right, rcClient.bottom - rcClient.top, PATCOPY);
1075 dc.PatBlt(rc.left, rc.bottom, rc.right - rc.left, rcClient.bottom - rc.bottom, PATCOPY);
1076 dc.SelectBrush((HBRUSH)::GetStockObject(WHITE_BRUSH));
1077 dc.PatBlt(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, PATCOPY);
1078 dc.SelectBrush(::GetSysColorBrush(COLOR_3DDKSHADOW));
1079 dc.PatBlt(rc.right, rc.top + 4, 4, rc.bottom - rc.top, PATCOPY);
1080 dc.PatBlt(rc.left + 4, rc.bottom, rc.right - rc.left, 4, PATCOPY);
1081 dc.SelectBrush(hbrOld);
1087 ENHMETAHEADER* pmh = emfinfo.GetEnhMetaFileHeader();
1088 int nOffsetX = MulDiv(m_sizeCurPhysOffset.cx, rc.right-rc.left, pmh->szlDevice.cx);
1089 int nOffsetY = MulDiv(m_sizeCurPhysOffset.cy, rc.bottom-rc.top, pmh->szlDevice.cy);
1091 dc.OffsetWindowOrg(-nOffsetX, -nOffsetY);
1092 dc.PlayMetaFile(m_meta, &rc);
1096 class CZoomPrintPreviewWindow :
public CZoomPrintPreviewWindowImpl<CZoomPrintPreviewWindow>
1099 DECLARE_WND_CLASS_EX(_T(
"WTL_ZoomPrintPreview"), CS_VREDRAW | CS_HREDRAW, -1)
1102 #endif // __ATLSCRL_H__ 1106 #endif // __ATLPRINT_H__ Definition: atlprint.h:50
Definition: atlprint.h:71
Definition: atlgdi.h:1005
Definition: atlprint.h:531
Definition: atlprint.h:135
Definition: atlprint.h:569
Definition: atlprint.h:703
Definition: atlapp.h:1455
Definition: atlgdi.h:1209
Definition: atlprint.h:511
Definition: atlgdi.h:3362
Definition: atlprint.h:923
Definition: atlprint.h:479
Definition: atlprint.h:821
Definition: atlprint.h:319