Declare Function CreateCursor Lib "user32" (ByVal hInstance As Long, _ ByVal nXhotspot As Long, _ ByVal nYhotspot As Long, _ ByVal nWidth As Long, _ ByVal nHeight As Long, _ lpANDbitPlane As Any, _ lpXORbitPlane As Any) As Long
CreateCursor создает новый курсор. Его изображение формируется при помощи масок AND и XOR. Маски AND и XOR можно создать при помощи массива (См. пример). Функция также определяет активную точку курсора - точку, определяющую точную позицию курсора (например, на кончике стрелки). Рекомендуется использовать готовые курсоры, чем создавать на лету новый курсор. Также, создаваемый размер курсора должен поддерживаться системой (используйте GetSystemMetrics). Созданный этой функцией курсор уничтожается при помощи DestroyCursor.
В успешном случае функция возвращает описатель нового созданного курсора. В случае ошибки возвращается 0 (для получения кода ошибки используйте GetLastError
' Пример взят с сайта http://www.allapi.net ' Создадим 32x32 цветной курсор в форме китайского символа инь Dim hnewcursor As Long ' создаваемый курсор Dim holdcursor As Long ' описатель курсора по умолчанию Dim andbuffer As String, xorbuffer As String ' буферы для масок Dim andbits(0 To 127) As Byte ' хранит маску AND Dim xorbits(0 To 127) As Byte ' хранит маску XOR Dim c As Integer, retval As Long ' счетчик и возвращаемое значение ' К сожалению, VB не обеспечивает нормального способа загружать ' информацию в массив ' Для работы с масками AND и XOR мы помещаем шестнадцатиричные значения ' в строковый буфер и в цикле конвертируем их в числовые значения ' и загружаем их в массив andbuffer = "FFFC3FFF" & "FFC01FFF" & "FF003FFF" & "FE00FFFF" & _ "F701FFFF" & "F003FFFF" & "F003FFFF" & "E007FFFF" & _ "C007FFFF" & "C00FFFFF" & "800FFFFF" & "800FFFFF" & _ "8007FFFF" & "8007FFFF" & "0003FFFF" & "0000FFFF" & _ "00007FFF" & "00001FFF" & "00000FFF" & "80000FFF" & _ "800007FF" & "800007FF" & "C00007FF" & "C0000FFF" & _ "E0000FFF" & "F0001FFF" & "F0001FFF" & "F8003FFF" & _ "FE007FFF" & "FF00FFFF" & "FFC3FFFF" & "FFFFFFFF" xorbuffer = "00000000" & "0003C000" & "003F0000" & "00FE0000" & _ "0EFC0000" & "07F80000" & "07F80000" & "0FF00000" & _ "1FF00000" & "1FE00000" & "3FE00000" & "3FE00000" & _ "3FF00000" & "7FF00000" & "7FF80000" & "7FFC0000" & _ "7FFF0000" & "7FFF8000" & "7FFFE000" & "3FFFE000" & _ "3FC7F000" & "3F83F000" & "1F83F000" & "1F83E000" & _ "0FC7E000" & "07FFC000" & "07FFC000" & "01FF8000" & _ "00FF0000" & "003C0000" & "00000000" & "00000000" ' Загрузим в массив For c = 0 To 127 andbits(c) = Val("&H" & Mid(andbuffer, 2 * c + 1, 2)) xorbits(c) = Val("&H" & Mid(xorbuffer, 2 * c + 1, 2)) Next c ' Теперь создаем курсор! Активная точка в (5,5) hnewcursor = CreateCursor(App.hInstance, 5, 5, 32, 32, andbits(0), xorbits(0)) ' Установим новый курсор текущим на 10 секунд holdcursor = SetCursor(hnewcursor) Sleep 10000 retval = SetCursor(holdcursor) ' возвращаем старый курсор ' Уничтожаем созданный курсор retval = DestroyCursor(hnewcursor)