Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Масштабирование в GDI
|
|||
|---|---|---|---|
|
#18+
Начну издалека. Есть некая программа, которая заявляет, что может расширять свои возможности рисования, применением Windows GDI. При этом, единственное, что предоставляется, в рамках такого расширения, это, как я понял, контекст для памяти (memory device context). Приведу код и опишу проблему: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. В результате работы кода, рисуется такая картинка (см. Pic01) Здесь уже видно, что размеры квадрата, нарисованного GDI, не соответствуют масштабу отображаемой области. При увеличении масштаба, квадрат, нарисованный штатными средствами сохраняет свои пропорции, а GDI квадрат - нет. Понятно, что GDI берет экранные координаты и они неизменны при изменении масштаба отображаемой области. Понятно, что необходимо преобразовывать координаты GDI фигур. Но как получить координаты, предоставленного программой DC??? Какие варианты уже пробовал при тестировании того, что можно вытащить из DC: GetViewportOrgEx, GetWindowOrgEx - возвращают X и Y равным 0 и не меняются при изменении масштаба GetViewportExtEx, GetWindowExtEx - возвращают cX и cY равным 1 и не меняются при изменении масштаба Надежды, что StretchBlt впишет создаваемую фигуру в размер предоставленного DC и отмасштабирует - не оправдались: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Картинка, конечно поменялась, за счет фона неициализированного bitmap'a и явного уменьшения размера GDI квадрата, но суть осталась прежней - GDI фигура, все также, отрисовывается в координатах экрана и не масштабируется. Может кто знает как справиться с такой проблемой? Какие, в общем виде, параметры изменяются при масштабировании отображаемой области? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2018, 16:13 |
|
||
|
Масштабирование в GDI
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan) , Смотрел и эту функцию. GetWorldTransform при изменении масштаба отображаемой области всегда возвращает: Код: plaintext 1. Т.к. формула преобразования координат: Код: plaintext 1. 2. то получается, что при изменении масштаба все составные части формулы являются константами, а значит ничего меняться в координатах не будет. Т.е. эта функция полезна только тогда, когда сам меняешь расчетные параметры. А вот их то, как раз, я и не знаю. И не знаю откуда их можно получить. К примеру, при изменении размера окна, меняются его размеры, отталкиваясь от которых можно вычислить даже простой арифметикой пропорции рисуемых фигур. Здесь же есть только DC. Вопрос, собственно, и заключался в том как из DC вытащить ширину/высоту или применить функцию, которая автоматически впишет в "размеры" DC нужное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2018, 17:15 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=21&tid=2017958]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 15ms |
| total: | 175ms |

| 0 / 0 |
