枚举颜色

【勇芳软件工作室】汉化HomePreviousNext

您可以通过检索设备的颜色数量和枚举实心笔的颜色来确定设备支持多少种颜色,以及这些颜色。要检索颜色数量,请使用带有NUMCOLORS值的GetDeviceCaps功能。要枚举固体笔,请使用EnumObjects函数和相应的回调函数,以接收有关每个笔的信息。

// GetTheColors - 返回纯色的计数和颜色值
//返回包含颜色的数组的地址
// hdc - 设备上下文的句柄

COLORREF * GetTheColors(HDC HDC)
{
int cColors;
COLORREF *aColors;

//获取颜色数量。
cColors = GetDeviceCaps(hdcCurrent, NUMCOLORS);

//为数组分配空间
aColors = (COLORREF *)LocalAlloc(LPTR, sizeof(COLORREF) *
(cColors+1));

//将颜色计数保存在第一个元素中。
aColors[0] = (LONG)cColors;

//枚举所有笔,并在数组中保存纯色。
EnumObjects(hdc,OBJ_PEN,(GOBJENUMPROC)MyEnumProc,(LONG)aColors);

//刷新颜色数。
aColors[0] = (LONG)cColors;

return aColors;
}

INT MyEnumProc(LPVOID LP,LPBYTE LPB)
{
LPLOGPEN lopn;
COLORREF *aColors;
int iColor;

lopn = (LPLOGPEN)lp;
aColors = (COLORREF *)lpb;

if (lopn->lopnStyle==PS_SOLID) {
//检查颜色太多
if ((iColor = (int)aColors[0]) <= 0)
return 0;
aColors[iColor] = lopn->lopnColor;
aColors[0]--;
}
return 1;
}