Познавательный блог  

Поиск по сайту

Гугль

Архивы

Использование функций SetCursorPos и GetDC на C++

Изучая в одно время интересные мне функции WinAPI я наткнулся на функции для работы с курсором. Вещь это была довольно занятная и интересная для меня. Поэтому и я начал пляски с бубном. Использовал функции SetCursorPos и GetDC.

Пример 1: Крутящийся курсор. В первом примере мы используем функцию SetCursorPos(x,y); И рисуем круг при помощи математических функций Синуса и Косинуса, переменная t—шаг.

#pragma hdrstop
#include <iostream.h>
#include <stdlib.h>
#include <math.h>
#pragma argsused
#include <windows.h>

int main(int argc, char* argv[])
{
float x,y,t;

do
{
t+=0.01;
x=sin(t)*300;
y=cos(t)*300;
SetCursorPos(x+512,y+384);
Sleep(1);
}while(1);
}

Пример 2: Вращение курсора с управлением мышью. В этом примере кроме вращения мышью можно кое-как управлять ;)

#pragma hdrstop
#include <iostream.h>
#include <stdlib.h>
#include <math.h>
#pragma argsused
#include <windows.h>

int main(int argc, char* argv[])
{
float x,y,t;
POINT c;

do
{
GetCursorPos(&c);
t+=0.1;
x=sin(t)*5;
y=cos(t)*5;
SetCursorPos(x+c.x,y+c.y);
Sleep(1);
}while(1);
}

Пример 3: Курсор рисующий Синусоиду. Это код стоит компилировать не как консольное а как полноценное win32-приложение. Ничего для вас нового и сложного. 1 функция и 2 оси координат.

#pragma hdrstop
#include <iostream.h>
#include <windows.h>
#include <math.h>
#pragma argsused
WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
float y,x,xe,ye,step=0.01;
for(x=0;x<10;x+=step)
{
xe = x * 100 + 0.5;
y = sin(x);
ye = 334 - (y * 220 + 0.5);
SetCursorPos(xe,ye);
Sleep(1);
}
}

Пример 4: Курсор отскакивающий от границ экрана. Несмотря на простоту, программа универсальна. Мы используем функции GetDeviceCaps и GetDC для определения настроек рабочего стола, а имено для определения разрешения экрана. И используя эти данные заставляем курсор отражаться. Угол падения равен углу отражения, поэтому при достижении крайней точки мы меняем + на - и курсор ровно отражается в другую сторону учитывая угол и направление.

#pragma hdrstop
#include <iostream.h>
#include <windows.h>
#pragma argsused

WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
int x=1;
int y=1;
int k1=1;
int k2=2;
//----------- Определяем разрешение экрана!-------
HDC hDCScreen = GetDC(NULL);
int Horres = GetDeviceCaps(hDCScreen, HORZRES);
int Vertres = GetDeviceCaps(hDCScreen, VERTRES);
ReleaseDC(NULL, hDCScreen);
//------------------------------------------------

do
{
x+=k1;
y+=k2;
if(x<0 || x>Horres) { k1=-k1;}
if(y<0 || y>Vertres) { k2=-k2; }
SetCursorPos(x,y);
Sleep(1);
}while(1);
}

Пример 5: Бешеный курсор. Генератор случайных чисел заставляет наш курсор метаться из угла в угол. Настройки экрана тоже используем.

#pragma hdrstop
#include <iostream.h>
#include <windows.h>
#pragma argsused
WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
float y,x;
randomize();
HDC hDCScreen = GetDC(NULL);
int Horres = GetDeviceCaps(hDCScreen, HORZRES);
int Vertres = GetDeviceCaps(hDCScreen, VERTRES);
ReleaseDC(NULL, hDCScreen);

do
{
x = random(Horres);
y = random(Vertres);
SetCursorPos(x,y);
Sleep(1);
}while(1);
}

Вот и всё.

Написать комментарий








Страницы

Свежие записи

Гугль

Мета

Счетчики


Rambler's Top100

Рубрики

  Разработка и дизайн — StvPromo.ru