Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2012, 01:33   #1
P.A.U.L
 
Регистрация: 11.10.2009
Сообщений: 9
По умолчанию Рисуем движение мыши на экране через WinAPI

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

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

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

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

Код:
#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;
}

Последний раз редактировалось P.A.U.L; 09.01.2012 в 01:51.
P.A.U.L вне форума Ответить с цитированием
Старый 09.01.2012, 03:09   #2
P.A.U.L
 
Регистрация: 11.10.2009
Сообщений: 9
По умолчанию

Сам сделал))

Код:
#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;
}
P.A.U.L вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
deleted P.A.U.L Помощь студентам 0 09.01.2012 00:52
Движение мыши Claster Общие вопросы Delphi 3 12.07.2011 13:04
Движение курсора через WinApi со изменяющейся чувствительностью PsymoN Общие вопросы Delphi 0 17.01.2011 20:20
указатель мыши автоматически должен совершать клик по заданному месту на экране, через промежуток времени Deefrost Qt и кроссплатформенное программирование С/С++ 5 16.05.2008 20:25