亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? atlprint.h

?? WTL7.0所有頭文件,需要的朋友可以成這里下載
?? H
?? 第 1 頁 / 共 2 頁
字號:
// Windows Template Library - WTL version 7.0
// Copyright (C) 1997-2002 Microsoft Corporation
// All rights reserved.
//
// This file is a part of the Windows Template Library.
// The code and information is provided "as-is" without
// warranty of any kind, either expressed or implied.

#ifndef __ATLPRINT_H__
#define __ATLPRINT_H__

#pragma once

#ifndef __cplusplus
	#error ATL requires C++ compilation (use a .cpp suffix)
#endif

#ifndef __ATLAPP_H__
	#error atlprint.h requires atlapp.h to be included first
#endif

#ifndef __ATLWIN_H__
	#error atlprint.h requires atlwin.h to be included first
#endif


/////////////////////////////////////////////////////////////////////////////
// Classes in this file
//
// CPrinterInfo<t_nInfo>
// CPrinterT<t_bManaged>
// CDevModeT<t_bManaged>
// CPrinterDC
// CPrintJobInfo
// CPrintJob
// CPrintPreview
// CPrintPreviewWindowImpl<T, TBase, TWinTraits>
// CPrintPreviewWindow


namespace WTL
{

/////////////////////////////////////////////////////////////////////////////

template <unsigned int t_nInfo>
class _printer_info
{
public:
	typedef void infotype;
};

template <> class _printer_info<1> { public: typedef PRINTER_INFO_1 infotype; };
template <> class _printer_info<2> { public: typedef PRINTER_INFO_2 infotype; };
template <> class _printer_info<3> { public: typedef PRINTER_INFO_3 infotype; };
template <> class _printer_info<4> { public: typedef PRINTER_INFO_4 infotype; };
template <> class _printer_info<5> { public: typedef PRINTER_INFO_5 infotype; };
template <> class _printer_info<6> { public: typedef PRINTER_INFO_6 infotype; };
template <> class _printer_info<7> { public: typedef PRINTER_INFO_7 infotype; };
// these are not in the old (vc6.0) headers
#ifdef _ATL_USE_NEW_PRINTER_INFO
template <> class _printer_info<8> { public: typedef PRINTER_INFO_8 infotype; };
template <> class _printer_info<9> { public: typedef PRINTER_INFO_9 infotype; };
#endif //_ATL_USE_NEW_PRINTER_INFO

//This class wraps all of the PRINTER_INFO_* structures
//and provided by ::GetPrinter.
template <unsigned int t_nInfo>
class CPrinterInfo
{
public:
// Data members
	_printer_info<t_nInfo>::infotype* m_pi;

// Constructor/destructor
	CPrinterInfo() : m_pi(NULL)
	{ }
	CPrinterInfo(HANDLE hPrinter) : m_pi(NULL)
	{
		GetPrinterInfo(hPrinter);
	}
	~CPrinterInfo()
	{
		Cleanup();
	}

// Operations
	bool GetPrinterInfo(HANDLE hPrinter)
	{
		Cleanup();
		return GetPrinterInfoHelper(hPrinter, (BYTE**)&m_pi, t_nInfo);
	}

// Implementation
	void Cleanup()
	{
		delete [] (BYTE*)m_pi;
		m_pi = NULL;
	}
	static bool GetPrinterInfoHelper(HANDLE hPrinter, BYTE** pi, int nIndex)
	{
		ATLASSERT(pi != NULL);
		DWORD dw = 0;
		BYTE* pb = NULL;
		::GetPrinter(hPrinter, nIndex, NULL, 0, &dw);
		if (dw > 0)
		{
			ATLTRY(pb = new BYTE[dw]);
			if (pb != NULL)
			{
				memset(pb, 0, dw);
				DWORD dwNew;
				if (!::GetPrinter(hPrinter, nIndex, pb, dw, &dwNew))
				{
					delete [] pb;
					pb = NULL;
				}
			}
		}
		*pi = pb;
		return (pb != NULL);
	}
};

//Provides a wrapper class for a HANDLE to a printer.
template <bool t_bManaged>
class CPrinterT
{
public:
// Data members
	HANDLE m_hPrinter;

// Constructor/destructor
	CPrinterT(HANDLE hPrinter = NULL) : m_hPrinter(hPrinter)
	{ }

