Creating a Cursor

The following example creates two cursor handles: one for the standard hourglass cursor and one for a custom cursor included as a resource in the application's resource-definition file.

HINSTANCE hinst; // handle of current instance

HCURSOR hCurs1, hCurs2; // cursor handles

// Create a standard hourglass cursor.

hCurs1 = LoadCursor(NULL, IDC_WAIT);

// Create a custom cursor based on a resource.

hCurs2 = LoadCursor(hinst, MAKEINTRESOURCE(240));

You should implement custom cursors as resources. Rather than create the cursors at run time, use the LoadCursor, LoadCursorFromFile, or LoadImage function to avoid device dependence, to simplify localization, and to enable applications to share cursor designs.

The following example uses the CreateCursor function to create a custom cursor at run time. The example is included here to illustrate how the system interprets cursor bitmasks.

HINSTANCE hinst; // handle of current instance

HCURSOR hCurs1, hCurs2; // cursor handles

HCURSOR hCurs3; // cursor handle

// Yin cursor AND bitmask

BYTE ANDmaskCursor[] =

{

0xFF, 0xFC, 0x3F, 0xFF, // line 1

0xFF, 0xC0, 0x1F, 0xFF, // line 2

0xFF, 0x00, 0x3F, 0xFF, // line 3

0xFE, 0x00, 0xFF, 0xFF, // line 4

0xF7, 0x01, 0xFF, 0xFF, // line 5

0xF0, 0x03, 0xFF, 0xFF, // line 6

0xF0, 0x03, 0xFF, 0xFF, // line 7

0xE0, 0x07, 0xFF, 0xFF, // line 8

0xC0, 0x07, 0xFF, 0xFF, // line 9

0xC0, 0x0F, 0xFF, 0xFF, // line 10

0x80, 0x0F, 0xFF, 0xFF, // line 11

0x80, 0x0F, 0xFF, 0xFF, // line 12

0x80, 0x07, 0xFF, 0xFF, // line 13

0x00, 0x07, 0xFF, 0xFF, // line 14

0x00, 0x03, 0xFF, 0xFF, // line 15

0x00, 0x00, 0xFF, 0xFF, // line 16

0x00, 0x00, 0x7F, 0xFF, // line 17

0x00, 0x00, 0x1F, 0xFF, // line 18

0x00, 0x00, 0x0F, 0xFF, // line 19

0x80, 0x00, 0x0F, 0xFF, // line 20

0x80, 0x00, 0x07, 0xFF, // line 21

0x80, 0x00, 0x07, 0xFF, // line 22

0xC0, 0x00, 0x07, 0xFF, // line 23

0xC0, 0x00, 0x0F, 0xFF, // line 24

0xE0, 0x00, 0x0F, 0xFF, // line 25

0xF0, 0x00, 0x1F, 0xFF, // line 26

0xF0, 0x00, 0x1F, 0xFF, // line 27

0xF8, 0x00, 0x3F, 0xFF, // line 28

0xFE, 0x00, 0x7F, 0xFF, // line 29

0xFF, 0x00, 0xFF, 0xFF, // line 30

0xFF, 0xC3, 0xFF, 0xFF, // line 31

0xFF, 0xFF, 0xFF, 0xFF // line 32

};

// Yin cursor XOR bitmask

BYTE XORmaskCursor[] =

{

0x00, 0x00, 0x00, 0x00, // line 1

0x00, 0x03, 0xC0, 0x00, // line 2

0x00, 0x3F, 0x00, 0x00, // line 3

0x00, 0xFE, 0x00, 0x00, // line 4

0x0E, 0xFC, 0x00, 0x00, // line 5

0x07, 0xF8, 0x00, 0x00, // line 6

0x07, 0xF8, 0x00, 0x00, // line 7

0x0F, 0xF0, 0x00, 0x00, // line 8

0x1F, 0xF0, 0x00, 0x00, // line 9

0x1F, 0xE0, 0x00, 0x00, // line 10

0x3F, 0xE0, 0x00, 0x00, // line 11

0x3F, 0xE0, 0x00, 0x00, // line 12

0x3F, 0xF0, 0x00, 0x00, // line 13

0x7F, 0xF0, 0x00, 0x00, // line 14

0x7F, 0xF8, 0x00, 0x00, // line 15

0x7F, 0xFC, 0x00, 0x00, // line 16

0x7F, 0xFF, 0x00, 0x00, // line 17

0x7F, 0xFF, 0x80, 0x00, // line 18

0x7F, 0xFF, 0xE0, 0x00, // line 19

0x3F, 0xFF, 0xE0, 0x00, // line 20

0x3F, 0xC7, 0xF0, 0x00, // line 21

0x3F, 0x83, 0xF0, 0x00, // line 22

0x1F, 0x83, 0xF0, 0x00, // line 23

0x1F, 0x83, 0xE0, 0x00, // line 24

0x0F, 0xC7, 0xE0, 0x00, // line 25

0x07, 0xFF, 0xC0, 0x00, // line 26

0x07, 0xFF, 0xC0, 0x00, // line 27

0x01, 0xFF, 0x80, 0x00, // line 28

0x00, 0xFF, 0x00, 0x00, // line 29

0x00, 0x3C, 0x00, 0x00, // line 30

0x00, 0x00, 0x00, 0x00, // line 31

0x00, 0x00, 0x00, 0x00 // line 32

};

// Create a custom cursor at run time.

hCurs3 = CreateCursor( hinst, // app instance

19, // horizontal position of hot spot

2, // vertical position of hot spot

32, // cursor width

32, // cursor height

ANDmaskCursor, // AND bitmask

XORmaskCursor ); // XOR bitmask

To create the cursor, CreateCursor applies the following truth table to the AND and XOR bitmasks.

AND bitmask
XOR bitmask
Display
0
0
Black
0

White

0
Screen


Reverse screen

For more information, see Bitmaps.

Before closing, you must use the DestroyCursor function to destroy any cursors you created with CreateCursor. It is not necessary to destroy cursors created by other functions.

Software for developers
Delphi Components
.Net Components
Software for Android Developers
More information resources
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
Databases for Amazon shops developers
Amazon Categories Database
Browse Nodes Database