CreateCursor function (winuser.h)

Creates a monochrome cursor having the specified size, bit patterns, and hot spot.

To create a colored cursor at run time you can use the CreateIconIndirect function, which creates a cursor based on the content of an ICONINFO structure.


HCURSOR CreateCursor(
  [in, optional] HINSTANCE  hInst,
  [in]           int        xHotSpot,
  [in]           int        yHotSpot,
  [in]           int        nWidth,
  [in]           int        nHeight,
  [in]           const VOID *pvANDPlane,
  [in]           const VOID *pvXORPlane


[in, optional] hInst


A handle to the current instance of the application creating the cursor.

[in] xHotSpot

Type: int

The horizontal position of the cursor's hot spot.

[in] yHotSpot

Type: int

The vertical position of the cursor's hot spot.

[in] nWidth

Type: int

The width of the cursor, in pixels.

[in] nHeight

Type: int

The height of the cursor, in pixels.

[in] pvANDPlane

Type: const VOID*

An array of bytes that contains the bit values for the AND mask of the cursor, as in a monochrome bitmap. See remarks.

[in] pvXORPlane

Type: const VOID*

An array of bytes that contains the bit values for the XOR mask of the cursor, as in a monochrome bitmap. See remarks.

Return value


If the function succeeds, the return value is a handle to the cursor.

If the function fails, the return value is NULL. To get extended error information, call GetLastError.


To determine the nominal size of a cursor, use the GetSystemMetrics function, specifying the SM_CXCURSOR or SM_CYCURSOR value. Also, you can use the DPI-aware version of this API, see (GetSystemMetricsForDpi)(/windows/win32/api/winuser/nf-winuser-getsystemmetricsfordpi). For more information see High DPI Desktop Application Development on Windows.

For more information about pvANDPlane and pvXORPlane parameters see description of lpBits parameter of CreateBitmap function.

CreateCursor applies the following truth table to the AND and XOR bitmasks:

AND bitmask XOR bitmask Display
0 0 Black
0 1 White
1 0 Screen
1 1 Reverse screen

Before closing, an application must call the DestroyCursor function to free any system resources associated with the cursor.

DPI Virtualization

This API does not participate in DPI virtualization. The output returned is in terms of physical coordinates, and is not affected by the DPI of the calling thread. Note that the cursor created may still be scaled to match the DPI of any given window it is drawn into.


For an example, see Creating a Cursor.


Requirement Value
Minimum supported client Windows 2000 Professional [desktop apps only]
Minimum supported server Windows 2000 Server [desktop apps only]
Target Platform Windows
Header winuser.h (include Windows.h)
Library User32.lib
DLL User32.dll

See also