Создание курсора
В примере ниже создаются два дескриптора курсора: один для стандартного курсора в виде песочных часов, а другой для пользовательского курсора, включенного как ресурс в файле определения ресурса приложения.
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; // дескриптор курсора // Маска 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 | Противоположный экранному |
Дополнительную информацию, см. в главе Точечные рисунки.
Перед закрытием, Вы должны использовать функцию DestroyCursor, чтобы уничтожить любые курсоры, которые Вы создавали с помощью CreateCursor. Курсоры, созданные другими функциями нет необходимости уничтожать.