색 열거
디바이스의 색 수를 검색하고 단색 펜의 색을 열거하여 디바이스에서 지원하는 색 수와 해당 색을 확인할 수 있습니다. 색 수를 검색하려면 NUMCOLORS 값과 함께 GetDeviceCaps 함수를 사용합니다. 단색 펜을 열거하려면 EnumObjects 함수와 각 펜에 대한 정보를 수신하는 해당 콜백 함수를 사용합니다.
// GetTheColors - returns the count and color values of solid colors
// Returns a pointer to the array containing colors
// hdc - handle to device context
COLORREF *GetTheColors(HDC hdc)
{
int cColors;
COLORREF *aColors;
// Get the number of colors.
cColors = GetDeviceCaps(hdc, NUMCOLORS);
// Allocate space for the array.
aColors = (COLORREF *)LocalAlloc(LPTR, sizeof(COLORREF) *
(cColors+1));
// Save the count of colors in first element.
aColors[0] = (LONG)cColors;
// Enumerate all pens and save solid colors in the array.
EnumObjects(hdc, OBJ_PEN, (GOBJENUMPROC)MyEnumProc, (LONG)aColors);
// Refresh the count of colors.
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)
{
// Check for too many colors.
if ((iColor = (int)aColors[0]) <= 0)
return 0;
aColors[iColor] = lopn->lopnColor;
aColors[0]--;
}
return 1;
}