![]() |
|
Модераторы: gambit, Kefir, Partizan |
![]()
|
|
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: нет Всего: 39 |
Здравствуйте, друзья,
Полдня изучаю WPF, возникли вопросы. Отрендерил в RenderTargetBitmap изображение содержимого окна и через енкодер перенёс в bitmap. Этот битмап устанавливается затем на фон хостящегося в окне контрола Windows.Forms. Вот так :
И что мы видим? Скриншот содержимого окна выглядит чуть-чуть по-больше, чем живой оригинал - некоторые кнопки вылезли за границы. Как это могло случиться? = Полагаю, дело либо в размерах, либо в разрешении. 1) Размеры окна считаются с границей или без? Если с границей, то как определить размеры без границ, если нету .ClientRectangle? 2) Как получить текущие значения горизонтального и вертикального разрешений в dpi? Может, я ещё где-то неправ?.. Спасибо. -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: нет Всего: 39 |
Стоит запостить вопрос, как решения начинают приходить сами собой
Что ж, дело было действительно в размерах! Размеры чего указаны для окна - по-прежнему точно не знаю, но мне-то нужны были размеры контейнера в окне. Этот контейнер - Grid. При том, что он развёрнут на всё окно (размер = авто), его длина и ширина меньше, чем у самого окна
-------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| marcusmae |
|
||||||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: нет Всего: 39 |
Небольшой experience для Базы Знаний.
Если кому интересно, то при более основательном рассмотрении рендеринг содержимого окна WPF с помощью RenderTargetBitmap оказался весьма глючным.
Возникает на строчке
Этот самый SendCommand каким-то образом связан, в частности с событиями : описанная ошибка возникает при повторном вызове .Render по событию, например, по клику на кнопку - первый раз всё строится, на второй и последующий - вываливает ArgumentException. Без событий всё нормаьно работает. Кто-нибудь что-нить думает по этому поводу? Я лично пока не представляю, что с этим можно поделать при том, что исключение недокументировано Так что вернулся к более традиционному варианту - через Win32 :
Здесь тоже есть весёлые проблемы, но уже не катастрофические : при втором вызове и далее эта штука упорно рисует белые листы, то есть вообще не видит содержимого окна! Поэтому я беру не хэдл самого окна WPF, а хэндл Owner-а, что влечёт необходимость вычисления .PointToScreen(). Это сообщение отредактировал(а) marcusmae - 16.4.2008, 14:24 -------------------- ἀπὸ μηχανῆς θεός |
||||||||
|
|||||||||
| Kefir |
|
|||
|
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: 22 Всего: 87 |
так, разбирался на скорую руку - воспроизвести ничего так и не удалось. работает, зараза, как часы. может, я чего-то неправильно написал...
screen - это бордер с прямоугольником, я его снимаю и показываю результаты в бордере view. поставил и на клик кнопки и на ресайз окна.
Добавлено @ 21:23 а если не секрет - зачем эти хитрые извращения?.. Это сообщение отредактировал(а) Kefir - 16.4.2008, 21:27 |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |