Форум: "WinAPI";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];
ВнизВопрос по EMF Найти похожие ветки
← →
_alx_ (2002-07-03 18:06) [0]Может кто читал в МАПИ, там написано что для редактирования ЕМФ необходимо при помощи кяллбяк ф-ии, перечислить записи в метафайле и проверить на какую из них попал курсор мыши. И соответственно что то сней сделать... Отсюда 2 вопроса.
1. Я с КЯЛЛБЯК ф-иями не сталкивался, кто нить помогите как с ними работать
2. Каким образом определить мышь на записи или нет? ДЛя замкнутых я еще более менее представляю, а для линий, кривых Безье и тд?
ф-ии были EnumEnhMetafile, а из нее должна вызываться EnumEnhMetaFileProc....
← →
asmer (2002-07-03 18:45) [1]хм... кяллбяк - енто, видимо, декларация CALLBACK... тока какая ж сложность-то в их использовании?.. енто ж просто влияет на порядок передачи аргументов в стеке, тебе от ентого ни тепло, ни холодно - компилятор сам решит, как ему параметры передать :) или ты имеешь в виду пользовательские функции, которые будут вызываться виндой при различных событиях?.. (типа, я про метафайлы в хелпе не искал инфу, не наю, чё те там за функции нужны)... дык они тож совсем обычные - описываешь их так, как тя просят в win32sdk, возвращаешь те значения, которые требуются...
← →
asmer (2002-07-03 18:58) [2]===5 минут спустя ===
типа, лана, я напрягся, залез в хелп... :) хм... типа, EnumEnhMetaFileProc - енто второй вариант... т.е. ты вызываешь EnumMetaFile, передав ей свой метафайлик, а она, в свою очередь, будет вызывать тобой описанную функцию EnumEnhMetaFileProc (которая, кстати, может называться PerechisliMneFail, ента недокументированая возможность добавлена русскими хакерами во все дистрибутивы виндов :)) функция EnumEnhMetaFileProc (которую, как мы договорились, ты описываешь сам) обрабатывает полученные аргументы (типа, круто, да - не ты передаёшь аргументы, а тебе их передают :)) если тебе надоело обрабатывать файл, возвращай ноль... типа, функция EnumMetaFile вызывает твою EnumEnhMetaFileProc, пока та не вернёт ей ноль, или пока не кончатся данные... а внутри EnumEnhMetaFileProc ты можешь делать с переданными тебе записями что угодно, например, рисовать фигурки :) так... о вопросе попадания мышки в фигуру (или что ты подразумеваешь под записями?) типа, енто те придётся писать через драйвер prjamye_ruki.drv (шутка не моя, если чё :)), потому что винда сама ентого делать не умеет (я так решил)... например, ты заводишь массив структур каких-нить для каждой фигурки, де описываешь регионы, которые считаются своими. ну и при попадании координат мыши в ентот регион, решаешь, что делать дальше... скорее всего, мышь попадёт сразу в несколько регионов, поэтому надо будет хранить ещё что-то типа координаты Z, чтоб проверять, какая фигурка находится сверху... для кривых безье, например, я бы хранил координаты ключевых точек, и именно при попадании на них (или в квадратик небольшой вокруг ентой точки) уже предпринимал бы какие-нить действия... а за сам контур, наерно, не понадобилось бы таскать фигуру (хотя я не знаю, какая задача перед тобой стоит)...
← →
_alx_ (2002-07-04 12:16) [3]С первым вопросом ясно... Спасибо. А насчет драйвера :-)) Как я уже говорил с замкнутыми фигурами пнятно.. А с разомкнутыми твой способ не подойдет (в моем случае). Говорят в МАПИ есть такая ф-ия которая сканирует прорисовку (незнаю как точно выразиться), т.е при рисовании линии возращает координаты тех точек что на данный момент рисует, ну и естессно можно проверить попал курсор на линию или нет...
← →
asmer (2002-07-04 14:56) [4]с помощью функции BeginPath открываешь в контексте устройства т.н. путь, потом используешь любые функции из разряда AngleArc, LineTo и т.д., потом закрываешь путь EndPath, потом преобразуешь путь в т.н. регион с помощью PathToRegion... хех... а потом можешь проверять попадание точки в регион с помощью PtInRegion...
вот... кто мне всё-таки скролл на мышке выломал, а?..
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c