	~CPrinterT()
	{
		ClosePrinter();
	}

// Operations
	CPrinterT& operator=(HANDLE hPrinter)
	{
		if (hPrinter != m_hPrinter)
		{
			ClosePrinter();
			m_hPrinter = hPrinter;
		}
		return *this;
	}

	bool IsNull() const { return (m_hPrinter == NULL); }

	bool OpenPrinter(HANDLE hDevNames, const DEVMODE* pDevMode = NULL)
	{
		bool b = false;
		DEVNAMES* pdn = (DEVNAMES*)::GlobalLock(hDevNames);
		if (pdn != NULL)
		{
			LPTSTR lpszPrinterName = (LPTSTR)pdn + pdn->wDeviceOffset;
			b = OpenPrinter(lpszPrinterName, pDevMode);
			::GlobalUnlock(hDevNames);
		}
		return b;
	}
	bool OpenPrinter(LPCTSTR lpszPrinterName, const DEVMODE* pDevMode = NULL)
	{
		ClosePrinter();
		PRINTER_DEFAULTS pdefs = { NULL, (DEVMODE*)pDevMode, PRINTER_ACCESS_USE };
		::OpenPrinter((LPTSTR) lpszPrinterName, &m_hPrinter, (pDevMode == NULL) ? NULL : &pdefs);

		return (m_hPrinter != NULL);
	}
	bool OpenPrinter(LPCTSTR lpszPrinterName, PRINTER_DEFAULTS* pprintdefs)
	{
		ClosePrinter();
		::OpenPrinter((LPTSTR) lpszPrinterName, &m_hPrinter, pprintdefs);
		return (m_hPrinter != NULL);
	}
	bool OpenDefaultPrinter(const DEVMODE* pDevMode = NULL)
	{
		ClosePrinter();
		TCHAR buffer[512];
		buffer[0] = 0;
		::GetProfileString(_T("windows"), _T("device"), _T(",,,"), buffer, sizeof(buffer));
		int nLen = lstrlen(buffer);
		if (nLen != 0)
		{
			LPTSTR lpsz = buffer;
			while (*lpsz)
			{
				if (*lpsz == ',')
				{
					*lpsz = 0;
					break;
				}
				lpsz = CharNext(lpsz);
			}
			PRINTER_DEFAULTS pdefs = { NULL, (DEVMODE*)pDevMode, PRINTER_ACCESS_USE };
			::OpenPrinter(buffer, &m_hPrinter, (pDevMode == NULL) ? NULL : &pdefs);
		}
		return m_hPrinter != NULL;
	}
	void ClosePrinter()
	{
		if (m_hPrinter != NULL)
		{
			if (t_bManaged)
				::ClosePrinter(m_hPrinter);
			m_hPrinter = NULL;
		}
	}

	bool PrinterProperties(HWND hWnd = NULL)
	{
		if (hWnd == NULL)
			hWnd = ::GetActiveWindow();
		return !!::PrinterProperties(hWnd, m_hPrinter);
	}
	HANDLE CopyToHDEVNAMES() const
	{
		HANDLE h = NULL;
		CPrinterInfo<5> pinfon5;
		CPrinterInfo<2> pinfon2;
		LPTSTR lpszPrinterName = NULL;
		//Some printers fail for PRINTER_INFO_5 in some situations
		if (pinfon5.GetPrinterInfo(m_hPrinter))
			lpszPrinterName = pinfon5.m_pi->pPrinterName;
		else if (pinfon2.GetPrinterInfo(m_hPrinter))
			lpszPrinterName = pinfon2.m_pi->pPrinterName;
		if (lpszPrinterName != NULL)
		{
			int nLen = sizeof(DEVNAMES) + (lstrlen(lpszPrinterName) + 1) * sizeof(TCHAR);
			h = ::GlobalAlloc(GMEM_MOVEABLE, nLen);
			BYTE* pv = (BYTE*)::GlobalLock(h);
			DEVNAMES* pdev = (DEVNAMES*)pv;
			if (pv != NULL)
			{
				memset(pv, 0, nLen);
				pdev->wDeviceOffset = sizeof(DEVNAMES)/sizeof(TCHAR);
				pv = pv + sizeof(DEVNAMES); //now points to end
				lstrcpy((LPTSTR)pv, lpszPrinterName);
				::GlobalUnlock(h);
			}
		}
		return h;
	}
	HDC CreatePrinterDC(const DEVMODE* pdm = NULL)
	{
		CPrinterInfo<5> pinfo5;
		CPrinterInfo<2> pinfo2;
		HDC hDC = NULL;
		LPTSTR lpszPrinterName = NULL;
		//Some printers fail for PRINTER_INFO_5 in some situations
		if (pinfo5.GetPrinterInfo(m_hPrinter))
			lpszPrinterName = pinfo5.m_pi->pPrinterName;
		else if (pinfo2.GetPrinterInfo(m_hPrinter))
			lpszPrinterName = pinfo2.m_pi->pPrinterName;
		if (lpszPrinterName != NULL)
			hDC = ::CreateDC(NULL, lpszPrinterName, NULL, pdm);
		return hDC;
	}
	HDC CreatePrinterIC(const DEVMODE* pdm = NULL)
	{
		CPrinterInfo<5> pinfo5;
		CPrinterInfo<2> pinfo2;
		HDC hDC = NULL;
		LPTSTR lpszPrinterName = NULL;
		//Some printers fail for PRINTER_INFO_5 in some situations
		if (pinfo5.GetPrinterInfo(m_hPrinter))
			lpszPrinterName = pinfo5.m_pi->pPrinterName;
		else if (pinfo2.GetPrinterInfo(m_hPrinter))
			lpszPrinterName = pinfo2.m_pi->pPrinterName;
		if (lpszPrinterName != NULL)
			hDC = ::CreateIC(NULL, lpszPrinterName, NULL, pdm);
		return hDC;
	}

