Screen Resolutions
Now that you have know how to retrieve the screen resolution you may want to know how you can retrieve the number of colours that is available to Windows. The options are: 16 colours, 4 bit; 256 colours,8 bit; 65536 colours, 16 bit; 16.7 million colours, either 24 bit or 32 bit.
GetDeviceCaps
This API function is important in retrieving the number of colours that is available to windows. It returns the information on a given index. The paramters are:
Hdc This is the handle of the device context that you find by using CreateIC.
nIndex This is the information that you want to retrieve from the display driver. The constants that are important in this section of the article are
Constant | Description |
BITSPIXEL | This is the number of bits that are available per pixel. This will return 4, 8, 16, 24 or 32. |
PLANES | This returns the number of colour planes |
CreateIC
This API function is used to create a device context, which allows easy access to device information. This CreateIC API function has these parameters:
LpDriverName This specifies the name of the driver that you want to retrieve information on. This is usually Display for information on the display driver.
LpDeviceName This should be left as null
LpOutput This should be left as null
LpInitData This should be left as null
DeleteDC
This simply deletes the device context that was created by using CreateIC. You must do this for every device context that you create in order to free up Windows resources.
To retrieve the number of colours that are available to Windows we first need to find out how many planes are available to windows, which will be either 1 or 4. Most machines will support 1 plane.
This function returns the number of colours and colour depth as a string:
Private Const BITSPIXEL = 12 Private Const PLANES = 14 Private Declare Function CreateIC Lib "gdi32" _ Alias "CreateICA" (ByVal lpDriverName As String, _ ByVal lpDeviceName As Any, ByVal lpOutput As Any, _ ByVal lpInitData As Any) As Long Private Declare Function GetDeviceCaps Lib "gdi32" _ (ByVal hdc As Long, ByVal nIndex As Long) As Long Private Declare Function DeleteDC Lib "gdi32" _ (ByVal hdc As Long) As Long Public Function GetAvailableColours() As String Dim lHdc As Long, lPlanes As Long, lBitsPerPixel As Integer ' Declare variables lHdc = CreateIC("DISPLAY", 0&, 0&, 0&) ' Create the device context for the display If lHdc = 0 Then ' An error has occurred and the function will exit GetAvailableColours = "Error" Exit Function End If lPlanes = GetDeviceCaps(lHdc, PLANES) ' Return info on number of planes lBitsPerPixel = GetDeviceCaps(lHdc, BITSPIXEL) ' Use display device ' context to return info on the ' number of pixels lHdc = DeleteDC(lHdc) ' Delete the device context Select Case lPlanes Case 1 ' 1 plane is available. This ' will be the same for most ' computer systems Select Case lBitsPerPixel ' Select the number of colours available Case 4: GetAvailableColours = _ "4 Bit, 16 Colours" Case 8: GetAvailableColours = _ "8 Bit, 256 Colours" Case 16: GetAvailableColours = _ "16 Bit, 65536 Colours" Case 24: GetAvailableColours = _ "24 Bit True Colour, 16.7 Million Colours" Case 32: GetAvailableColours = _ "32 Bit True Colour, 16.7 Million Colours" End Select Case 4 GetAvailableColours = "16 Bit, 65536 Colours" ' If there are 4 planes then the availible ' colours will be 16-bit Case Else GetAvailableColours = "Undetermined" ' The number of colours could not bee determined End Select End Function
The functions here are demonstrated in the GetColourDepth demo project.
Page 3 of 6
This article was originally published on November 20, 2002