Шутки с мышкой
Мышка тоже может быть объектом насмешек. Например, можно заставить ее беспорядочно бегать по монитору или ограничить движение маленьким квадратом. А можно вообще остановить указатель в определенной точке, создав видимость его зависания. Как показывает практика, игры с мышкой производят на пользователя большее впечатление, особенно на начинающего, потому что он больше работает с ней, а не с клавиатурой.
Безумная мышка
Как сделать мышку безумной? Очень даже просто:
for (int i=0; i<20; i++)
{
SetCursorPos(rand()%640, rand()%480);
Sleep (100);
}
Летающие объекты
for (int i=0; i<20; i++)
{
POINT pt = {rand()%800, rand()%600};
SetCursorPos(pt.x, pt.y);
Sleep(100);
HWND hPointWnd = WindowFromPoint(pt);
SendMessage(hPointWnd, WM_LBUTTONDOWN, MK_LBUTTON,
MAKELONG(pt.x,pt.y));
SendMessage(hPointWnd, WM_LBUTTONUP, 0,
MAKELONG(pt.x,pt.y));
}
Можно сразу немного изменить пример:
for (int i =0; i <20; i ++)
{
// Устанавливаем случайную позицию курсора
POINT pt = {rand()%800, rand()%600};
SetCursorPos(pt.x, pt.y);
Sleep(100);
// Посылаем сообщение о нажатии кнопки мыши
HWND hPointWnd = WindowFromPoint(pt);
SendMessage(hPointWnd, WM_LBUTTONDOWN, MK_LBUTTON,
MAKELONG(pt.x,pt.y));
// Изменение позиции курсора
POINT pt1 = {rand()%800, rand()%600};
SetCursorPos(pt1.x, pt1.y);
SendMessage(hPointWnd, WM_MOUSEMOVE, 0,
MAKELONG(pt1.x, pt1.y));
// Отпускаем кнопку мышки
SendMessage(hPointWnd, WM_LBUTTONUP, 0,
MAKELONG(pt1.x, pt1.y));
}
Мышка в клетке
RECT r;
r.left=10;
r.top=10;
r.bottom=100;
r.right=100;
CiipCursor(&r);
Попробуйте выполнить следующий код:
RECT r;
r.left=0;
r.top=0;
r.bottom=1;
r.right=1;
CiipCursor(&r);
Изменчивый указатель
Есть такая интересная WinAPI-функция — SetSystemCursor. У нее есть два параметра:
- курсор, который надо изменить. Чтобы восстановить системный курсор, можно использовать фуцию GetCursor;
- вид курсора, который нужно установить. Здесь можно указать одно из следующих значений:
- OCR_NORMAL — стандартный курсор (по умолчанию);
- OCR_IBEAM — курсор, используемый для выделения текста;
- OCR_WAIT — большие песочные часы (ожидание);
- OCR_CROSS — фафическое выделение (крест);
- OCR_UP — стрелка вверх;
- OCR_SIZE — курсор изменения размера;
- OCR_ICON — значок;
- OCR_SIZENWSE или OCR_SIZENESW — курсор, используемый для растяги-вания объекта;
- OCR_SIZEWE — курсор для горизонтального изменения размера;
- OCR_SIZENS — курсор для вертикального изменения размера;
- OCR_SIZEALL — курсор для одновременного изменения размера по горизонтали и вертикали;
- OCR_SIZENO — интернациональный несимвольный курсор;
- OCR_APPSTARTING — маленькие песочные часы (загрузка приложения).
И сразу приведу небольшой пример изменения текущего курсора:
SetSystemCursor(GetCursor(), OCR_CROSS);
Этот код изменяет текущий курсор на крестик, который используется при графическом выделении.