	void Attach(HANDLE hPrinter)
	{
		ClosePrinter();
		m_hPrinter = hPrinter;
	}

	HANDLE Detach()
	{
		HANDLE hPrinter = m_hPrinter;
		m_hPrinter = NULL;
		return hPrinter;
	}
	operator HANDLE() const { return m_hPrinter; }
};

typedef CPrinterT<false>	CPrinterHandle;
typedef CPrinterT<true> 	CPrinter;


template <bool t_bManaged>
class CDevModeT
{
public:
// Data members
	HANDLE m_hDevMode;
	DEVMODE* m_pDevMode;

// Constructor/destructor
	CDevModeT(HANDLE hDevMode = NULL) : m_hDevMode(hDevMode)
	{
		m_pDevMode = (m_hDevMode != NULL) ? (DEVMODE*)::GlobalLock(m_hDevMode) : NULL;
	}
	~CDevModeT()
	{
		Cleanup();
	}

// Operations
	CDevModeT<t_bManaged>& operator=(HANDLE hDevMode)
	{
		Attach(hDevMode);
		return *this;
	}

	void Attach(HANDLE hDevModeNew)
	{
		Cleanup();
		m_hDevMode = hDevModeNew;
		m_pDevMode = (m_hDevMode != NULL) ? (DEVMODE*)::GlobalLock(m_hDevMode) : NULL;
	}

	HANDLE Detach()
	{
		if (m_hDevMode != NULL)
			::GlobalUnlock(m_hDevMode);
		HANDLE hDevMode = m_hDevMode;
		m_hDevMode = NULL;
		return hDevMode;
	}

	bool IsNull() const { return (m_hDevMode == NULL); }

