?? functions.c
字號:
* You have two choices here.
*
* 1. Driver Manages it's own surface
* EngCreateDeviceSurface - Create the handle
* EngModifySurface - Let GDI Know about the object.
*
* 2. GDI Manages the surface
* EngCreateBitmap - Create a handle in a format that GDI Understands
* EngAssociateSurface - Let GDI Know about the object.
*
*
*********************************************************************/
HSURF GdiExample_DrvEnableSurface(DHPDEV dhpdev)
{
SIZEL sizl;
PDEVICE_DATA pDeviceData = (PDEVICE_DATA)dhpdev;
ENGDEBUGPRINT(0, "GdiExample_DrvEnableSurface\r\n", NULL);
pDeviceData->pDeviceSurface = (PDEVICE_SURFACE)EngAllocMem(FL_ZERO_MEMORY, sizeof(DEVICE_SURFACE), FAKE_GFX_TAG);
sizl.cx = RESOLUTION_X;
sizl.cy = RESOLUTION_Y;
pDeviceData->hsurf = (HSURF)EngCreateDeviceSurface((DHSURF)pDeviceData->pDeviceSurface, sizl, BMF_32BPP);
EngModifySurface(pDeviceData->hsurf, pDeviceData->hdev, HOOK_FILLPATH | HOOK_STROKEPATH | HOOK_LINETO | HOOK_TEXTOUT | HOOK_BITBLT | HOOK_COPYBITS, 0, (DHSURF)pDeviceData->pDeviceSurface, pDeviceData->pVideoMemory, RESOLUTION_X*4, NULL);
return(pDeviceData->hsurf);
}
/*********************************************************************
* GdiExample_DrvDisableSurface
*
* This API is called to disable the GDI Surface.
*
*
*********************************************************************/
void GdiExample_DrvDisableSurface(DHPDEV dhpdev)
{
PDEVICE_DATA pDeviceData = (PDEVICE_DATA)dhpdev;
ENGDEBUGPRINT(0, "GdiExample_DrvDisableSurface\r\n", NULL);
EngDeleteSurface(pDeviceData->hsurf);
pDeviceData->hsurf = NULL;
EngFreeMem(pDeviceData->pDeviceSurface);
pDeviceData->pDeviceSurface = NULL;
}
/*********************************************************************
* GdiExample_DrvMovePointer
*
* This API is used to move the Mouse Pointer
*
*********************************************************************/
void GdiExample_DrvMovePointer(SURFOBJ *pso, LONG x, LONG y, RECTL *prcl)
{
ENGDEBUGPRINT(0, "GdiExample_DrvMovePointer\r\n", NULL);
if(pso)
{
EngMovePointer(pso, x, y, prcl);
}
}
/*********************************************************************
* GdiExample_DrvSetPointerShape
*
* This API is used to set the Mouse Pointer shape
*
*********************************************************************/
ULONG GdiExample_DrvSetPointerShape(SURFOBJ *pso, SURFOBJ *psoMask, SURFOBJ *psoColor, XLATEOBJ *pxlo, LONG xHot, LONG yHot, LONG x, LONG y, RECTL *prcl, FLONG fl)
{
ENGDEBUGPRINT(0, "GdiExample_DrvSetPointerShape\r\n", NULL);
return SPS_ACCEPT_NOEXCLUDE;
}
/*********************************************************************
* GdiExample_DrvNotify
*
* This API is optional. GDI will call it to "notify" the driver of certain operations.
*
*********************************************************************/
void GdiExample_DrvNotify(SURFOBJ *pso, ULONG iType, PVOID pvData)
{
ENGDEBUGPRINT(0, "GdiExample_DrvNotify\r\n", NULL);
/* Do Nothing */
}
/*********************************************************************
* GdiExample_DrvRealizeBrush
*
* Realizes a brush
*
*********************************************************************/
BOOL GdiExample_DrvRealizeBrush(BRUSHOBJ *pbo, SURFOBJ *psoTarget, SURFOBJ *psoPattern, SURFOBJ *psoMask, XLATEOBJ *pxlo, ULONG iHatch)
{
ENGDEBUGPRINT(0, "GdiExample_DrvRealizeBrush\r\n", NULL);
return TRUE;
}
/*********************************************************************
* GdiExample_DrvSetPalette
*
* Sets the palette for palette modes. We don't support this.
*
*********************************************************************/
BOOL GdiExample_DrvSetPalette(DHPDEV dhpdev, PALOBJ *ppalo, FLONG fl, ULONG iStart, ULONG cColors)
{
ENGDEBUGPRINT(0, "GdiExample_DrvSetPalette\r\n", NULL);
return FALSE;
}
/*********************************************************************
* GdiExample_DrvStretchBlt
*
* Performs a stretch Blt
*
*********************************************************************/
BOOL GdiExample_DrvStretchBlt(SURFOBJ *psoDest, SURFOBJ *psoSrc, SURFOBJ *psoMask, CLIPOBJ *pco, XLATEOBJ *pxlo, COLORADJUSTMENT *pca, POINTL *pptlHTOrg, RECTL *prclDest, RECTL *prclSrc, POINTL *pptlMask, ULONG iMode)
{
ENGDEBUGPRINT(0, "GdiExample_DrvStretchBlt\r\n", NULL);
return EngStretchBlt(psoDest, psoSrc, psoMask, pco, pxlo, pca, pptlHTOrg, prclDest, prclSrc, pptlMask, iMode);
}
/*********************************************************************
* GdiExample_DrvSynchronizeSurface
*
* Helps synchronize GDI writes with the co-processor. This is optional.
*
*********************************************************************/
void GdiExample_DrvSynchronizeSurface(SURFOBJ *pso, RECTL *prcl, FLONG fl)
{
ENGDEBUGPRINT(0, "GdiExample_DrvSynchronizeSurface\r\n", NULL);
/* Do Nothing */
}
/*********************************************************************
* GdiExample_DrvAlphaBlend
*
* Performs alpha blending.
*
*********************************************************************/
BOOL GdiExample_DrvAlphaBlend(SURFOBJ *psoDest, SURFOBJ *psoSrc, CLIPOBJ *pco, XLATEOBJ *pxlo, RECTL *prclDest, RECTL *prclSrc, BLENDOBJ *pBlendObj)
{
ENGDEBUGPRINT(0, "GdiExample_DrvAlphaBlend\r\n", NULL);
return EngAlphaBlend(psoDest, psoSrc, pco, pxlo, prclDest, prclSrc, pBlendObj);
}
/*********************************************************************
* GdiExample_DrvSaveScreenBits
*
* This API is used to save parts of the screen when they are being overlapped.
* We return 0 to let GDI handle this
*
*********************************************************************/
ULONG_PTR GdiExample_DrvSaveScreenBits(SURFOBJ *pso, ULONG iMode, ULONG_PTR ident, RECTL *prcl)
{
ENGDEBUGPRINT(0, "GdiExample_DrvSaveScreenBits\r\n", NULL);
return 0;
}
/*********************************************************************
* GdiExample_DrvBitBlt
*
* This API is used to perform a BitBlt operation
*
*********************************************************************/
BOOL GdiExample_DrvBitBlt(SURFOBJ *psoTrg, SURFOBJ *psoSrc, SURFOBJ *psoMask, CLIPOBJ *pco, XLATEOBJ *pxlo, RECTL *prclTrg, POINTL *pptlSrc, POINTL *pptlMask, BRUSHOBJ *pbo, POINTL *pptlBrush, ROP4 rop4)
{
ENGDEBUGPRINT(0, "GdiExample_DrvBitBlt\r\n", NULL);
return EngBitBlt(psoTrg, psoSrc, psoMask, pco, pxlo, prclTrg, pptlSrc, pptlMask, pbo, pptlBrush, rop4);
}
/*********************************************************************
* GdiExample_DrvCopyBits
*
* This API copies between different formats.
*
*********************************************************************/
BOOL GdiExample_DrvCopyBits(SURFOBJ *psoDest, SURFOBJ *psoSrc, CLIPOBJ *pco, XLATEOBJ *pxlo, RECTL *prclDest, POINTL *pptlSrc)
{
ENGDEBUGPRINT(0, "GdiExample_DrvCopyBits\r\n", NULL);
// return EngCopyBits(psoDest, psoSrc, pco, pxlo, prclDest, pptlSrc);
return GdiExample_DrvBitBlt(psoDest, psoSrc, NULL, pco, pxlo, prclDest, pptlSrc, NULL, NULL, NULL, ROP4_SRCCOPY);
}
/*********************************************************************
* GdiExample_DrvFillPath
*
* This API fills the path.
*
*********************************************************************/
BOOL GdiExample_DrvFillPath(SURFOBJ *pso, PATHOBJ *ppo, CLIPOBJ *pco, BRUSHOBJ *pbo, POINTL *pptlBrushOrg, MIX mix, FLONG flOptions)
{
ENGDEBUGPRINT(0, "GdiExample_DrvFillPath\r\n", NULL);
return EngFillPath(pso, ppo,pco, pbo, pptlBrushOrg, mix, flOptions);
}
/*********************************************************************
* GdiExample_DrvGradientFill
*
* This API does a gradient fill.
*
*********************************************************************/
BOOL GdiExample_DrvGradientFill(SURFOBJ *psoDest, CLIPOBJ *pco, XLATEOBJ *pxlo, TRIVERTEX *pVertex, ULONG nVertex, PVOID pMesh, ULONG nMesh, RECTL *prclExtents, POINTL *pptlDitherOrg, ULONG ulMode)
{
ENGDEBUGPRINT(0, "GdiExample_DrvGradientFill\r\n", NULL);
return EngGradientFill(psoDest, pco, pxlo, pVertex, nVertex, pMesh, nMesh, prclExtents, pptlDitherOrg, ulMode);
}
/*********************************************************************
* GdiExample_DrvLineTo
*
* This API implements a LINE TO operation.
*
*********************************************************************/
BOOL GdiExample_DrvLineTo(SURFOBJ *pso, CLIPOBJ *pco, BRUSHOBJ *pbo, LONG x1, LONG y1, LONG x2, LONG y2, RECTL *prclBounds, MIX mix)
{
ENGDEBUGPRINT(0, "GdiExample_DrvLineTo\r\n", NULL);
return EngLineTo(pso, pco, pbo, x1, y1, x2, y2, prclBounds, mix);
}
/*********************************************************************
* GdiExample_DrvStrokePath
*
* This API implements a stroke path operation.
*
*********************************************************************/
BOOL GdiExample_DrvStrokePath(SURFOBJ *pso, PATHOBJ *ppo, CLIPOBJ *pco, XFORMOBJ *pxo, BRUSHOBJ *pbo, POINTL *pptlBrushOrg, LINEATTRS *plineattrs, MIX mix)
{
ENGDEBUGPRINT(0, "GdiExample_DrvStrokePath\r\n", NULL);
return EngStrokePath(pso, ppo, pco, pxo, pbo, pptlBrushOrg, plineattrs, mix);
}
/*********************************************************************
* GdiExample_DrvTextOut
*
* This API writes text on to a surface.
*
*********************************************************************/
BOOL GdiExample_DrvTextOut(SURFOBJ *pso, STROBJ *pstro, FONTOBJ *pfo, CLIPOBJ *pco, RECTL *prclExtra, RECTL *prclOpaque, BRUSHOBJ *pboFore, BRUSHOBJ *pboOpaque, POINTL *pptlOrg, MIX mix)
{
ENGDEBUGPRINT(0, "GdiExample_DrvTextOut\r\n", NULL);
return EngTextOut(pso, pstro, pfo, pco, prclExtra, prclOpaque, pboFore, pboOpaque, pptlOrg, mix);
}
/*********************************************************************
* GdiExample_DrvTransparentBlt
*
* This API performs a TransparentBlt.
*
*********************************************************************/
BOOL GdiExample_DrvTransparentBlt(SURFOBJ *psoDst, SURFOBJ *psoSrc, CLIPOBJ *pco, XLATEOBJ *pxlo, RECTL *prclDst, RECTL *prclSrc, ULONG iTransColor, ULONG ulReserved)
{
ENGDEBUGPRINT(0, "GdiExample_DrvTransparentBlt\r\n", NULL);
return EngTransparentBlt(psoDst, psoSrc, pco, pxlo, prclDst, prclSrc, iTransColor, ulReserved);
}
/*********************************************************************
* GdiExample_DrvCreateDeviceBitmap
*
* This API creates and manages bitmaps. We return 0 to let GDI handle this.
*
*********************************************************************/
HBITMAP GdiExample_DrvCreateDeviceBitmap(DHPDEV dhpdev, SIZEL sizl, ULONG iFormat)
{
ENGDEBUGPRINT(0, "GdiExample_DrvCreateDeviceBitmap\r\n", NULL);
return NULL;
}
/*********************************************************************
* GdiExample_DrvDeleteDeviceBitmap
*
* This API deletes managed bitmaps. We are not implementing this.
*
*********************************************************************/
void GdiExample_DrvDeleteDeviceBitmap(DHSURF dhsurf)
{
ENGDEBUGPRINT(0, "GdiExample_DrvDeleteDeviceBitmap\r\n", NULL);
}
/*********************************************************************
* GdiExample_DrvDestroyFont
*
* This API is called to delete a FONT
*
*********************************************************************/
void GdiExample_DrvDestroyFont(FONTOBJ *pfo)
{
ENGDEBUGPRINT(0, "GdiExample_DrvDestroyFont\r\n", NULL);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -