We are discussing some of the Win32 API to retrive some system paramerts and settings. We get verious Windows settings using GetSystemMetrics() function. GetDeviceCaps, GetTextMetrics, GetTextFace are the functions to retrieve the settings from screen and printer devices. Lets discuss these functions and see the utilities of these functions with one practical example for each.

GetDeviceCaps function

The GetDeviceCaps function retrieves device-specific capabilities and information for the specified GDI device.

Syntax

int GetDeviceCaps(
  HDC hdc,
  int nIndex
);

Input & Output

Handle to the device context and the capability index number (see MSDN for list of capabilities). It returns the value of the corresponding capability.

GetDeviceCaps example

#include <windows.h>
#include <commdlg.h>
int main(int argc, char* argv[])
{
  int nWidth, nHeight;
  PRINTDLG pdlg;

  /* Initialize the PRINTDLG structure. */
  memset( &pdlg, 0, sizeof( PRINTDLG ) );
  pdlg.lStructSize = sizeof( PRINTDLG );
  /* Set the flag to return printer DC. */
  pdlg.Flags =  PD_RETURNDC;

  /* Invoke the printer dialog box. */
  PrintDlg( &pdlg );

  /* hDC member of the PRINTDLG structure contains the printer DC. */
  /* Page width in px */
  nWidth = GetDeviceCaps(pdlg.hDC, HORZRES);
  
  /* Page height in px */
  nHeight = GetDeviceCaps(pdlg.hDC, VERTRES);

  printf("Printer page dimension is %dx%d px\n", nWidth, nHeight);
  return 0;
}

GetDeviceCaps output

Printer page dimension is 5100x6600 px
Press any key to continue

GetSystemMetrics function

Retrieves the specified system metric or system configuration setting.

Syntax

int WINAPI GetSystemMetrics(
  int nIndex
);

Input & Output

The system metric index which is required (see MSDN for list of values). It returns the value of the corresponding system parameter.

GetSystemMetrics example

#include <windows.h>

int main(int argc, char* argv[])
{
  int nWidth, nHeight;
    nWidth = GetSystemMetrics(SM_CXSCREEN);
  nHeight = GetSystemMetrics(SM_CYSCREEN);
  printf("Primary desktop screen is %dx%d px\n", nWidth, nHeight);
  return 0;
}

GetSystemMetrics output

Primary desktop screen is 1366x768 px
Press any key to continue

GetTextMetrics function

The GetTextMetrics function fills the specified buffer with the metrics for the currently selected font.

Syntax

BOOL GetTextMetrics(
   HDC          hdc,
   LPTEXTMETRIC lptm
);

GetTextFace function

The GetTextFace function retrieves the typeface name of the font that is selected into the specified device context. Lenght of the string buffer and buffer pointer for retrieving the font name are given as the input.

Syntax

int GetTextFace(
    HDC    hdc,
    int    nCount,
    LPTSTR lpFaceName
);

GetTextMetrics GetTextFace example

#include <windows.h>
#include <commdlg.h>
int main(int argc, char* argv[])
{
  char szFontName[100] = { 0};
  TEXTMETRIC tm;
  HWND  hWnd;
  HDC hDc;
  
  /* Get desktop handle */
  hWnd = GetDesktopWindow();
  
  /* Get handle to DC */
  hDc= GetDC(hWnd);
  
  /* Get Desktop font name */
  GetTextFace(hDc, 100, szFontName);
  
  /* Get Desktop text attributes */
  GetTextMetrics(hDc, &tm);

  printf("Desktop font name is \"%s\" font size = %d\n", szFontName,tm.tmHeight);
  return 0;
}

Output

Desktop font name is "System" font size = 16
Press any key to continue

About our authors: Team EQA

Further readings

Where is WinMain() function in MFC application ?

MFC hides WinMain in its framework and includes source file on WinMain(). This explains how framework calls global CWinApp::Initinstance() from entry WinMain.

What is the utility of CWinApp class?

This is constructed during global C++ objects are constructed and is already available when Windows calls the WinMain function, which is supplied by the ...

Basic steps in Win32 GUI Application with source code.

Define a custom Window class structure, Register the class name, CreateWindow, Show windows and write message get and dispatch loop statements. Define the Window CallBack procedure and write the handlers.

What is a Window CallBack procedure and what is its utility?

DispatchMessage() is a API which indirectly triggers the Window CallBack procedure. Message structure members from this function are passed to the CallBack procedure. CallBack procedure should implement event handlers depending on the need of the application.

What are LPARAM and WPARAM in window proc function?

LPARAM and WPARAM are the two parameters in Window CallBack procedure. They signifies parameters of various events. They are used in handing individual events.

What are the basic steps of a typical MFC based application?

We need to write WinMain and need to follow all these in a Win32 application. However we need not to write much if we are writing an application with MFC ...

#