Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 1
Регистрация: 16.06.2011
Сообщений: 9

Рисуем движение мыши на экране через WinAPI

09.01.2012, 03:08. Показов 4486. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Рисуем движение мыши на экране!
Помогите довести программу до ума:
Необходимо чтобы область, где можно рисовать ограничивалась запущенным черным окном, и если нажать любую клавишу, закрывалась.
Пока что реализовано рисование движения мыши, а условия и параметры заданы не правильно.

Необходимо указать правильные парметры:

C++
1
2
HWND hWnd = GetDesktopWindow(); // Идентификатор окна
HDC hdc = GetWindowDC(hWnd); // Контекст устройства
и задать необходимые условия рисования.

У меня пока не получилось это сделать...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include "stdafx.h"
#include <windows.h>
#include <conio.h>
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
 
    POINT cp; // Создаем экземпляр структуры, задающей точку на плоскости с помощью пары целых чисел
 
    HWND hWnd = GetDesktopWindow(); // Идентификатор окна
    HDC hdc = GetWindowDC(hWnd); // Контекст устройства       
 
    HPEN hPen = CreatePen( PS_SOLID, 3, RGB(128,128,128) );
    HPEN hOld = (HPEN)SelectObject( hdc, hPen );
  
RECT rcClient; // Прямоугольник рабочей области
POINT ptClientUL; // Верхний левый угол рабочей области
POINT ptClientLR; // Правый нижний угол рабочей области
    
if (GetSystemMetrics(SM_MOUSEPRESENT))
        printf("Press Key!");
 
    getch();
 
    
SetCapture(hWnd); // Захват ввода данных от мыши
 
// Получим экранные координаты рабочей области и преобразуем их в рабочие координаты
GetClientRect(hWnd, &rcClient); 
ptClientUL.x = rcClient.left; 
ptClientUL.y = rcClient.top; 
 
// Добавим по 1 с правой и нижней стороны, т.к координаты, полученные с помощью 
// GetClientRect не вкл. в себя крайние левый и нижний пиксели 
ptClientLR.x = rcClient.right + 1;
ptClientLR.y = rcClient.bottom + 1; 
 
// Функция ClientToScreen преобразует координаты заданной точки рабочей области в экранные координаты.
ClientToScreen(hWnd, &ptClientUL); 
ClientToScreen(hWnd, &ptClientLR);
 
// Скопируем рабочие координаты рабочей области в член rcClient структуры.
SetRect(&rcClient, ptClientUL.x, ptClientUL.y, ptClientLR.x, ptClientLR.y);  //прямоугольник, левая, верхняя, правая, нижняя
 
// Ограничим курсор мыши рабочей областью с помощью передачи rcClient структуры в ф-ию ClipCursor
ClipCursor(&rcClient);  
//return 0;
    
    GetCursorPos(&cp);  // Функция получает позицию курсора на экране 
    MoveToEx(hdc,cp.x,cp.y,NULL); // Начальная позиция линии
 
    while ((cp.x>ptClientUL.x) && (cp.x<ptClientLR.x) || (cp.y>ptClientUL.y) && (cp.y<ptClientLR.y))
    {
 
        GetCursorPos(&cp);  // Функция получает позицию курсора на экране
        LineTo(hdc,cp.x,cp.y);  // Конечная позиция линии
 
    }
 
    getch();
    return 0;
}
Добавлено через 1 час 23 минуты
Сам сделал))

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include "stdafx.h"
#include <windows.h>
#include <conio.h>
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
 
 
    //HWND hWnd = GetDesktopWindow(); // Идентификатор окна
    HWND hWnd = GetConsoleWindow(); // Идентификатор окна     
    
    //HDC hdc = GetWindowDC(hWnd); // Контекст устройства 
    HDC hdc = GetDC(hWnd); // Контекст устройства 
 
    HPEN hPen = CreatePen( PS_SOLID, 3, RGB(255,255,255) );
    HPEN hOld = (HPEN)SelectObject( hdc, hPen );
  
