Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
1-14132
nv-vetal
2002-08-24 12:33
2002.09.05
Как пересчитать все папки (файлы) в определенной папке?


6-14200
olookin
2002-06-30 12:17
2002.09.05
Удаленные машины


14-14272
Tornado
2002-08-12 14:37
2002.09.05
Продолжение прикола :)


3-13916
Виталий Панасенко
2002-08-15 09:51
2002.09.05
Заставить Жар-Птицу ругаться по-русски


3-13906
Linx
2002-08-14 21:34
2002.09.05
Ошибка при сохранении данных в таблице





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский