drvGradientFill 函式 (winddi.h)
DrvGradientFill 函式會著色指定的基本類型。
語法
BOOL DrvGradientFill(
[in, out] SURFOBJ *psoDest,
[in] CLIPOBJ *pco,
[in, optional] XLATEOBJ *pxlo,
[in] TRIVERTEX *pVertex,
[in] ULONG nVertex,
[in] PVOID pMesh,
[in] ULONG nMesh,
[in] RECTL *prclExtents,
[in] POINTL *pptlDitherOrg,
[in] ULONG ulMode
);
參數
[in, out] psoDest
SURFOBJ 結構的指標,可識別要繪製的介面。
[in] pco
CLIPOBJ 結構的指標。 系統會提供 CLIPOBJ_Xxx 服務例程,將 剪輯區域 列舉為一組矩形。 此列舉會限制已修改之目的地的區域。 可能的話,GDI 會簡化相關的裁剪。
[in, optional] pxlo
XLATEOBJ 結構的指標。 驅動程式應該忽略此參數。
[in] pVertex
TRIVERTEX 結構的陣列指標,每個專案都包含位置和色彩資訊。 TRIVERTEX 結構會在 Microsoft Windows SDK 檔中說明。
[in] nVertex
指定 pVertex 指向之陣列中的 TRIVERTEX 結構數目。
[in] pMesh
結構的陣列指標,定義 pVertex 所指向之 TRIVERTEX 元素的連線能力。
繪製矩形時, pMesh 會指向GRADIENT_RECT 結構的陣列,每個都會指定兩個定義矩形的TEX元素。 TRIVERTEX 元素可以代表任何對角相反的矩形頂點配對。 矩形繪圖的右下角是獨佔的。 TRIVERTEX 和GRADIENT_RECT都是在 Windows SDK 檔中定義。
繪製三角形時, pMesh 會指向GRADIENT_TRIANGLE 結構的陣列,其中每一個都會指定定義三角形的三個 TRIVERTEX 元素。 三角形繪圖是右下角的獨佔。 GRADIENT_TRIANGLE定義於 Windows SDK 檔中。
[in] nMesh
指定 pMesh 指向之陣列中的項目數目。
[in] prclExtents
RECTL 結構的指標,定義要在其中發生漸層繪圖的區域。 這些點是在目的地介面的座標系統中指定。 此參數在估計繪圖作業的大小時很有用。
[in] pptlDitherOrg
POINTL 結構的指標,該結構會定義表面的原點以進行 dithering。 dither 圖樣左上方的圖元會與這個點對齊。
[in] ulMode
指定目前的繪圖模式,以及如何解譯 pMesh 指向的陣列。 此參數可以是下列其中一個值:
GRADIENT_FILL_RECT_H
pMesh 參數指向GRADIENT_RECT 結構的陣列。 每個矩形都是由左至右著色。 具體而言,左上方和左下角圖元的色彩相同,與右上方和右下圖元相同。
GRADIENT_FILL_RECT_V
pMesh 參數指向GRADIENT_RECT 結構的陣列。 每個矩形都是從上到下著色。 具體而言,左上角和右上方圖元的色彩相同,與左下和右下圖元相同。
GRADIENT_FILL_TRIANGLE
pMesh 參數會指向GRADIENT_TRIANGLE結構的陣列。
每個模式的 漸層填滿 計算記載於一節中。
傳回值
DrvGradientFill 會在成功時傳回 TRUE 。 否則,它會傳回 FALSE ,並藉由呼叫 EngSetLastError 回報錯誤。
備註
DrvGradientFill 可以在圖形驅動程式中選擇性地實作。 GDI 永遠不會針對平板表面呼叫此函式。
驅動程式會在呼叫 EngAssociateSurface 或 EngModifySurface 時設定HOOK_GRADIENTFILL旗標,以攔截 DrvGradientFill。 如果驅動程式已攔截 DrvGradientFill 並呼叫 來執行不支援的作業,驅動程式應該透過在 呼叫EngGradientFill中標點數據,讓該驅動程式擁有 GDI 處理作業。
GDI 不會針對 8bpp 目的地表面呼叫 DrvGradientFill 。
計算基本類型每個圖元色彩值的公式取決於 ulMode ,如下所示:
所有三個色彩色板累積的總錯誤不能超過八個 (8 個) 。 如需允許錯誤的詳細資訊,請參閱 顯示驅動程式中的特殊效果。
驅動程式應該忽略頂點的Alpha值,讓支援Alpha混合的介面維持Alpha色板不變。
規格需求
需求 | 值 |
---|---|
目標平台 | 桌面 |
標頭 | winddi.h (包含Winddi.h) |