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

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

?? htmldrv.cpp

?? Windows 圖形編程 書籍
?? CPP
字號:
//-----------------------------------------------------------------------------------//
//              Windows Graphics Programming: Win32 GDI and DirectDraw               //
//                             ISBN  0-13-086985-6                                   //
//                                                                                   //
//  Written            by  Yuan, Feng                             www.fengyuan.com   //
//  Copyright (c) 2000 by  Hewlett-Packard Company                www.hp.com         //
//  Published          by  Prentice Hall PTR, Prentice-Hall, Inc. www.phptr.com      //
//                                                                                   //
//  FileName   : htmldrv.cpp					                                     //
//  Description: HTML printer driver entry points, Chapter 2                         //
//  Version    : 1.00.000, May 31, 2000                                              //
//-----------------------------------------------------------------------------------//

#define _WIN32_WINNT 0x0500 
#define  WINVER      0x0500 
#define NOCRYPT

#define UNICODE
#define _UNICODE
#define _X86_ 1
#define WINNT 1 

#include <windows.h>

#pragma message("Add DDK to VC include and library directories")

#include <winddi.h>

#include "Device.h"
 
#pragma comment(lib, "win32k.lib")

const DRVFN DDI_Hooks[] =
{
    INDEX_DrvEnablePDEV,       (PFN) DrvEnablePDEV,
    INDEX_DrvCompletePDEV,     (PFN) DrvCompletePDEV,
    INDEX_DrvResetPDEV,        (PFN) DrvResetPDEV,
    INDEX_DrvDisablePDEV,      (PFN) DrvDisablePDEV,
    INDEX_DrvEnableSurface,    (PFN) DrvEnableSurface,
    INDEX_DrvDisableSurface,   (PFN) DrvDisableSurface,

    INDEX_DrvStartDoc,         (PFN) DrvStartDoc,
    INDEX_DrvEndDoc,           (PFN) DrvEndDoc,
    INDEX_DrvStartPage,        (PFN) DrvStartPage,
    INDEX_DrvSendPage,         (PFN) DrvSendPage,

    INDEX_DrvStrokePath,       (PFN) DrvStrokePath,
    INDEX_DrvFillPath,         (PFN) DrvFillPath,
    INDEX_DrvStrokeAndFillPath,(PFN) DrvStrokeAndFillPath,
    INDEX_DrvLineTo,           (PFN) DrvLineTo,
    INDEX_DrvPaint,            (PFN) DrvPaint,
    INDEX_DrvBitBlt,           (PFN) DrvBitBlt,
    INDEX_DrvCopyBits,         (PFN) DrvCopyBits,
    INDEX_DrvStretchBlt,       (PFN) DrvStretchBlt,
    INDEX_DrvTextOut,          (PFN) DrvTextOut
};

#define PaperWidth   85
#define PaperHeight 110
#define Dpi			 96


BOOL APIENTRY DrvEnableDriver(ULONG iEngineVersion, ULONG cj, DRVENABLEDATA *pded)
{
    // Validate parameters.
    if (iEngineVersion < DDI_DRIVER_VERSION)
    {
        EngSetLastError(ERROR_BAD_DRIVER_LEVEL);
        return FALSE;
    }

    if (cj < sizeof(DRVENABLEDATA))
    {
        EngSetLastError(ERROR_INVALID_PARAMETER);
        return FALSE;
    }

    pded->iDriverVersion = DDI_DRIVER_VERSION;
    pded->c              = sizeof(DDI_Hooks) / sizeof(DDI_Hooks[0]);
    pded->pdrvfn         = (DRVFN *) DDI_Hooks;

    return TRUE;
}


void APIENTRY DrvDisableDriver(void)
{
}


