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.