Programming/Windows API
GetDeviceCaps함수는 지정된 Device Context의 여러 정보를 구하는 함수입니다.

Declare Function GetDeviceCaps Lib "gdi32" Alias "GetDeviceCaps" (ByVal hdc As Integer, ByVal nIndex As Integer) As Integer
▶VB.NET 선언

[DllImport("gdi32")]
public static extern int GetDeviceCaps(int hdc, int nIndex);
▶C# 선언

GetDeviceCaps함수는 첫번째 인수에서 정보를 구하고자할 Device Context를 지정하며 두번째 인수에서 어떠한 종류의 정보를 가져올지에 대한 flag를 지정합니다.

이때 지정할 수 있는 flag의 종류는 다음과 같은 것들이 있습니다.

 상수  값  설명
 DRIVERVERSION  0  Device Driver Version
 TECHNOLOGY  2  Device Technology(*1)
 HORZSIZE  4  Device Display 넓이(Milli)
 VERTSIZE  6  Device Display 높이(Milli)
 HORZRES  8  Display 넓이(Pixel)
 VERTRES  10  Display 높이(Pixel)
 BITSPIXEL  12  Pixel당 Color Bit수
 PLANES  14  Color Plan
 NUMBRUSHES  16  사용 Brush 수
 NUMPENS  18  사용 Pen 수
 NUMFONTS  22  사용 Font 수
 NUMCOLORS  24  사용 Color 수
 PDEVICESIZE  26  예약공간
 CLIPCAPS  36  사각형 Clipping 가능 여부(*2)
 ASPECTX  40  Line 그리기시 Pixel의 상대적 넓이
 ASPECTY  42  Line 그리기시 Pixel의 상대적 높이
 ASPECTXY  44  Line 그리기시 Pixel의 상대적 대각선 크기
 LOGPIXELSX  88  Inch당 Pixel 수(넓이)
 LOGPIXELSY  90  Inch당 Pixel 수(높이)
 SIZEPALETTE  104  System Color 수
 NUMRESERVED  106  System 예약 Color 수
 COLORRES  108  Device 해상도(Pixel당 Bit)
 PHYSICALWIDTH  110  Print시 Page 넓이
 PHYSICALHEIGHT  111  Print시 Page 길이
 PHYSICALOFFSETX  112  Print시 좌측 여백
 PHYSICALOFFSETY  113  Print시 상단 여백
 SCALINGFACTORX  114  Print시 X축 Scale
 SCALINGFACTORY  115  Print시 Y축 Scale
 VREFRESH  116  주파수(초당 Hz)
 BLTALIGNMENT  119  다중 Pixel에서의 수평 Drawing 배열
 SHADEBLENDCAPS  45  Device Shading및 Branding(*3)

TECHNOLOGY 인수 지정시 반환값

 상수  값  설명
 DT_PLOTTER  0  Vector Plotter
 DT_RASDISPLAY  1  Raster Display
 DT_RASPRINTER  2  Raster Printer
 DT_RASCAMERA  3  Raster Camera
 DT_CHARSTREAM  4  Charactor Stream
 DT_METAFILE  5  Meta File
 DT_DISPFILE  6  Display File

CLIPCAPS 인수 지정시 반환값

 값  설명
 1  가능
 0  불가

SHADEBLENDCAPS 인수 지정시 반환값

 상수  값  설명
 SB_NONE  0  지원없음
 SB_CONST_ALPHA  1  Blendfunction 구조체 SourceConstantAlpha 요소
 SB_PIXEL_ALPHA  2  AlphaBlend에서 Pixel당 Alpha 조정
 SB_PREMULT_ALPHA  4  AlphaBlend에서 Pixel당 Premultiplied Alpha 요소
 SB_GRAD_RECT  10  GradientFill 사격형
 SB_GRAD_TRI  20  -

위 인수를 토대로 GetDeviceCaps함수를 이용해 Desktop화면의 Display넓이를 구하려면 다음과 같이 호출될 수 있습니다.

Const HORZSIZE As Integer = 8
GetDeviceCaps(GetDC(GetDesktopWindow()), HORZSIZE)
▶VB.NET 호출

const int HORZSIZE = 8;
GetDeviceCaps(GetDC(GetDesktopWindow()), HORZSIZE);
▶C# 호출
0 0