DHPDEV APIENTRY DrvEnablePDEV(DEVMODEW *pdm,
              LPWSTR    pwszLogAddress,
              ULONG     cPat,
              HSURF    *phsurfPatterns,
              ULONG     cjCaps,
              ULONG    *pdevcaps,
              ULONG     cjDevInfo,
              DEVINFO  *pdi,
              HDEV      hdev,
              PWSTR     pwszDeviceName,
              HANDLE    hDriver)
{
    if ( (cjCaps<sizeof(GDIINFO)) || (cjDevInfo<sizeof(DEVINFO)) )
    {
        EngSetLastError(ERROR_INVALID_PARAMETER);
        return FALSE;
    }

    KDevice * pDevice;
    
    // Allocate physical device object. Tag = HTMD
    pDevice = (KDevice *) EngAllocMem (FL_ZERO_MEMORY, sizeof(KDevice), 'DMTH');
    if (pDevice == NULL)
    {
        EngSetLastError(ERROR_OUTOFMEMORY);
        return NULL;
    }

	pDevice->Create();

    pDevice->hSpooler   = hDriver;
	pDevice->hPalette   = EngCreatePalette (PAL_BGR, 0, 0, 0, 0, 0);

    if (pdm == NULL || pdm->dmOrientation == DMORIENT_PORTRAIT)
	{
		pDevice->width  = PaperWidth;
		pDevice->height = PaperHeight;
	}
	else
	{
		pDevice->width  = PaperHeight;
		pDevice->height = PaperWidth;
	}

	// GDIINFO initialized by GDI before calling DrvEnablePDEV
	PGDIINFO pgdiinfo = (PGDIINFO) pdevcaps;
    
	memset(pgdiinfo, 0, sizeof(GDIINFO));

	pgdiinfo->ulVersion    = GDI_DRIVER_VERSION;
    pgdiinfo->ulTechnology = DT_RASPRINTER;
	pgdiinfo->ulHorzSize   = pDevice->width  * 254 / 10;
    pgdiinfo->ulVertSize   = pDevice->height * 254 / 10;
    pgdiinfo->ulHorzRes    = pDevice->width  * Dpi / 10;
    pgdiinfo->ulVertRes    = pDevice->height * Dpi / 10;

	pgdiinfo->cBitsPixel   = 24;
	pgdiinfo->cPlanes      = 1;
	pgdiinfo->ulNumColors  = 512;
	pgdiinfo->flRaster     = 0;
    pgdiinfo->ulLogPixelsX = Dpi;
	pgdiinfo->ulLogPixelsY = Dpi;

	pgdiinfo->ulAspectX    = 1000;
	pgdiinfo->ulAspectY    = 1000;
    pgdiinfo->ulAspectXY   = 1414;  
    
	pgdiinfo->xStyleStep   = 1;
	pgdiinfo->yStyleStep   = 1;
	pgdiinfo->denStyleStep = 10;
    
	pgdiinfo->ptlPhysOffset.x = Dpi / 4; // 0.25 inch
	pgdiinfo->ptlPhysOffset.y = Dpi / 4; // 0.25 inch
    pgdiinfo->szlPhysSize.cx  = pDevice->width  * Dpi / 10;
    pgdiinfo->szlPhysSize.cy  = pDevice->height * Dpi / 10;

	pgdiinfo->ulDevicePelsDPI = Dpi;
	pgdiinfo->ulPrimaryOrder  = PRIMARY_ORDER_ABC;
	pgdiinfo->ulHTPatternSize = HT_PATSIZE_DEFAULT;
	pgdiinfo->ulHTOutputFormat= HT_FORMAT_24BPP;
    pgdiinfo->flHTFlags       = HT_FLAG_HAS_BLACK_DYE;

	// DEVINFO, initialized by GDI, driver only set what it understands
    pdi->flGraphicsCaps = GCAPS_BEZIERS | 
						  GCAPS_GEOMETRICWIDE |
						  GCAPS_ALTERNATEFILL |
						  GCAPS_WINDINGFILL |
						  GCAPS_HALFTONE |
						  GCAPS_HORIZSTRIKE |
						  GCAPS_VERTSTRIKE |
						  GCAPS_OPAQUERECT |
						  GCAPS_VECTORFONT;
    pdi->iDitherFormat = BMF_24BPP;
	pdi->hpalDefault   = pDevice->hPalette;
    
	return (DHPDEV) pDevice;
}


