Функция CreateCursor

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

Параметры

hInstance
Описатель приложения, вызывающего функцию
nXhotspot
Координата x активной точки курсора
nYhotspot
Координата y активной точки курсора
nWidth
Ширина курсора в пикселах
nHeight
Высота курсора в пикселах
lpANDbitPlane
Массив, содержащий маску AND
lpXORbitPlane
Массив, содержащий маску XOR

Пример

' Пример взят с сайта 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)

Смотри также

DestroyCursor

Категория

Курсор

Реклама