HINSTANCE hinst; // описатель текущего экземпляра процесса HCURSOR hCurs1, hCurs2; // описатели курсоров // Создание стандартного курсора. hCurs1 = LoadCursor(NULL, IDC_WAIT); // Создание курсора на основе ресурса. hCurs2 = LoadCursor(hinst, MAKEINTRESOURCE(240));
В следующем примере показана работа функции CreateCursor, которая позволяет создавать курсор в течение выполнения приложения.
HINSTANCE hinst; // описатель текущего экземпляра процесса
HCURSOR hCurs1, hCurs2; // описатели курсоров
HCURSOR hCurs3; // описатель курсора
// Маска AND курсора
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, // строка 12
0x80, 0x07, 0xFF, 0xFF, // строка 13
0x00, 0x07, 0xFF, 0xFF, // строка 14
0x00, 0x03, 0xFF, 0xFF, // строка 15
0x00, 0x00, 0xFF, 0xFF, // строка 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, // строка 21
0x80, 0x00, 0x07, 0xFF, // строка 22
0xC0, 0x00, 0x07, 0xFF, // строка 23
0xC0, 0x00, 0x0F, 0xFF, // строка 24
0xE0, 0x00, 0x0F, 0xFF, // строка 25
0xF0, 0x00, 0x1F, 0xFF, // строка 26
0xF0, 0x00, 0x1F, 0xFF, // строка 27
0xF8, 0x00, 0x3F, 0xFF, // строка 28
0xFE, 0x00, 0x7F, 0xFF, // строка 29
0xFF, 0x00, 0xFF, 0xFF, // строка 30
0xFF, 0xC3, 0xFF, 0xFF, // строка 31
0xFF, 0xFF, 0xFF, 0xFF // строка 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, // строка 12
0x3F, 0xF0, 0x00, 0x00, // строка 13
0x7F, 0xF0, 0x00, 0x00, // строка 14
0x7F, 0xF8, 0x00, 0x00, // строка 15
0x7F, 0xFC, 0x00, 0x00, // строка 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, // строка 21
0x3F, 0x83, 0xF0, 0x00, // строка 22
0x1F, 0x83, 0xF0, 0x00, // строка 23
0x1F, 0x83, 0xE0, 0x00, // строка 24
0x0F, 0xC7, 0xE0, 0x00, // строка 25
0x07, 0xFF, 0xC0, 0x00, // строка 26
0x07, 0xFF, 0xC0, 0x00, // строка 27
0x01, 0xFF, 0x80, 0x00, // строка 28
0x00, 0xFF, 0x00, 0x00, // строка 29
0x00, 0x3C, 0x00, 0x00, // строка 30
0x00, 0x00, 0x00, 0x00, // строка 31
0x00, 0x00, 0x00, 0x00 // строка 32
};
// Создание курсора во время выполнения.
hCurs3 = CreateCursor( hinst, // описаель приложения
19, // горизонтальная позиция горячей точки
2, // вертикальная позиция горячей точки
32, // ширина курсора
32, // высота курсора
ANDmaskCursor, // AND маска
XORmaskCursor ); // XOR маска
При создании курсора функция CreateCursor применяет следующую таблицу истинности для масок AND и XOR:
| AND маска | XOR маска | Отображение |
|---|---|---|
| 0 | 0 | черный |
| 0 | 1 | белый |
| 1 | 0 | цвет экрана |
| 1 | 1 | обратить цвет экрана |
Помните о том, что курсоры созданные при помощи функций CreateIconIndirect или CopyIcon должны быть уничтожены функцией DestroyCursor.