void APIENTRY DrvCompletePDEV(DHPDEV dhpdev, HDEV hdev)
{
    KDevice * pDevice = (KDevice *)dhpdev;
    
	pDevice->hDevice = hdev;
}


BOOL APIENTRY DrvResetPDEV(DHPDEV dhpdevOld, DHPDEV dhpdevNew)
{
    return TRUE;
}


void APIENTRY DrvDisablePDEV(DHPDEV dhpdev)
{
    KDevice * pDevice = (KDevice *)dhpdev;

	if ( pDevice->hPalette )
		EngDeletePalette(pDevice->hPalette);

    EngFreeMem(pDevice);
}


HSURF APIENTRY DrvEnableSurface(DHPDEV dhpdev)
{
    KDevice * pDevice = (KDevice *) dhpdev;

    SIZEL sizl = { pDevice->width * Dpi / 10, pDevice->height * Dpi / 10 };
    
    pDevice->hSurface = (HSURF) EngCreateBitmap(sizl, sizl.cy, BMF_24BPP, 
		                            BMF_NOZEROINIT,  NULL);

    if (pDevice->hSurface == NULL)
        return NULL;
 
    EngAssociateSurface(pDevice->hSurface, pDevice->hDevice, 
		HOOK_BITBLT | HOOK_STRETCHBLT | HOOK_TEXTOUT | HOOK_PAINT | 
		HOOK_STROKEPATH | HOOK_FILLPATH | HOOK_STROKEANDFILLPATH | 
		HOOK_COPYBITS | HOOK_LINETO);

    return pDevice->hSurface;
}


void APIENTRY DrvDisableSurface(DHPDEV dhpdev)
{
    KDevice * pDevice = (KDevice *)dhpdev;

    EngDeleteSurface(pDevice->hSurface);
	pDevice->hSurface = NULL;
}


BOOL  APIENTRY DrvStartPage(SURFOBJ *pso)
{
    KDevice * pDevice = (KDevice *) pso->dhpdev;

    if ( pDevice->StartPage(& pso, 1) )
    {
		RECTL rect = { 0, 0, pDevice->width * Dpi / 10, pDevice->height * Dpi / 10 };
		
		EngEraseSurface(pso, & rect, 0xFFFFFF);

        return TRUE;
    }
    else
        return FALSE;
}

BOOL APIENTRY DrvStartDoc(SURFOBJ *pso, PWSTR pwszDocName, DWORD dwJobId)
{
    KDevice * pDevice = (KDevice *) pso->dhpdev;

	return pDevice->StartDoc(pwszDocName, & pso, 3);
}


BOOL APIENTRY DrvEndDoc(SURFOBJ *pso, FLONG fl)
{
    KDevice * pDevice = (KDevice *) pso->dhpdev;

    return pDevice->EndDoc(&pso, 2);
}


BOOL APIENTRY DrvSendPage(SURFOBJ *pso)
{
    KDevice * pDevice = (KDevice *) pso->dhpdev;

	if ( pDevice->SendPage(& pso, 1) )
	{
		pDevice->DumpSurface(pso);
		
		return TRUE;
	}
	else
		return FALSE;
}


BOOL APIENTRY DrvStrokePath(SURFOBJ   *pso,
							PATHOBJ   *ppo,
							CLIPOBJ   *pco,
                            XFORMOBJ  *pxo, 
							BRUSHOBJ  *pbo,
							POINTL    *pptlBrushOrg,
                            LINEATTRS *plineattrs,
							MIX        mix)
{
    KDevice * pDevice = (KDevice *) pso->dhpdev;

    if ( pDevice->CallEngine(INDEX_DrvStrokePath, & pso, 8) )
		return EngStrokePath(pso, ppo, pco, pxo, pbo, pptlBrushOrg, plineattrs, mix);
    else
        return FALSE;
}


