» Главная
eXcode.ru » Статьи » WinAPI
» Новости
» Опросы
» Файлы
» Журнал



Пользователей: 0
Гостей: 11





Функции работы с курсором




Сегодня я расскажу про API функции используемые при работе с курсором. В принципе, при написании офисных программ, они используются очень редко, но всё же мне иногда приходят вопросы связанные с курсором. Поэтому я решил описать их сегодня.

Сегодня ты узнаешь про:

* ClipCursor
* CopyCursor
* CreateCursor
* DestroyCursor
* GetClipCursor
* GetCursorPos
* SetCursorPos
* ShowCursor

ClipCursor

Функция ограничивает движение курсора определённой областью. Если позиция курсора находится за пределами указанной области, windows автоматически переносит его в ближайшую точку в этой области.

Существует в: Win NT, Win9x, Win32s.

Для С/С++ объявлена в winuser.h. Для Delphi в модуле windows.

Объявление:

Для С/С++


BOOL ClipCursor(
CONST RECT *lpRect // Указатель на структуру области
);


Для Delphi


function ClipCursor(lpRect: PRect): BOOL; stdcall;


Функции передаётся единственный параметр в виде указателя на структуру в которой содержатся координаты области. Если всё ничтяк, то функция возвращает не ноль.

Пример использования в Delphi: ClipCursor(Rect(10,15,50,55)). В этом случае курсор ограничивается прямоугольником с координатами Х1=10, Х2=15, Y1=50, Y2=55.

CopyCursor

Функция копирования курсора. Точнее сказать, возвращает копию переданного ей курсора.

Существует в: Win NT, Win9x, Win32s.

Для С/С++ объявлена в winuser.h. Самое интересное, что для Delphi я объявления не нашёл. Но оно должно выглядеть где-то так, как приведено ниже.

Объявление:

Для С/С++


HCURSOR CopyCursor(
HCURSOR pcur // Указатель на курсор
);


Для Delphi


function CopyCursor(pcur: HICON): HICON; stdcall;


Функции передаётся единственный параметр в виде указателя на существующий курсор. После выполнения она вернёт копию переданного курсора.

CreateCursor

Функция создаёт новый курсор.

Существует в: Win NT, Win9x, Win32s.

Для С/С++ объявлена в winuser.h. Для Delphi в модуле windows.

Объявление:

Для С/С++


HCURSOR CreateCursor(
HINSTANCE hInst, // Указатель на экземпляр приложения
int xHotSpot, // Горизонтальная позиция горячей точки
int yHotSpot, // Вертикальная позиция горячей точки
int nWidth, // Ширина курсора
int nHeight, // Высота курсора
CONST VOID *pvANDPlane,// Указатель на AND битовую маску
CONST VOID *pvXORPlane // Указатель на XOR битовую маску
);


Для Delphi


function CreateCursor(
hInst: HINST; // Указатель на экземпляр приложения
xHotSpot, // Горизонтальная позиция горячей точки
yHotSpot, // Вертикальная позиция горячей точки
nWidth, // Ширина курсора
nHeight: Integer; // Высота курсора
pvANDPlaneter, // Указатель на AND битовую маску
pvXORPlane: Pointer// Указатель на XOR битовую маску
): HCURSOR; stdcall;


Горячая точка - точка которой будет происходить касание. Например, у курсора в виде прицела горяцая точка должна быть в центре, а у стрелки на её конце.

DestroyCursor

Функция уничтожает курсор.

Существует в: Win NT, Win9x, Win32s.

Для С/С++ объявлена в winuser.h. Для Delphi в модуле windows.

Объявление:

Для С/С++


BOOL DestroyCursor(
HCURSOR hCursor // Указатель на уничтожаемый курсор
);


Для Delphi


function DestroyCursor(
hCursor: HICON // Указатель на уничтожаемый курсор
): BOOL; stdcall;


Функции передаётся единственный параметр в виде указателя на существующий курсор который надо уничтожить.

GetClipCursor

Функция возвращает облать в которой может перемещатся курсор. Эту область можно задать с помощью функции ClipCursor.

Существует в: Win NT, Win9x, Win32s.

Для С/С++ объявлена в winuser.h. Для Delphi в модуле windows.

Объявление:

Для С/С++


BOOL GetClipCursor(
LPRECT lpRect // Структура типа Rect
);


Для Delphi


function GetClipCursor(
var lpRect: TRect // Структура типа Rect
): BOOL; stdcall;


Функции передаётся единственный параметр в виде указателя на структуру типа Rect. В неё будет записан результат, то есть размеры области курсора. Если всё ничтяк, то функция вернёт не ноль.

GetCursorPos

Функция возвращает текущее положение курсора.

Существует в: Win NT, Win9x, Win32s.

Для С/С++ объявлена в winuser.h. Для Delphi в модуле windows.

Объявление:

Для С/С++


BOOL GetCursorPos(
LPPOINT lpPoint // Структура с позицией курсора.
);


Для Delphi