	bool CopyFromPrinter(HANDLE hPrinter)
	{
		CPrinterInfo<2> pinfo;
		bool b = pinfo.GetPrinterInfo(hPrinter);
		if (b)
		 b = CopyFromDEVMODE(pinfo.m_pi->pDevMode);
		return b;
	}
	bool CopyFromDEVMODE(const DEVMODE* pdm)
	{
		if (pdm == NULL)
			return false;
		int nSize = pdm->dmSize + pdm->dmDriverExtra;
		HANDLE h = ::GlobalAlloc(GMEM_MOVEABLE, nSize);
		if (h != NULL)
		{
			void* p = ::GlobalLock(h);
			memcpy(p, pdm, nSize);
			::GlobalUnlock(h);
		}
		Attach(h);
		return (h != NULL);
	}
	bool CopyFromHDEVMODE(HANDLE hdm)
	{
		bool b = false;
		if (hdm != NULL)
		{
			DEVMODE* pdm = (DEVMODE*)GlobalLock(hdm);
			b = CopyFromDEVMODE(pdm);
			GlobalUnlock(hdm);
		}
		return b;
	}
	HANDLE CopyToHDEVMODE()
	{
		if ((m_hDevMode == NULL) || (m_pDevMode == NULL))
			return NULL;
		int nSize = m_pDevMode->dmSize + m_pDevMode->dmDriverExtra;
		HANDLE h = GlobalAlloc(GMEM_MOVEABLE, nSize);
		if (h != NULL)
		{
			void* p = GlobalLock(h);
			memcpy(p, m_pDevMode, nSize);
		}
		return h;
	}
	// If this devmode was for another printer, this will create a new devmode
	// based on the existing devmode, but retargeted at the new printer
	bool UpdateForNewPrinter(HANDLE hPrinter)
	{
		LONG nLen = ::DocumentProperties(NULL, hPrinter, NULL, NULL, NULL, 0);
		DEVMODE* pdm = (DEVMODE*)_alloca(nLen);
		memset(pdm, 0, nLen);
		LONG l = ::DocumentProperties(NULL, hPrinter, NULL, pdm, m_pDevMode, DM_IN_BUFFER | DM_OUT_BUFFER);
		bool b = false;
		if (l == IDOK)
			b = CopyFromDEVMODE(pdm);
		return b;
	}
	bool DocumentProperties(HANDLE hPrinter, HWND hWnd = NULL)
	{
		CPrinterInfo<1> pi;
		pi.GetPrinterInfo(hPrinter);
		if (hWnd == NULL)
			hWnd = ::GetActiveWindow();

		LONG nLen = ::DocumentProperties(hWnd, hPrinter, pi.m_pi->pName, NULL, NULL, 0);
		DEVMODE* pdm = (DEVMODE*)_alloca(nLen);
		memset(pdm, 0, nLen);
		LONG l = ::DocumentProperties(hWnd, hPrinter, pi.m_pi->pName, pdm, m_pDevMode, DM_IN_BUFFER | DM_OUT_BUFFER | DM_PROMPT);
		bool b = false;
		if (l == IDOK)
			b = CopyFromDEVMODE(pdm);
		return b;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美福利一区二区| 午夜成人免费电影| 日本va欧美va精品| 天天色综合天天| 亚洲成人中文在线| 国产盗摄视频一区二区三区| 欧美丝袜自拍制服另类| 久久精品男人的天堂| 日韩高清不卡一区| 在线中文字幕不卡| 中文字幕一区视频| 国产精品白丝jk黑袜喷水| 91精品婷婷国产综合久久竹菊| 《视频一区视频二区| 国产夫妻精品视频| 精品国产一区二区精华| 午夜精品福利一区二区蜜股av| 白白色 亚洲乱淫| 久久久夜色精品亚洲| 青娱乐精品在线视频| 国产一区二区调教| 日韩欧美亚洲另类制服综合在线| 一级日本不卡的影视| 99r国产精品| 中文字幕国产精品一区二区| 国产一区二区三区在线观看免费| 日韩网站在线看片你懂的| 91污片在线观看| 在线观看网站黄不卡| 欧美激情一区不卡| 美日韩一级片在线观看| 欧美男女性生活在线直播观看| 亚洲毛片av在线| 99久精品国产| 日韩精品一二三四| 欧美一区二区三区四区高清| 五月婷婷色综合| 欧美日韩日本视频| 亚洲国产乱码最新视频| 欧美午夜精品久久久久久孕妇| 亚洲免费观看在线观看| 一本色道a无线码一区v| 亚洲女人小视频在线观看| 一本久道久久综合中文字幕| 亚洲欧美一区二区三区久本道91| 97久久超碰国产精品| 亚洲人成网站色在线观看| 色婷婷国产精品综合在线观看| 亚洲人成精品久久久久久| 91日韩精品一区| 一二三区精品视频| 欧美日韩综合在线免费观看| 欧美精品一区二区三区很污很色的| 老司机精品视频导航| 日韩精品一区二区三区四区 | 色综合天天综合网天天看片| 亚洲视频小说图片| 色欧美88888久久久久久影院| 国产精品亚洲第一区在线暖暖韩国| 91精品久久久久久久99蜜桃| 免费观看一级特黄欧美大片| 日韩欧美卡一卡二| 极品少妇xxxx偷拍精品少妇| 久久丝袜美腿综合| 欧美三级三级三级爽爽爽| 久久美女艺术照精彩视频福利播放 | jlzzjlzz亚洲日本少妇| 日韩毛片视频在线看| 欧美视频自拍偷拍| 日韩av在线免费观看不卡| 精品国产一区二区三区av性色| 国产成人福利片| 亚洲欧美成aⅴ人在线观看| 欧美日韩国产精品自在自线| 欧美a一区二区| 国产午夜一区二区三区| 91免费在线视频观看| 亚洲成av人影院| 欧美精品一区二区高清在线观看| 高清beeg欧美| 亚洲一区二区三区四区在线观看 | 亚洲妇女屁股眼交7| 欧美不卡一二三| 99久久精品情趣| 午夜精品福利一区二区三区av| 精品国产乱子伦一区| av电影天堂一区二区在线观看| 亚洲永久精品国产| 26uuu成人网一区二区三区| 99re这里只有精品6| 日日夜夜精品视频免费| 精品成人一区二区| 色香色香欲天天天影视综合网| 日韩不卡在线观看日韩不卡视频| 亚洲影院理伦片| 久久人人97超碰com| 91久久奴性调教| 激情文学综合插| 一区二区三区免费网站| 精品国一区二区三区| 色香蕉成人二区免费| 九九精品视频在线看| 亚洲精品成a人| 久久久久久夜精品精品免费| 在线影视一区二区三区| 国产制服丝袜一区| 亚洲午夜精品久久久久久久久| 精品国精品国产尤物美女| 色综合天天综合网国产成人综合天| 蜜桃av一区二区在线观看| 综合色天天鬼久久鬼色| 欧美刺激脚交jootjob| 在线看国产日韩| 国产精品亚洲专一区二区三区| 亚洲成人免费在线观看| 欧美亚洲国产怡红院影院| 国产精品一区二区久久精品爱涩| 亚洲成a人在线观看| 国产精品免费aⅴ片在线观看| 欧美一级艳片视频免费观看| 色婷婷国产精品久久包臀| 国产成人精品一区二区三区网站观看| 亚洲国产精品精华液网站| 国产精品久久99| 久久久久97国产精华液好用吗| 3atv在线一区二区三区| 色婷婷综合久久久中文一区二区| 国产一区中文字幕| 美女高潮久久久| 亚洲成人午夜影院| 亚洲精品一二三| 成人精品免费网站| 一区二区三区四区精品在线视频 | 色成年激情久久综合| 成人小视频免费在线观看| 久热成人在线视频| 性欧美疯狂xxxxbbbb| 依依成人综合视频| 中文字幕在线免费不卡| 欧美国产一区视频在线观看| 欧美成人免费网站| 日韩一区二区三区四区| 欧美理论在线播放| 欧美视频一区在线观看| 91免费版在线看| 9i在线看片成人免费| 国产成人夜色高潮福利影视| 国产自产2019最新不卡| 在线观看日韩电影| 久久精品国产一区二区| 石原莉奈在线亚洲三区| 久久亚洲精华国产精华液| 日韩欧美国产三级| 日韩欧美二区三区| 日韩一区二区三区视频| 欧美一区二区三区免费在线看| 欧美日韩在线亚洲一区蜜芽| 欧美四级电影网| 欧美三级视频在线观看| 欧美绝品在线观看成人午夜影视| 欧美午夜精品电影| 欧美三级电影在线观看| 在线电影一区二区三区| 欧美一区二区福利视频| 欧美一级xxx| 2023国产精品自拍| 久久精品欧美一区二区三区不卡 | 国产亚洲精品资源在线26u| 精品国产乱码久久久久久久久| 精品免费国产二区三区| 欧美精品一区二区三区很污很色的| 久久人人97超碰com| 国产精品丝袜久久久久久app| 国产精品白丝在线| 亚洲蜜臀av乱码久久精品 | 26uuuu精品一区二区| 久久久久久久综合色一本| 日本一区二区三区四区在线视频 | 国产精品伦理在线| 亚洲天堂av一区| 亚洲综合av网| 日精品一区二区| 狠狠色综合日日| 福利91精品一区二区三区| 91免费版在线| 欧美日韩国产精品成人| 精品日产卡一卡二卡麻豆| 欧美性感一类影片在线播放| 欧美军同video69gay| ww亚洲ww在线观看国产| 中文字幕制服丝袜一区二区三区| 亚洲蜜臀av乱码久久精品| 日韩经典一区二区| 色婷婷一区二区三区四区| 99国产精品久久久久久久久久| 欧美色窝79yyyycom| 精品国产一区二区三区不卡| 国产精品国产馆在线真实露脸| 一级精品视频在线观看宜春院| 免费人成黄页网站在线一区二区|