BOOL APIENTRY DrvFillPath(SURFOBJ  *pso,
						  PATHOBJ  *ppo,
						  CLIPOBJ  *pco,
						  BRUSHOBJ *pbo,
                          POINTL   *pptlBrushOrg,
						  MIX       mix,
						  FLONG     flOptions)
{
    KDevice * pDevice = (KDevice *) pso->dhpdev;

    if ( pDevice->CallEngine(INDEX_DrvFillPath, & pso, 7) )
        return EngFillPath(pso, ppo, pco, pbo, pptlBrushOrg, mix, flOptions);
    else
        return FALSE;
}


BOOL APIENTRY DrvStrokeAndFillPath(SURFOBJ *pso,PATHOBJ *ppo,CLIPOBJ *pco,
                                   XFORMOBJ *pxo,BRUSHOBJ *pboStroke,
                                   LINEATTRS *plineattrs,BRUSHOBJ *pboFill,
                                   POINTL *pptlBrushOrg,MIX mixFill,FLONG flOptions)
{
    KDevice * pDevice = (KDevice *) pso->dhpdev;

    if ( pDevice->CallEngine(INDEX_DrvStrokeAndFillPath, &pso, 10) )
        return EngStrokeAndFillPath(pso, ppo, pco, pxo, pboStroke, plineattrs, 
		           pboFill, pptlBrushOrg, mixFill, flOptions);
    else
        return FALSE;
}


BOOL APIENTRY DrvLineTo(SURFOBJ *pso, CLIPOBJ *pco, BRUSHOBJ *pbo, LONG x1, 
                        LONG y1, LONG x2, LONG y2, RECTL *prclBounds, MIX mix)
{
    KDevice * pDevice = (KDevice *) pso->dhpdev;

    if ( pDevice->CallEngine(INDEX_DrvLineTo, &pso, 9) )
        return EngLineTo(pso, pco, pbo, x1, y1, x2, y2, prclBounds, mix);
    else
        return FALSE;
}


BOOL APIENTRY DrvPaint(SURFOBJ  *pso, 
					   CLIPOBJ  *pco, 
					   BRUSHOBJ *pbo,
					   POINTL   *pptlBrushOrg,
					   MIX       mix)
{
    KDevice * pDevice = (KDevice *) pso->dhpdev;

    if ( pDevice->CallEngine(INDEX_DrvPaint, & pso, 5) )
        return EngPaint(pso, pco, pbo, pptlBrushOrg, mix);
    else
        return FALSE;
}


BOOL APIENTRY DrvBitBlt(SURFOBJ  *psoTrg,
						SURFOBJ  *psoSrc,
						SURFOBJ  *psoMask,
                        CLIPOBJ  *pco,
						XLATEOBJ *pxlo,
						RECTL    *prclTrg,
						POINTL   *pptlSrc,
                        POINTL   *pptlMask,
						BRUSHOBJ *pbo,
						POINTL   *pptlBrush,
						ROP4      rop4)
{
    KDevice * pDevice = (KDevice *) psoTrg->dhpdev;

    if ( pDevice->CallEngine(INDEX_DrvBitBlt, &psoTrg, 11) )
		return EngBitBlt(psoTrg, psoSrc, psoMask, pco, pxlo, prclTrg, 
		            pptlSrc, pptlMask, pbo, pptlBrush, rop4);
    else
        return FALSE;
}


BOOL APIENTRY DrvCopyBits(SURFOBJ  *psoDest,
						  SURFOBJ  *psoSrc,
						  CLIPOBJ  *pco,
                          XLATEOBJ *pxlo,
						  RECTL    *prclDest,
						  POINTL   *pptlSrc)
{
    KDevice * pDevice = (KDevice *) psoDest->dhpdev;

    if (pDevice->CallEngine(INDEX_DrvCopyBits, &psoDest, 6) )
        return EngCopyBits(psoDest, psoSrc, pco, pxlo, prclDest, pptlSrc);
    else
        return FALSE;
}


