Реализация управления масштабированием в MFC - PullRequest
0 голосов
/ 23 апреля 2009

Я работаю над средством «предварительного просмотра», чтобы показать обзор слайда с прямоугольными массивами пятен образца.

Размер слайдов обычно составляет 25 x 75 мм, а точечные образцы обычно имеют диаметр 0,1 мм. Обычно по периметру предметного стекла имеется зазор 2 мм, на котором не печатаются пятна.

Расстояние между точками (шагами) с точностью до 0,01 мм. Например, шаг в 0,20 и 0,29 мм необходимо различать в пикселях. Представляя сами пятна, точность 100%, вероятно, не имеет решающего значения на этом этапе, если пятна видны и не перекрываются.

Буду признателен за советы о том, какие методы использовать для создания растрового представления слайда / пятен и просмотра макета слайда с использованием произвольных уровней увеличения.

Это не должно быть сложным - представление 1: 1 плюс меньшее и большее увеличение для начала. Я, вероятно, не могу уменьшить масштаб слишком сильно, поскольку пятна станут слишком маленькими, чтобы быть представленными.

Для больших увеличений мне, вероятно, потребуется знать о реализации горизонтальной / вертикальной прокрутки, но об этом я расскажу позже.

Я хотел бы узнать о любых методах программирования и масштабирования, о которых мне следует знать, чтобы правильно реализовать функцию масштабирования. Недавно я играл с функцией StretchBlt, чтобы изменять размеры изображения, и это кажется нормальным, однако любая другая важная информация будет полезна.

Приветствие.

1 Ответ

1 голос
/ 23 апреля 2009

Начнем с самого начала:

  • почему вы не используете :: AFXPrintPreview () и остальные средства предварительного просмотра печати MFC?

  • «Слайды» и «рекламные ролики» характерны для вашей отрасли, я думаю - они имеют отношение к вопросу или только для иллюстрации?

  • StretchBlt () не принесет вам большой пользы, потому что он позволит вам выполнять только «масштабирование» на уровне пикселей, вам нужно нарисовать определенную часть элемента управления с более высоким уровнем точности. , Даже если вы не собираетесь использовать материал для предварительного просмотра печати MFC, посмотрите, как это можно сделать.

  • Элемент управления Windows обладает всеми функциями, необходимыми для прокрутки и масштабирования. Они находятся в контексте устройства: SetWindowExt (), SetViewportExt (), SetViewportOrg () и т. Д. Смотрите в разделе «Функции координат» на странице «Члены CDC» в MSDN. При этом я однажды реализовал масштабирование и прокрутку «вручную», отслеживая положение полосы прокрутки, команды масштабирования моего элемента управления и т. Д. Это была боль в заднице и, оглядываясь назад, я должен был использовать средства Windows. Их тоже нелегко использовать, хотя, поэтому я подумал, что я мог бы сделать это лучше сам, во-первых - оказывается, я был неправ:)

  • Наконец, хотя я не могу точно сказать из вашего вопроса, действительно ли вы находитесь в этой лодке, не думайте о физических расстояниях (миллиметрах и т. Д.). Первое, что вы хотите получить правильно, это нарисовать фигуру на экране с правильными пропорциями между элементами. Затем вы хотите увеличить / уменьшить. Наконец, только когда вы приступаете к печати, физические меры вступают в игру. Единственное, что вам нужно выяснить (немного упрощенно), это «какой правильный коэффициент масштабирования мне нужен, чтобы получить требуемый результат». Это немного сложно, но имеет мало общего с тем, что кажется первой частью вашего вопроса (как нарисовать ваш компонент на экране).

Если у вас возникли проблемы, не стесняйтесь задавать более конкретные вопросы. У меня есть предварительный просмотр и код печати здесь в качестве примера «общих» частей процесса печати, хотя специфика, очевидно, различна для каждого приложения.

...