Win32 API | GDI. Как определить, что пользователь кликнул в объект

Ответить
 • Просмотры: 1
Аватара пользователя
XCodeR

Win32 API | GDI. Как определить, что пользователь кликнул в объект

Сообщение XCodeR »

Ищу документацию.... Гугл дал не много...



+ вопрос:

как можно определить, что на нарисованный объект(прямоугольник, линия и т.д. и т.п.) пользователь кликнул мышкой?

допустим рисовали на TCanvas



среда разработки, как всегда C++ Builder || Delphi.
Аватара пользователя
LeonidPr

Re: Win32 API | GDI. Как определить, что пользователь кликнул в объект

Сообщение LeonidPr »

Допустим, ты рисуешь на канве формы. Хотя, это не имеет значения. Ты знаешь координаты своего объекта. Для прямоугольника достаточно знать координаты верхнего левого угла и правого нижнего. Теперь в обработчике OnMouseDown (или OnMouseUp) проверяй координаты X, Y, которые передаются в обработчик события, на то, находится ли точка с этими координатами внутри объекта или нет. Для прямоугольника это будет примерно так:

if ((X>LeftCorner.X)&&(XLeftCorner.Y)&&(Y
Аватара пользователя
XCodeR

Re: Win32 API | GDI. Как определить, что пользователь кликнул в объект

Сообщение XCodeR »

hasherfrog

случаем карта была не GWXMap?



по поводу алгоритма "окон" я думал, но решил, что в таком случае нагрузка будет происходить каждый раз, когда пользователь меняет местоположние прокрутки, масштаб.




Цитата:



У меня всегда расчёт шёл в double-числах, может, для integer'ов можно как-то всё ещё прооптимизировать...



сдается мне, что нет.
Аватара пользователя
XCodeR

Re: Win32 API | GDI. Как определить, что пользователь кликнул в объект

Сообщение XCodeR »

LeonidPr

спасибо, но в моем случае "рисованных" объектов будет большое количество. и проверка таким образом может занять драгоценное время.


Цитата:



По GDI советую читать MSDN.



что и делаю...
Аватара пользователя
XPEHOMETP

Re: Win32 API | GDI. Как определить, что пользователь кликнул в объект

Сообщение XPEHOMETP »

По GDI есть книжечка: Фень Юань, "Программирование графики для Windows". Есть электронная версия русского перевода, не помню уже, где скачал.
Аватара пользователя
XPEHOMETP

Re: Win32 API | GDI. Как определить, что пользователь кликнул в объект

Сообщение XPEHOMETP »

XPEHOMETP

а выложить куда - нибудь или отправить на [url=mailto:xcoder05@mail.ru]почту[/url] , можешь?
Аватара пользователя
XCodeR

Re: Win32 API | GDI. Как определить, что пользователь кликнул в объект

Сообщение XCodeR »

XCodeR


Цитата:



а выложить куда - нибудь или отправить на почту , можешь?



Муторно из дома по модему посылать, файл большой. Поищи в Гугле, по названию, я так нашел, где скачать. Если не получится, когда буду на работе, то выложу или пришлю.
Аватара пользователя
hasherfrog

Re: Win32 API | GDI. Как определить, что пользователь кликнул в объект

Сообщение hasherfrog »

Сабж - это на самом деле нетривиальная задача. Я решал её уже несколько раз, каждый раз - заново. Всё очень сильно зависит от реализации.



1. Кто определяет "попал-не попал?" Если каждый объект сам для себя - это одно. Если некто вроде "менеджера объектов" - это другое.

2. Алгоритмы вычисления "попади в прямоугольник" сильно отличаются от алгоритмов "кликни в полилинию". ОЧЕНЬ сильно.
Аватара пользователя
XCodeR

Re: Win32 API | GDI. Как определить, что пользователь кликнул в объект

Сообщение XCodeR »

hasherfrog

Может быть, если я опишу задачу, станет понтянее, что я хочу.



Рисуется несколько объектов(по форме напоминающих квадрат), координаты которых берутся из БД. Между объектами может быть проведена линия.

Так вот у каждого нарисованного объекта и возможной между ними линии есть определенные свойства, которые пользователь может редактировать.

=> что отредактировать свойства объекта пользователь кликает на объект.

Итого задача - определить на какой объект(линию) кликнул пользователь.



На данный момент решено(еще до создания темы) при помощи проверки попадает ли координаты "клика" в "прямоугольник координат" объекта.(для линии пока не решал, но проблем вроде как возникнуть не должно, формулы линии(=прямой) благо вывели задолго до нас)



Но так как объектов может быть очень много боюсь, что это скажется на работоспособности.




Цитата:



Алгоритмы вычисления "попади в прямоугольник" сильно отличаются от алгоритмов "кликни в полилинию". ОЧЕНЬ сильно.



впринципе можно решить при помощи формул ограничивающих многоугольник прямых.... если "полилиния" - многоугольник.

с кривыми Безье, как уже отмечалось в этой теме - все намного сложнее.
Ответить

Вернуться в «Программирование и базы данных»