BOOL APIENTRY DrvStretchBlt(SURFOBJ         *psoDest,
							SURFOBJ         *psoSrc,
							SURFOBJ         *psoMask,
                            CLIPOBJ         *pco,
							XLATEOBJ        *pxlo,
							COLORADJUSTMENT *pca,
                            POINTL          *pptlHTOrg,
							RECTL           *prclDest,
                            RECTL           *prclSrc,
                            POINTL          *pptlMask,
							ULONG            iMode)
{
    KDevice * pDevice = (KDevice *) psoDest->dhpdev;

    if ( pDevice->CallEngine(INDEX_DrvStretchBlt, & psoDest, 11) )
        return EngStretchBlt(psoDest, psoSrc, psoMask, pco, pxlo, pca, 
		           pptlHTOrg, prclDest, prclSrc, pptlMask, iMode);
    else
        return FALSE;
}


BOOL APIENTRY DrvTextOut(SURFOBJ  *pso,
           STROBJ   *pstro,
           FONTOBJ  *pfo,
           CLIPOBJ  *pco,
           RECTL    *prclExtra,
           RECTL    *prclOpaque,
           BRUSHOBJ *pboFore,
           BRUSHOBJ *pboOpaque,
           POINTL   *pptlOrg,
           MIX       mix)
{
    KDevice * pdevice = (KDevice *) pso->dhpdev;

    if ( pdevice->CallEngine(INDEX_DrvTextOut, &pso, 10) )
		return EngTextOut(pso, pstro, pfo, pco, prclExtra, 
		           prclOpaque, pboFore, pboOpaque, pptlOrg, mix);
    else
        return FALSE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合视频在线观看| 亚洲一区二区三区小说| 亚洲精品乱码久久久久| 欧美午夜精品一区二区三区| 国产精品毛片a∨一区二区三区| 顶级嫩模精品视频在线看| 国产欧美视频在线观看| 91小视频在线免费看| 亚洲在线视频一区| 91精品欧美福利在线观看| 久久国产精品99久久久久久老狼 | 91色porny在线视频| 玉足女爽爽91| 日韩一级二级三级| 国产老女人精品毛片久久| 国产精品久久毛片av大全日韩| 色婷婷综合久久久中文一区二区| 亚洲福利国产精品| 欧美成人vr18sexvr| 成人免费av在线| 亚洲综合小说图片| 日韩欧美中文字幕制服| 国产超碰在线一区| 午夜伦理一区二区| 国产日韩综合av| 欧美在线制服丝袜| 国产乱码精品一区二区三区忘忧草 | 国产乱码精品一区二区三区忘忧草| 久久精品男人天堂av| 欧美曰成人黄网| 精品无码三级在线观看视频| 中文字幕一区视频| 亚洲精品久久久蜜桃| 日韩一二三四区| 国产99一区视频免费| 精品国产乱码久久久久久免费| 成人永久aaa| 丝袜a∨在线一区二区三区不卡| 久久精品亚洲精品国产欧美kt∨| 乱中年女人伦av一区二区| 亚洲精品日产精品乱码不卡| 懂色av一区二区三区蜜臀 | 亚洲成人免费观看| 久久久久久9999| 欧美顶级少妇做爰| 成人激情电影免费在线观看| 日韩黄色片在线观看| 国产精品久久三| 欧美喷潮久久久xxxxx| 成人免费看视频| 亚洲精品一区二区三区福利| 91小视频在线免费看| 一区二区三区国产| 欧美精品一区二区三区一线天视频| 成人网男人的天堂| 日韩激情av在线| 亚洲欧洲精品一区二区精品久久久 | 91片在线免费观看| 盗摄精品av一区二区三区| 精品一区二区免费在线观看| 亚洲图片自拍偷拍| 亚洲欧美日韩国产综合| 国产拍揄自揄精品视频麻豆| 日韩欧美高清在线| 欧美日韩一级二级三级| 色综合久久99| 99精品欧美一区二区三区综合在线| 国产乱码精品一区二区三| 久久福利视频一区二区| 午夜精品一区在线观看| 一区二区三区国产豹纹内裤在线 | 国产成人免费视频网站| 精品一区二区三区免费观看 | 555www色欧美视频| 欧美精品xxxxbbbb| 欧美亚洲尤物久久| 色综合中文字幕国产 | 欧美xxxxx牲另类人与| 精品久久久久99| 国产精品成人一区二区艾草| 亚洲美女免费在线| 日韩综合小视频| 国产成人免费9x9x人网站视频| 99国产精品久久久久久久久久| 欧美乱熟臀69xxxxxx| 久久无码av三级| 亚洲日本va午夜在线影院| 奇米一区二区三区| 成人av电影在线网| 日韩欧美国产一区二区在线播放| 国产精品久久久久影院色老大 | 久久精品国产亚洲aⅴ| a在线欧美一区| 精品剧情v国产在线观看在线| 亚洲欧美在线观看| 麻豆免费看一区二区三区| 色播五月激情综合网| 久久女同性恋中文字幕| 午夜视频一区在线观看| 成人免费视频视频| 精品国产麻豆免费人成网站| 尤物av一区二区| 福利视频网站一区二区三区| 欧美巨大另类极品videosbest | 国产精品久久午夜| 激情六月婷婷综合| 67194成人在线观看| 一区二区在线观看视频| 国产在线精品一区二区| 69久久夜色精品国产69蝌蚪网| 欧美国产精品中文字幕| 裸体健美xxxx欧美裸体表演| 色婷婷精品久久二区二区蜜臂av| 久久久久久一级片| 美国欧美日韩国产在线播放| 在线观看视频一区二区欧美日韩| 久久九九国产精品| 久久电影网电视剧免费观看| 欧美顶级少妇做爰| 亚洲国产精品久久人人爱 | 91亚洲永久精品| 欧美成人精品3d动漫h| 午夜精品一区二区三区电影天堂| 色激情天天射综合网| 国产精品美日韩| 国产福利一区二区三区视频| 91精品国产乱| 亚洲综合免费观看高清完整版| 97久久人人超碰| 日韩美女视频一区二区| 91网页版在线| 亚洲色图另类专区| 91麻豆精品秘密| 亚洲另类一区二区| 色综合激情五月| 亚洲午夜av在线| 欧美日本精品一区二区三区| 婷婷中文字幕综合| 欧美精品精品一区| 麻豆精品视频在线观看免费| 欧美一区二区三区免费大片| 蜜臀av一级做a爰片久久| 欧美电影免费观看完整版| 卡一卡二国产精品 | 综合久久久久久久| av一二三不卡影片| 亚洲综合在线观看视频| 欧美在线不卡视频| 日本亚洲一区二区| 精品88久久久久88久久久| 国产中文一区二区三区| 国产欧美精品一区二区色综合朱莉| 成人午夜大片免费观看| 国产精品久久久久久久午夜片 | 不卡av在线免费观看| 亚洲精品日韩一| 欧美人与性动xxxx| 久久99国产精品免费| 日本一区二区三区四区| 91一区二区三区在线播放| 亚洲一区二区欧美日韩| 91精品国产高清一区二区三区| 精品一区二区三区在线播放视频| 国产女人水真多18毛片18精品视频| 成人夜色视频网站在线观看| 亚洲精品中文在线观看| 777奇米成人网| 国产精品一区不卡| 亚洲日本va在线观看| 欧美精品在线观看播放| 国产一区久久久| 亚洲视频1区2区| 欧美一级欧美三级在线观看| 国产精品自在在线| 一区二区国产视频| 精品国产伦一区二区三区免费| fc2成人免费人成在线观看播放| 亚洲国产一区二区在线播放| 欧美本精品男人aⅴ天堂| 99视频国产精品| 日韩国产欧美在线播放| 国产女主播在线一区二区| 欧美视频一区在线| 国产精品性做久久久久久| 亚洲午夜久久久久久久久电影院 | 91在线视频免费91| 日日骚欧美日韩| 中文字幕在线一区二区三区| 7777精品伊人久久久大香线蕉超级流畅 | 一区二区三区中文字幕| 久久中文娱乐网| 欧美在线观看禁18| 成人国产精品免费| 日本欧美一区二区| 一区二区在线观看免费| 国产婷婷精品av在线| 日韩一区二区高清| av不卡免费电影| 韩国一区二区视频| 亚洲一区免费视频|