CDrawingManager 類別
類別 CDrawingManager
會實作複雜的繪圖演算法。
語法
class CDrawingManager : public CObject
成員
公用建構函式
名稱 | 描述 |
---|---|
CDrawingManager::CDrawingManager | 建構 CDrawingManager 物件。 |
CDrawingManager::~CDrawingManager |
解構函式。 |
公用方法
備註
類別 CDrawingManager
提供繪製陰影、色彩漸層和反白顯示矩形的函式。 它也會執行Alpha混合。 您可以使用這個類別直接變更應用程式的 UI。
繼承階層架構
CObject
CDrawingManager
需求
標頭: afxdrawmanager.h
CDrawingManager::CDrawingManager
CDrawingManager(CDC& dc);
參數
dc
[in]裝置內容的參考。 會 CDrawingManager
使用此內容來繪製。
CDrawingManager::CreateBitmap_32
建立應用程式可以直接寫入的 32 位裝置獨立點陣圖 (DIB)。
static HBITMAP __stdcall CreateBitmap_32(
const CSize& size,
void** pBits);
static HBITMAP __stdcall CreateBitmap_32(
HBITMAP bitmap,
COLORREF clrTransparent = -1);
參數
size
[in] 指出位圖大小的 CSize 參數。
pBits
[out]接收 DIB 位值位置之數據指標的指標。
點陣圖
原始點圖的句柄
clrTransparent
指定原始點圖透明色彩的 RGB 值。
傳回值
如果此方法成功,則為新建立之 DIB 位圖的句柄;否則為 NULL。
備註
如需如何建立 DIB 位圖的詳細資訊,請參閱 CreateDIBSection。
CDrawingManager::D rawAlpha
顯示具有透明或半透明圖元的點陣圖。
void DrawAlpha(
CDC* pDstDC,
const CRect& rectDst,
CDC* pSrcDC,
const CRect& rectSrc);
參數
pDstDC
[in]目的地之裝置內容的指標。
rectDst
[in]目的矩形。
pSrcDC
[in]來源之裝置內容的指標。
rectSrc
[in]來源矩形。
備註
這個方法會針對兩個位圖執行Alpha混合。 如需Alpha混合的詳細資訊,請參閱 Windows SDK 中的 AlphaBlend 。
CDrawingManager::D rawEllipse
使用提供的填滿和框線色彩繪製橢圓形。
void DrawEllipse(
const CRect& rect,
COLORREF clrFill,
COLORREF clrLine);
參數
rect
[in]橢圓形的周框。
clrFill
[in]這個方法用來填滿橢圓形的色彩。
clrLine
[in]這個方法使用的色彩是省略號的框線。
備註
如果任一色彩設定為 -1,這個方法會傳回而不繪製橢圓形。 如果周框的任一維度為 0,它也會傳回而不繪製橢圓形。
CDrawingManager::D rawGradientRing
繪製環形,並填滿色彩漸層。
BOOL DrawGradientRing(
CRect rect,
COLORREF colorStart,
COLORREF colorFinish,
COLORREF colorBorder,
int nAngle,
int nWidth,
COLORREF clrFace = (COLORREF)-1);
參數
rect
[in]指定 漸層環形界限的 CRect 參數。
colorStart
[in]漸層的第一個色彩。
colorFinish
[in]漸層的最後一個色彩。
colorBorder
[in]框線的色彩。
nAngle
[in]指定初始漸層繪製角度的參數。 此值應介於 0 到 360 之間。
nWidth
[in]環形框線的寬度。
clrFace
[in]環形內部的色彩。
傳回值
如果成功則為非零;否則為 0。
備註
矩形定義的矩形必須至少為5像素寬和5像素高。
CDrawingManager::D rawLine、CDrawingManager::D rawLineA
繪製線條。
void DrawLine(
int x1,
int y1,
int x2,
int y2,
COLORREF clrLine);
void DrawLineA(
double x1,
double y1,
double x2,
double y2,
COLORREF clrLine);
參數
x1
[in]線條開始位置的 x 座標。
y1
[in]線條開始位置的 Y 座標。
x2
[in]線條結尾處的 x 座標。
y2
[in]線條結尾的 Y 座標。
clrLine
[in]線條的色彩。
備註
如果 clrLine 等於 -1,這個方法就會失敗。
CDrawingManager::D rawRect
使用提供的填滿和框線色彩繪製矩形。
void DrawRect(
const CRect& rect,
COLORREF clrFill,
COLORREF clrLine);
參數
rect
[in]矩形的界限。
clrFill
[in]這個方法用來填滿矩形的色彩。
clrLine
[in]這個方法用於矩形框線的色彩。
備註
如果任一色彩設定為 -1,這個方法就會傳回而不繪製矩形。 如果矩形的任一維度為 0,它也會傳回 。
CDrawingManager::D rawShadow
繪製矩形區域的陰影。
BOOL DrawShadow(
CRect rect,
int nDepth,
int iMinBrightness = 100,
int iMaxBrightness = 50,
CBitmap* pBmpSaveBottom = NULL,
CBitmap* pBmpSaveRight = NULL,
COLORREF clrBase = (COLORREF)-1,
BOOL bRightShadow = TRUE);
參數
rect
[in]應用程式中的矩形區域。 繪圖管理員會在該區域底下繪製陰影。
nDepth
[in]陰影的寬度和高度。
iMinBrightness
[in]陰影的最小亮度。
iMaxBrightness
[in]陰影的最大亮度。
pBmpSaveBottom
[in]包含陰影下部影像之位圖的指標。
pBmpSaveRight
[in]位圖的指標,其中包含矩形右側所繪製陰影的影像。
clrBase
[in]陰影的色彩。
bRightShadow
[in]布爾值參數,表示陰影的繪製方式。 如果 bRightShadow 為 TRUE
, DrawShadow
則會在矩形右側繪製陰影。
傳回值
如果成功則為非零;否則為 0。
備註
您可以使用 pBmpSaveBottom 和 pBmpSaveRight 參數,為底部和右陰影提供兩個有效的位圖。 如果這些 CBitmap 物件具有附加的 GDI 物件, DrawShadow
則會使用這些點陣圖作為陰影。 CBitmap
如果參數沒有附加的 GDI 物件,DrawShadow
則會繪製陰影,並將點圖附加至參數。 在未來呼叫 DrawShadow
時,您可以提供這些點陣圖來加速繪製程式。 如需 類別和 GDI 物件的詳細資訊 CBitmap
,請參閱 圖形物件。
如果其中一個參數是 NULL
, DrawShadow
將會自動繪製陰影。
如果您將 bRightShadow 設定為 FALSE,陰影將會繪製在矩形區域的下方和左邊。
範例
下列範例示範如何使用 DrawShadow
類別的 CDrawingManager
方法。 此代碼段是 Prop Sheet 示範範例的一部分。
// CDC* pDC
// CRect rectHeader
CDrawingManager dm(*pDC);
// Draw a shadow for a rectangular area.
// second parameter is the depth of the shadow
dm.DrawShadow(rectHeader, 2);
CDrawingManager::Fill4ColorsGradient
以兩個色彩漸層填滿矩形區域。
void Fill4ColorsGradient(
CRect rect,
COLORREF colorStart1,
COLORREF colorFinish1,
COLORREF colorStart2,
COLORREF colorFinish2,
BOOL bHorz = TRUE,
int nPercentage = 50);
參數
rect
[in]要填滿的矩形。
colorStart1
[in]第一個色彩漸層的初始色彩。
colorFinish1
[in]第一個色彩漸層的最後色彩。
colorStart2
[in]第二個色彩漸層的初始色彩。
colorFinish2
[in]第二個色彩漸層的最終色彩。
bHorz
[in]布爾值參數,指出水準或垂直漸層的 Fill4ColorsGradient
色彩。 TRUE 表示水準漸層。
nPercentage
[in]0-100 的整數。 這個值表示要填滿第一個色彩漸層的矩形百分比。
備註
當矩形填滿兩個色彩漸層時,會根據 bHorz 的值,分別位於彼此上方或彼此旁邊。 每個色彩漸層都是使用 CDrawingManager::FillGradient 方法獨立計算。
如果 nPercentage 小於 0 或超過 100,這個方法會產生判斷提示失敗。
CDrawingManager::FillGradient
以指定的色彩漸層填滿矩形區域。
void FillGradient(
CRect rect,
COLORREF colorStart,
COLORREF colorFinish,
BOOL bHorz = TRUE,
int nStartFlatPercentage = 0,
int nEndFlatPercentage = 0);
參數
rect
[in]要填滿的矩形區域。
colorStart
[in]漸層的第一個色彩。
colorFinish
[in]漸層的最終色彩。
bHorz
[in]布爾參數,指定是否 FillGradient
應該繪製水準或垂直漸層。
nStartFlatPercentage
[in]開始漸層之前填 FillGradient
滿 colorStart 的矩形百分比。
nEndFlatPercentage
[in]完成漸層之後填滿 colorFinish 的矩形FillGradient
百分比。
範例
下列範例示範如何使用 FillGradient
類別的 CDrawingManager
方法。 此代碼段是 MS Office 2007 示範範例的一部分。
// CRect rectScreen
// CDrawingManager dm
dm.FillGradient(rectScreen, RGB(114, 125, 152), RGB(178, 185, 202), TRUE);
CDrawingManager::FillGradient2
以指定的色彩漸層填滿矩形區域。
void FillGradient2 (
CRect rect,
COLORREF colorStart,
COLORREF colorFinish,
int nAngle = 0);
參數
rect
[in]要填滿的矩形區域。
colorStart
[in]漸層的第一個色彩。
colorFinish
[in]漸層的最後一個色彩。
nAngle
[in]介於 0 到 360 之間的整數。 此參數會指定色彩漸層的方向。
備註
使用 nAngle 指定色彩漸層的方向。 當您指定色彩漸層的方向時,也會指定色彩漸層開始的位置。 nAngle 的值為 0,表示漸層從矩形頂端開始。 當 nAngle 增加時,漸層的起始位置會根據角度以逆時針方向移動。
範例
下列範例示範如何使用 FillGradient2
類別的 CDrawingManager
方法。 此代碼段是新控件範例的一部分。
// CRect rect
// CDC* pDC
CDrawingManager dm(*pDC);
// The last parameter is the angle that specifies the direction of the color gradient.
dm.FillGradient2(rect, RGB(102, 200, 238), RGB(0, 129, 185), 45);
CDrawingManager::GrayRect
以指定的灰色填滿矩形。
BOOL GrayRect(
CRect rect,
int nPercentage = -1,
COLORREF clrTransparent = (COLORREF)-1,
COLORREF clrDisabled = (COLORREF)-1);
參數
rect
[in]要填滿的矩形區域。
nPercentage
[in]您想要在矩形中的灰色百分比。
clrTransparent
[in]透明色彩。
clrDisabled
[in]如果 nPercentage 設定為 -1,則這個方法用於去飽和的色彩。
傳回值
如果方法成功,則為TRUE;否則為 FALSE。
備註
對於參數 nPercentage,較低的值表示較深的色彩。
nPercentage 的最大值為 200。 大於 200 的值不會變更矩形的外觀。 如果值為 -1,這個方法會使用 clrDisabled 來限制矩形的飽和度。
CDrawingManager::HighlightRect
反白顯示矩形區域。
BOOL HighlightRect(
CRect rect,
int nPercentage = -1,
COLORREF clrTransparent = (COLORREF)-1,
int nTolerance = 0,
COLORREF clrBlend = (COLORREF)-1);
參數
rect
[in]要反白顯示的矩形區域。
nPercentage
[in]指出反白顯示應有多透明百分比。
clrTransparent
[in]透明色彩。
nTolerance
[in]介於 0 到 255 之間的整數,表示色彩容錯。
clrBlend
[in]混合的基底色彩。
傳回值
如果方法成功,則為TRUE;否則為 FALSE。
備註
如果 nPercentage 介於 0 到 99 之間, HighlightRect
請使用 Alpha 混合演算法。 如需Alpha混合的詳細資訊,請參閱 Alpha混合線條和填滿。 如果 nPercentage 是 -1,這個方法會使用預設醒目提示層級。 如果 nPercentage 為 100,這個方法不會執行任何動作並傳回 TRUE。
方法會使用參數 nTolerance 來判斷是否要反白顯示矩形區域。 若要反白顯示矩形,應用程式的背景色彩與 clrTransparent 之間的差異必須小於 nTolerance 的每個色彩元件(紅色、綠色和藍色)。
CDrawingManager::HLStoRGB_ONE
將色彩從 HLS 表示轉換成 RGB 表示法。
static COLORREF __stdcall HLStoRGB_ONE(
double H,
double L,
double S);
參數
H
[in]介於 0 到 1 之間的數位,代表色彩的色調。
L
[in]介於 0 和 1 之間的數位,表示色彩的亮度。
S
[in]介於 0 到 1 之間的數位,表示色彩的飽和度。
傳回值
提供的 HLS 色彩 RGB 表示法。
備註
色彩可以表示為 HSV(色調、飽和度和值)、HSL(色調、飽和度和亮度),或 RGB(紅色、綠色和藍色)。 如需不同色彩表示法的詳細資訊,請參閱 Color。
此方法和 CDrawingManager::HLStoRGB_TWO
方法會執行相同的作業,但需要 H 參數的不同值。 在此方法中, H 是圓形的百分比。 在方法中 CDrawingManager::HLStoRGB_TWO
, H 是介於 0 到 360 之間的度值,這兩者都代表紅色。 例如,使用 HLStoRGB_ONE
時,H 的值為 0.25 相當於 90 的值。HLStoRGB_TWO
CDrawingManager::HLStoRGB_TWO
將色彩從 HLS 表示轉換成 RGB 表示法。
static COLORREF __stdcall HLStoRGB_TWO(
double H,
double L,
double S);
參數
H
[in]介於 0 到 360 之間的數位,代表色彩的色調。
L
[in]介於 0 和 1 之間的數位,表示色彩的亮度。
S
[in]介於 0 到 1 之間的數位,表示色彩的飽和度。
傳回值
提供的 HLS 色彩 RGB 表示法。
備註
色彩可以表示為 HSV(色調、飽和度和值)、HSL(色調、飽和度和亮度),或 RGB(紅色、綠色和藍色)。 如需不同色彩表示法的詳細資訊,請參閱 Color。
此方法和 CDrawingManager::HLStoRGB_ONE 方法會執行相同的作業,但需要 H 參數的不同值。 在此方法中, H 是介於 0 到 360 之間的度值,這兩者都代表紅色。 在 CDrawingManager::HLStoRGB_ONE 方法中, H 是圓形的百分比。 例如,使用 HLStoRGB_ONE
時,H 的值為 0.25 相當於 90 的值。HLStoRGB_TWO
CDrawingManager::HSVtoRGB
將色彩從 HSV 表示轉換成 RGB 表示法。
static COLORREF __stdcall HSVtoRGB(
double H,
double S,
double V);
參數
H
[in]介於 0 到 360 之間的數位,表示色彩的色調。
S
[in]介於 0 到 1 之間的數位,表示色彩的飽和度。
V
[in]介於 0 到 1 之間的數位,表示色彩的值。
傳回值
提供的 HSV 色彩 RGB 表示法。
備註
色彩可以表示為 HSV(色調、飽和度和值)、HSL(色調、飽和度和亮度),或 RGB(紅色、綠色和藍色)。 如需不同色彩表示法的詳細資訊,請參閱 Color。
CDrawingManager::HuetoRGB
將色調值轉換為紅色、綠色或藍色元件。
static double __stdcall HuetoRGB(
double m1,
double m2,
double h);
static BYTE __stdcall HueToRGB(
float rm1,
float rm2,
float rh);
參數
m1
[in]請參閱。
m2
[in]請參閱。
小時
[in]請參閱。
rm1
[in]請參閱。
rm2
[in]請參閱。
rh
[in]請參閱。
傳回值
所提供色調的個別紅色、綠色或藍色元件。
備註
此方法是協助程式方法, CDrawingManager
類別會用來計算 HSV 或 HSL 表示法中色彩的個別紅色、綠色和藍色元件。 這個方法不是設計成由程式設計人員直接呼叫。 輸入參數是相依於轉換演算法的值。
若要將 HSV 或 HSL 色彩轉換成 RGB 表示法,請呼叫下列其中一種方法:
CDrawingManager::MirrorRect
翻轉矩形區域。
void MirrorRect(
CRect rect,
BOOL bHorz = TRUE);
參數
rect
[in]要翻轉的區域周框。
bHorz
[in]布爾參數,指出矩形會水準或垂直翻轉。
備註
這個方法可以翻轉 類別所 CDrawingManager
擁有之裝置內容的任何區域。 如果 bHorz 設定為 TRUE,這個方法會水準翻轉區域。 否則,它會垂直翻轉區域。
CDrawingManager::P ixelAlpha
計算半透明像素的最終色彩。
static COLORREF __stdcall PixelAlpha(
COLORREF srcPixel,
int percent);
static COLORREF __stdcall PixelAlpha(
COLORREF srcPixel,
double percentR,
double percentG,
double percentB);
static COLORREF __stdcall PixelAlpha(
COLORREF srcPixel,
COLORREF dstPixel,
int percent);
參數
srcPixel
[in]圖元的初始色彩。
百分之
[in]介於 0 到 100 之間的數位,表示透明度的百分比。 值為 100 表示初始色彩完全透明。
percentR
[in]介於 0 到 100 之間的數位,表示紅色元件的透明度百分比。
percentG
[in]介於 0 到 100 之間的數位,代表綠色元件的透明度百分比。
percentB
[in]介於 0 到 100 之間的數位,表示藍色元件的透明度百分比。
dstPixel
[in]圖元的基底色彩。
傳回值
半透明像素的最終色彩。
備註
這是著色半透明位圖的協助程序類別,並非設計為直接由程式設計人員呼叫。
當您使用具有 dstPixel 的方法版本時,最終色彩是 dstPixel 和 srcPixel 的組合。 srcPixel 色彩是 dstPixel 基底色彩的部分透明色彩。
CDrawingManager::P repareShadowMask
建立可用來做為陰影的點陣圖。
static HBITMAP __stdcall PrepareShadowMask (
int nDepth,
COLORREF clrBase,
int iMinBrightness = 0,
int iMaxBrightness = 100);
參數
nDepth
[in]陰影的寬度和高度。
clrBase
[in]陰影的色彩。
iMinBrightness
[in]陰影的最小亮度。
iMaxBrightness
[in]陰影的最大亮度。
傳回值
如果這個方法成功,則為所建立位圖的句柄;否則為 NULL。
備註
如果 nDepth 設定為 0,這個方法會結束並傳回 NULL。 如果 nDepth 小於 3,陰影的寬度和高度會設定為 3 圖元。
CDrawingManager::RGBtoHSL
將色彩從紅色、綠色和藍色 (RGB) 表示轉換為色調、飽和度和光度 (HSL) 表示法。
static void __stdcall RGBtoHSL(
COLORREF rgb,
double* H,
double* S,
double* L);
參數
rgb
[in]RGB 值中的色彩。
H
[out]方法儲存色彩色調之雙精度浮點的指標。
S
[out]方法儲存色彩飽和度之雙精度浮點的指標。
L
[out]雙精度浮點的指標,方法會儲存色彩的光線。
備註
色彩可以表示為 HSV(色調、飽和度和值)、HSL(色調、飽和度和亮度),或 RGB(紅色、綠色和藍色)。 如需不同色彩表示法的詳細資訊,請參閱 Color。
H 的傳回值會以介於 0 到 1 之間的分數表示,其中 0 和 1 都代表紅色。 S 和 L 的傳回值為介於 0 到 1 之間的數位。
CDrawingManager::RGBtoHSV
將色彩從 RGB 表示轉換為 HSV 表示法。
static void __stdcall RGBtoHSV(
COLORREF rgb,
double* H,
double* S,
double* V);
參數
rgb
[in]要以 RGB 表示法轉換的色彩。
H
[out]雙精度浮點的指標,這個方法會儲存色彩產生的色調。
S
[out]這個方法會儲存色彩之結果飽和度的雙精度浮點數。
V
[out]這個方法會儲存色彩結果值的雙精度浮點數。
備註
色彩可以表示為 HSV(色調、飽和度和值)、HSL(色調、飽和度和亮度),或 RGB(紅色、綠色和藍色)。 如需不同色彩表示法的詳細資訊,請參閱 Color。
H 傳回的值是介於 0 到 360 之間的數位,其中 0 和 360 都表示紅色。 S 和 V 的傳回值是介於 0 到 1 之間的數位。
CDrawingManager::SetAlphaPixel
將點陣圖中的透明圖元著色。
static void __stdcall SetAlphaPixel(
COLORREF* pBits,
CRect rect,
int x,
int y,
int percent,
int iShadowSize,
COLORREF clrBase = (COLORREF)-1,
BOOL bIsRight = TRUE);
參數
pBits
[in]點陣圖位值的指標。
rect
[in]應用程式中的矩形區域。 繪圖管理員在下方和右側繪製陰影。
x
[in]要色彩之像素的水準座標。
y
[in]要色彩之像素的垂直座標。
百分之
[in]透明度的百分比。
iShadowSize
[in]陰影的寬度和高度。
clrBase
[in]陰影的色彩。
bIsRight
[in]布爾值參數,指出要色彩的圖元。 如需詳細資訊,請參閱<備註>一節。
備註
此方法是 CDrawingManager::D rawShadow 方法所使用的協助程式方法。 如果您要繪製陰影,建議您改為呼叫 CDrawingManager::DrawShadow
。
如果 bIsRight 設定為 TRUE,則從矩形右邊緣測量 x 像素到色彩的圖元。 如果是 FALSE,則從矩形左邊緣測量圖元到色彩的圖元。
CDrawingManager::SetPixel
將點陣圖中的單一像素變更為指定的色彩。
static void __stdcall SetPixel(
COLORREF* pBits,
int cx,
int cy,
int x,
int y,
COLORREF color);
參數
pBits
[in]點陣圖位值的指標。
cx
[in]位圖的總寬度。
cy
[in]位圖的總高度。
x
[in]要變更之點陣圖中像素的 X 座標。
y
[in]要變更之點陣圖中圖元的 Y 座標。
color
[in]所提供座標所識別圖元的新色彩。
CDrawingManager::SmartMixColors
根據加權比例結合兩種色彩。
static COLORREF __stdcall SmartMixColors(
COLORREF color1,
COLORREF color2,
double dblLumRatio = 1.,
int k1 = 1,
int k2 = 1);
參數
color1
[in]要混合的第一個色彩。
color2
[in]要混合的第二個色彩。
dblLumRatio
[in]新色彩亮度的比例。 SmartMixColors
在判斷最終色彩之前,將混合色彩的亮度乘以這個比例。
k1
[in]第一個色彩的加權比例。
k2
[in]第二個色彩的加權比例。
傳回值
代表所提供色彩加權混合的色彩。
備註
如果 k1 或 k2 小於零,這個方法就會失敗併發生錯誤。 如果這兩個參數都設定為 0,方法會傳 RGB(0, 0, 0)
回 。
加權比率的計算公式如下:(color1 * k1 + color2 * k2)/(k1 + k2)。 判斷加權比例之後,方法會計算混合色彩的亮度。 然後,它會乘以 dblLumRatio 的亮度。 如果值大於 1.0,方法會將混合色彩的亮度設定為新的值。 否則,亮度會設定為1.0。
CDrawingManager::D rawRotated
將指定矩形內的來源DC內容旋轉90度。
void DrawRotated(
CRect rectDest,
CDC& dcSrc,
BOOL bClockWise);
參數
rectDest
目的地矩形。
dcSrc
來源裝置內容。
bClockWise
TRUE 表示旋轉 +90 度;FALSE 表示旋轉 -90 度。