以下示例创建两个光标句柄:一个用于标准沙漏光标,另一个用于在应用程序的资源定义文件中作为资源包含的自定义光标。
HINSTANCE hinst; //当前实例的句柄
HCURSOR hCurs1, hCurs2; //光标句柄
//创建一个标准的沙漏光标。
hCurs1 = LoadCursor(NULL, IDC_WAIT);
//根据资源创建自定义游标。
hCurs2 = LoadCursor(hinst, MAKEINTRESOURCE(240));
您应该将自定义游标实现为资源。不要在运行时创建光标,而是使用LoadCursor,LoadCursorFromFile或LoadImage函数来避免设备依赖,简化本地化,并使应用程序共享光标设计。
以下示例使用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位掩码 | 显示 |
0 | 0 | 黑色 |
0 | 1 | 白色 |
1 | 0 | 屏幕 |
1 | 1 | 反向屏幕 |
有关详细信息,请参阅位图.
关闭之前,您必须使用DestroyCursor功能销毁您使用CreateCursor创建的任何游标。没有必要破坏其他功能创建的游标。