function GetCursorPos(
var lpPoint: TPoint // Структура с позицией курсора.
): BOOL; stdcall;


Функции передаётся единственный параметр в виде указателя на структуру типа Point. В неё будет записан результат, т.е. текущая позиция курсора. Пример на Delphi:


var
MousePos:TPoint;
begin
GetCursorPos(MousePos);
end;


После этого, чтобы получить Х позицию курсора, нужно прочитать MousePos.х, а для y позиции нужно прочитать MousePos.y.

Если всё ничтяк, то функция вернёт не ноль.

SetCursorPos

Функция устанавливает текущее положение курсора. С её помощью ты можешь переместить указатель курсора в любое место экрана.

Существует в: Win NT, Win9x, Win32s.

Для С/С++ объявлена в winuser.h. Для Delphi в модуле windows.

Объявление:

Для С/С++


BOOL SetCursorPos(
int X, // Горизонтальная позиция
int Y // Вертикальная позиция
);


Для Delphi


function SetCursorPos(
X, // Горизонтальная позиция
Y: Integer // Вертикальная позиция
): BOOL; stdcall;


Если всё ничтяк, то функция вернёт не ноль.

ShowCursor

Эта функция позволяет показывать и прятать курсор.

Существует в: Win NT, Win9x, Win32s.

Для С/С++ объявлена в winuser.h. Для Delphi в модуле windows.

Объявление:

Для С/С++


int ShowCursor(
BOOL bShow // cursor visibility flag
);


Для Delphi


function ShowCursor(
bShow: BOOL
): Integer; stdcall;


Функции передаётся только один параметр. Если он равен true, то курсор надо показать, а если равен false, то спрятать.

Если всё ничтяк, то функция вернёт не ноль.

Мне иногда приходят вопросы типа: "Как загрузить собственный курсор?". Признаюсь честно - не знаю. Я даже не могу знать всё. Я посмотрел помощь по Delphi и нашёл следующее:


const

crMyCursor = 5;
procedure TForm1.FormCreate(Sender: TObject);
begin
Screen.Cursors[crMyCursor] := LoadCursor(HInstance, ′NewCursor′);
Cursor := crMyCursor;
end;


Я попробовал воссоздать, но ничего не вышло. Разбиратся пока времени нет. Как только разбирусь, так сразу напишу статью.
К началу статьи





Добавил: LedWormДата публикации: 2005-09-19 21:23:31
Рейтинг статьи:3.33 [Голосов 6]Кол-во просмотров: 19555

Комментарии читателей

Всего комментариев: 2

2010-03-04 06:39:22
fenix
Сттатья хороша, функции полезны, но что если необходимо создавать курсоры в процессе работы программы, не используя файл ресурсов или внешние источники?
Я уже довольно долго ищу ответ, как динамически создать курсор((

2006-05-05 11:34:55
Arks
Не будете против, если я выскажу свои соображения по тому как загружать свой курсор? :)
Далее то как делать это с помощью WinAPI.
Во первых создаем курсор, либо в отдельном файле, либо в файле ресурсов.
Я использовал только курсоры из ресурсов.

Далее загружаем курсор:
HCURSOR c1=LoadCursor(hInstance,“NameOfCursorResource“), где
hInstance - ссылка на экземпляр приложения в файле ресурсов которого, находится курсор;
“NameOfCursorResource“ - строка, оканчивающаяся нулем (null-terminated string) - имя курсора в файле ресурсов

Теперь делаем курсор текущим:
SetCursor(c1);


Вот небольшой пример еще:

Файл ресурсов:
RESOURCE.H
#define ID_BLUEARROW 100

RESOURCE.RC
#include “RESOURCES.H“

// cursors definitions:

ID_BLUEARROW CURSOR bluearrow.cur

Теперь добавляем файл ресурсов (RESOURCE.RC) в проект.
В основной программе пишем:
#include “RESOURCE.H“
...
HCURSOR c1;
int WINAPI WinMain(HINSTANCE hinstance,
HINSTANCE hprevinstance,
LPSTR lpcmdline,
int ncmdshow)
{

...
// макрос MAKEINTRESOURECE создает строку по целочисленному значению (можно было сразу использовать строку, тогда заголовочный файл не нуже)
c1=LoadCursor(hinstance,MAKEINTRESOURCE(ID_BLUEARROW));
SetCursor(c1);
...
}
Ваше имя: *
Текст записи: *
Имя:

Пароль:



Регистрация

Какой поисковик лучше?
Yandex
41% (63)
Rambler
10% (15)
Google
42% (65)
Yahoo!
1% (1)
MSN
0% (0)
Mail.ru
2% (3)
Aport
1% (1)
AltaVista
1% (2)
Другой
2% (3)

Проголосовало: 153
Разговор программиста с женой. Программер:
- Ты слыхала, что через 10-15 лет станет возможным иметь секс с компьютером?
- А тебе-то что? Для тебя ничего не изменится...
Рейтинг: 8.2/10 (8)
Посмотреть все анекдоты