WinPro logo. Перейти на сайт www.winpro.narod.ru

Пример создания курсора



В следующем примере загружает два курсора. Один стандартный в виде песочных часов, другой загружается из ресурсной части исполняемого файла.
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 маскаОтображение
00черный
01белый
10цвет экрана
11обратить цвет экрана

Помните о том, что курсоры созданные при помощи функций CreateIconIndirect или CopyIcon должны быть уничтожены функцией DestroyCursor.

Hosted by uCoz