Win32 API | GDI. Как определить, что пользователь кликнул в объект
-
XCodeR
Win32 API | GDI. Как определить, что пользователь кликнул в объект
Ищу документацию.... Гугл дал не много...
+ вопрос:
как можно определить, что на нарисованный объект(прямоугольник, линия и т.д. и т.п.) пользователь кликнул мышкой?
допустим рисовали на TCanvas
среда разработки, как всегда C++ Builder || Delphi.
+ вопрос:
как можно определить, что на нарисованный объект(прямоугольник, линия и т.д. и т.п.) пользователь кликнул мышкой?
допустим рисовали на TCanvas
среда разработки, как всегда C++ Builder || Delphi.
-
LeonidPr
Re: Win32 API | GDI. Как определить, что пользователь кликнул в объект
Допустим, ты рисуешь на канве формы. Хотя, это не имеет значения. Ты знаешь координаты своего объекта. Для прямоугольника достаточно знать координаты верхнего левого угла и правого нижнего. Теперь в обработчике OnMouseDown (или OnMouseUp) проверяй координаты X, Y, которые передаются в обработчик события, на то, находится ли точка с этими координатами внутри объекта или нет. Для прямоугольника это будет примерно так:
if ((X>LeftCorner.X)&&(XLeftCorner.Y)&&(Y
if ((X>LeftCorner.X)&&(XLeftCorner.Y)&&(Y
-
XCodeR
Re: Win32 API | GDI. Как определить, что пользователь кликнул в объект
hasherfrog
случаем карта была не GWXMap?
по поводу алгоритма "окон" я думал, но решил, что в таком случае нагрузка будет происходить каждый раз, когда пользователь меняет местоположние прокрутки, масштаб.
Цитата:
У меня всегда расчёт шёл в double-числах, может, для integer'ов можно как-то всё ещё прооптимизировать...
сдается мне, что нет.
случаем карта была не GWXMap?
по поводу алгоритма "окон" я думал, но решил, что в таком случае нагрузка будет происходить каждый раз, когда пользователь меняет местоположние прокрутки, масштаб.
Цитата:
У меня всегда расчёт шёл в double-числах, может, для integer'ов можно как-то всё ещё прооптимизировать...
сдается мне, что нет.
-
XCodeR
Re: Win32 API | GDI. Как определить, что пользователь кликнул в объект
LeonidPr
спасибо, но в моем случае "рисованных" объектов будет большое количество. и проверка таким образом может занять драгоценное время.
Цитата:
По GDI советую читать MSDN.
что и делаю...
спасибо, но в моем случае "рисованных" объектов будет большое количество. и проверка таким образом может занять драгоценное время.
Цитата:
По GDI советую читать MSDN.
что и делаю...
-
XPEHOMETP
Re: Win32 API | GDI. Как определить, что пользователь кликнул в объект
По GDI есть книжечка: Фень Юань, "Программирование графики для Windows". Есть электронная версия русского перевода, не помню уже, где скачал.
-
XPEHOMETP
Re: Win32 API | GDI. Как определить, что пользователь кликнул в объект
XPEHOMETP
а выложить куда - нибудь или отправить на [url=mailto:xcoder05@mail.ru]почту[/url] , можешь?
а выложить куда - нибудь или отправить на [url=mailto:xcoder05@mail.ru]почту[/url] , можешь?
-
XCodeR
Re: Win32 API | GDI. Как определить, что пользователь кликнул в объект
XCodeR
Цитата:
а выложить куда - нибудь или отправить на почту , можешь?
Муторно из дома по модему посылать, файл большой. Поищи в Гугле, по названию, я так нашел, где скачать. Если не получится, когда буду на работе, то выложу или пришлю.
Цитата:
а выложить куда - нибудь или отправить на почту , можешь?
Муторно из дома по модему посылать, файл большой. Поищи в Гугле, по названию, я так нашел, где скачать. Если не получится, когда буду на работе, то выложу или пришлю.
-
XCodeR
Re: Win32 API | GDI. Как определить, что пользователь кликнул в объект
XPEHOMETP
ок. посмотрю(поищу)...
ок. посмотрю(поищу)...
-
hasherfrog
Re: Win32 API | GDI. Как определить, что пользователь кликнул в объект
Сабж - это на самом деле нетривиальная задача. Я решал её уже несколько раз, каждый раз - заново. Всё очень сильно зависит от реализации.
1. Кто определяет "попал-не попал?" Если каждый объект сам для себя - это одно. Если некто вроде "менеджера объектов" - это другое.
2. Алгоритмы вычисления "попади в прямоугольник" сильно отличаются от алгоритмов "кликни в полилинию". ОЧЕНЬ сильно.
1. Кто определяет "попал-не попал?" Если каждый объект сам для себя - это одно. Если некто вроде "менеджера объектов" - это другое.
2. Алгоритмы вычисления "попади в прямоугольник" сильно отличаются от алгоритмов "кликни в полилинию". ОЧЕНЬ сильно.
-
XCodeR
Re: Win32 API | GDI. Как определить, что пользователь кликнул в объект
hasherfrog
Может быть, если я опишу задачу, станет понтянее, что я хочу.
Рисуется несколько объектов(по форме напоминающих квадрат), координаты которых берутся из БД. Между объектами может быть проведена линия.
Так вот у каждого нарисованного объекта и возможной между ними линии есть определенные свойства, которые пользователь может редактировать.
=> что отредактировать свойства объекта пользователь кликает на объект.
Итого задача - определить на какой объект(линию) кликнул пользователь.
На данный момент решено(еще до создания темы) при помощи проверки попадает ли координаты "клика" в "прямоугольник координат" объекта.(для линии пока не решал, но проблем вроде как возникнуть не должно, формулы линии(=прямой) благо вывели задолго до нас)
Но так как объектов может быть очень много боюсь, что это скажется на работоспособности.
Цитата:
Алгоритмы вычисления "попади в прямоугольник" сильно отличаются от алгоритмов "кликни в полилинию". ОЧЕНЬ сильно.
впринципе можно решить при помощи формул ограничивающих многоугольник прямых.... если "полилиния" - многоугольник.
с кривыми Безье, как уже отмечалось в этой теме - все намного сложнее.
Может быть, если я опишу задачу, станет понтянее, что я хочу.
Рисуется несколько объектов(по форме напоминающих квадрат), координаты которых берутся из БД. Между объектами может быть проведена линия.
Так вот у каждого нарисованного объекта и возможной между ними линии есть определенные свойства, которые пользователь может редактировать.
=> что отредактировать свойства объекта пользователь кликает на объект.
Итого задача - определить на какой объект(линию) кликнул пользователь.
На данный момент решено(еще до создания темы) при помощи проверки попадает ли координаты "клика" в "прямоугольник координат" объекта.(для линии пока не решал, но проблем вроде как возникнуть не должно, формулы линии(=прямой) благо вывели задолго до нас)
Но так как объектов может быть очень много боюсь, что это скажется на работоспособности.
Цитата:
Алгоритмы вычисления "попади в прямоугольник" сильно отличаются от алгоритмов "кликни в полилинию". ОЧЕНЬ сильно.
впринципе можно решить при помощи формул ограничивающих многоугольник прямых.... если "полилиния" - многоугольник.
с кривыми Безье, как уже отмечалось в этой теме - все намного сложнее.