RECT rcClient; // Прямоугольник рабочей области
POINT cp; // Создаем экземпляр структуры, задающей точку на плоскости с помощью пары целых чисел
POINT cr;
POINT ptClientUL; // Верхний левый угол рабочей области
POINT ptClientLR; // Правый нижний угол рабочей области
    
if (GetSystemMetrics(SM_MOUSEPRESENT))
        printf("Press Key!");
 
    getch();
 
    
SetCapture(hWnd); // Захват ввода данных от мыши
 
// Получим экранные координаты рабочей области и преобразуем их в рабочие координаты
GetClientRect(hWnd, &rcClient); 
 
ptClientUL.x = rcClient.left; 
ptClientUL.y = rcClient.top; 
 
// Добавим по 1 с правой и нижней стороны, т.к координаты, полученные с помощью 
// GetClientRect не вкл. в себя крайние левый и нижний пиксели 
ptClientLR.x = rcClient.right + 1;
ptClientLR.y = rcClient.bottom + 1; 
 
// Функция ClientToScreen преобразует координаты заданной точки рабочей области в экранные координаты.
ClientToScreen(hWnd, &ptClientUL); 
ClientToScreen(hWnd, &ptClientLR);
 
// Скопируем рабочие координаты рабочей области в член rcClient структуры.
SetRect(&rcClient, ptClientUL.x, ptClientUL.y, ptClientLR.x, ptClientLR.y);  //прямоугольник, левая, верхняя, правая, нижняя
 
// Ограничим курсор мыши рабочей областью с помощью передачи rcClient структуры в ф-ию ClipCursor
//ClipCursor(&rcClient);  
//return 0;
           
 
    GetCursorPos(&cp);  // Функция получает позицию курсора на экране 
    MoveToEx(hdc, cp.x - rcClient.left, cp.y - rcClient.top,NULL); // Начальная позиция линии
 
    while ((cp.x!=0) || (cp.y!=0))
    {
 
        GetCursorPos(&cp);  // Функция получает позицию курсора на экране
        LineTo(hdc, cp.x - rcClient.left, cp.y - rcClient.top);  // Конечная позиция линии
 
    }
 
    getch();
    return 0;
}
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.01.2012, 03:08
Ответы с готовыми решениями:

Движение курсора через WinApi со изменяющейся чувствительностью
Привествую вас уважаемые программисты. Не подскажете как двигать курсор через WinApi? Вся суть состоит в том, я разрабатываю аналог...

Рисуем на экране
Допустим мое приложение свернуто, но мне надо поверх всех других окон нарисовать квадрат, просто линии, как можно реализовать? Но...

Движение мыши с точки А в точку Б с зажатой правой кнопкой мыши
Здравствуйте, мне нужно сделать программу которая бы плавно перемещала курсор мыши из А в Б причем с зажатой правой кнопкой мыши. С С#...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.01.2012, 03:08
Помогаю со студенческими работами здесь

WinAPI: движение прямоугольника
подскажите плиз как можно заставить прямоугольник, например такой Rectangle( hdc, 100,120,150,110); двигаться при нажатии стрелок?

Движение объектов в WinApi
суть в чем. У меня в WM_TIMER осуществляется движение объекта за счет нажатия стрелок. но есть ещё боты которые должны двигаться...

Координаты мыши, WinAPI
Как получит координаты мыши в окне программы?

Движение круга по синусоиде (WinAPI)
Значит задача состоит в том чтобы круг двигался по синусоиде. Пишу на DevC++. Нашел как синусоиду нарисовать с помощью линий: RECT...

Лабиринт для мыши. C++ и WinAPI
Доброго времени суток! Нужна помощь в написании небольшой игры &quot;Лабиринт для мыши&quot; с использованием WinAPI. Как ограничить курсор...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru