创建光标

【勇芳软件工作室】汉化HomePreviousNext

以下示例创建两个光标句柄:一个用于标准沙漏光标,另一个用于在应用程序的资源定义文件中作为资源包含的自定义光标。

HINSTANCE hinst; //当前实例的句柄

HCURSOR hCurs1, hCurs2; //光标句柄

//创建一个标准的沙漏光标。

hCurs1 = LoadCursor(NULL, IDC_WAIT);

//根据资源创建自定义游标。

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

您应该将自定义游标实现为资源。不要在运行时创建光标,而是使用LoadCursorLoadCursorFromFileLoadImage函数来避免设备依赖,简化本地化,并使应用程序共享光标设计。

以下示例使用CreateCursor函数在运行时创建自定义光标。该示例包括在这里以说明系统如何解释光标位掩码。

HINSTANCE hinst; //当前实例的句柄

HCURSOR hCurs1, hCurs2; //光标句柄

HCURSOR hCurs3; //光标句柄

//尹光标和位掩码

BYTE ANDmaskCursor[] =

{

0xFF, 0xFC, 0x3F, 0xFF, //行1

0xFF, 0xC0, 0x1F, 0xFF, //行2

0xFF, 0x00, 0x3F, 0xFF, //行3

0xFE, 0x00, 0xFF, 0xFF, //行4

0xF7, 0x01, 0xFF, 0xFF, //行5

0xF0, 0x03, 0xFF, 0xFF, //第6行

0xF0, 0x03, 0xFF, 0xFF, //第7行

0xE0, 0x07, 0xFF, 0xFF, //行8

0xC0, 0x07, 0xFF, 0xFF, //第9行

0xC0, 0x0F, 0xFF, 0xFF, //行10

0x80, 0x0F, 0xFF, 0xFF, //第11行

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

0x80, 0x07, 0xFF, 0xFF, //第13行

0x00, 0x07, 0xFF, 0xFF, //第14行

0x00, 0x03, 0xFF, 0xFF, //第15行

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

0x00, 0x00, 0x7F, 0xFF, //第17行

0x00, 0x00, 0x1F, 0xFF, // 18行

0x00, 0x00, 0x0F, 0xFF, //行19

0x80, 0x00, 0x0F, 0xFF, //行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, //行25

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

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

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

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

0xFF, 0x00, 0xFF, 0xFF, //行30

0xFF, 0xC3, 0xFF, 0xFF, //行31

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

};

//尹光标XOR位掩码

BYTE XORmaskCursor[] =

{

0x00, 0x00, 0x00, 0x00, //行1

0x00, 0x03, 0xC0, 0x00, //行2

0x00, 0x3F, 0x00, 0x00, //行3

0x00, 0xFE, 0x00, 0x00, //行4

0x0E, 0xFC, 0x00, 0x00, //行5

0x07, 0xF8, 0x00, 0x00, //第6行

0x07, 0xF8, 0x00, 0x00, //第7行

0x0F, 0xF0, 0x00, 0x00, //行8

0x1F, 0xF0, 0x00, 0x00, //第9行

0x1F, 0xE0, 0x00, 0x00, //行10

0x3F, 0xE0, 0x00, 0x00, //第11行

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

0x3F, 0xF0, 0x00, 0x00, //第13行

0x7F, 0xF0, 0x00, 0x00, //第14行

0x7F, 0xF8, 0x00, 0x00, //第15行

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

0x7F, 0xFF, 0x00, 0x00, //第17行

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

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

0x3F, 0xFF, 0xE0, 0x00, //行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, //行25

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

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

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

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

0x00, 0x3C, 0x00, 0x00, //行30

0x00, 0x00, 0x00, 0x00, //行31

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

};

//在运行时创建一个自定义游标。

hCurs3 = CreateCursor( hinst, // app instance

19, //热点水平位置

2, //热点的垂直位置

32, //光标宽度

32, //光标高度

ANDmaskCursor, // AND bitmask

XORmaskCursor ); // XOR位掩码

要创建光标,CreateCursor将以下真值表应用于AND和XOR位掩码。

AND位掩码XOR位掩码显示
00黑色
01白色
10屏幕
11反向屏幕

有关详细信息,请参阅位图.

关闭之前,您必须使用DestroyCursor功能销毁您使用CreateCursor创建的任何游标。没有必要破坏其他功能创建的游标。