Что такое код setviewportext

Содержание
Илон Маск рекомендует:  Пишем многозадачную ос в real mode

Что такое код setviewportext

1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

[SDK]SetWindowExtEx and SetViewportExtEx

Premium Content
Premium Content
  • Facebook
  • Twitter
  • LinkedIn
  • https://www.experts-exchange.com/questions/20353711/SDK-SetWindowExtEx-and-SetViewportExtEx.html copy

Using this code you get logical coordinate area where (0, 0) is placed in left-bottom window point, x-axis from left to right, y-axis from bottom to top. Size of this logical area is 32767*32767. This can be used, for example, to draw 2-d graph.
In standard windows coordinates (0,0) is in left-up corner and y-axis goes from top to bottom. To change this to standard math coordinates we set (0,0) to the bottom:
SetViewportOrgEx(hdc,0,cyC lient,NULL );
and change direction of y-axis:
SetViewportExtEx(hdc,cxCli ent,-cyCli ent,NULL);

32767 is maximum we can get for int parameter.

After applying of this code you can write:

MoveToEx(hdc, 0, 0, NULL);
LineTo(hdc, 32767, 32767);

and you get graph y = x in interval 0 — 32767.

B9007036/Q_1.gif
SetViewportOrgEx(hdc,0,50, NULL);
->MSDN:map the logical point (0,0) to the device point (0,50)
->explain:http://mail.ntust.edu.tw/

I think the points are drawn correctly. There is not enough information in these two lines of code to show logical coordinates since they depend also on axis direction.

To understand this better I suggest you to write simple application which draws the same objects with and without coordinate transformation. This is what I did when I needed to use SetWorldTransform.

Drawing code may look like this (just a sample):

— set coordinate transformation
— draw line (0, 0) — (50, 100) with red color
— reset coordinate transformation to default
— draw line (0, 0) — (50, 100) with black color.

CompTIA Security+

Learn the essential functions of CompTIA Security+, which establishes the core knowledge required of any cybersecurity role and leads professionals into intermediate-level cybersecurity jobs.

B9007036/Q_2.gif
SetViewportOrgEx(hdc,0,50, NULL);
//map the logical point (0,50) to the device point (0,0)
//http://mail.ntust.edu.tw/

B9007036/Q_1.gif
SetWindowOrgEx(hdc,0,50,NU LL);
————————— ——-
But my explain is different with result of program executed.
Program:
————————— ——-
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
<
HDC hdc ;
HBRUSH hBrush;
PAINTSTRUCT ps ;
RECT rc3 =<0,0,100,100>;
switch (message)
<

case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
hBrush = CreateSolidBrush(RGB(255,0 ,0));
SetMapMode(hdc,MM_TEXT);
SetViewportOrgEx(hdc,0,50, NULL);
SetWindowOrgEx(hdc,0,50,NU LL);
FillRect(hdc,&rc3,hBrush);

EndPaint(hwnd, &ps);
return 0L;

case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
>
return DefWindowProc (hwnd, message, wParam, lParam) ;
>
————————— ——-
Could you tell me how do I think?3Q!

B9007036/Q_result.gif
————————— ———- ———- —
Program’s result:
Fill color RGB(255,0,0) x from 0 to 100 and y from 0 to 100
in client-area.
What’s difference?3Q.

Hi,
It’s difficult to understand what happens when you use SetViewportOrgEx and SetWindowOrgEx together. You should use only one of them.
MSDN topic SetViewportOrgEx:
«Generally, you will use one function or the other, but not both».
Both functions move logical origin relatively to device origin. But one of them shows new coordinates of viewport origin, and second shows new coordinates of window origin. Applying of lines:
SetViewportOrgEx(hdc,0,50, NULL);
SetWindowOrgEx(hdc,0,50,NU LL);
sets DC to default state.
Comment one of two lines.

Илон Маск рекомендует:  Отправка файла с указанием сколько загруженноосталось

Hi.
I don’t understand and explain what happens when using SetViewportOrgEx and SetWindowOrgEx together,either.But a program «DigClock»(in Chapter 8 in «Programming Windows 5/e» written by Charles Petzold)use this method.Follows:
————————— ———- ———- ———- —
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;

SetMapMode (hdc, MM_ISOTROPIC) ;
SetWindowExtEx (hdc, 276, 72, NULL) ;
SetViewportExtEx (hdc, cxClient, cyClient, NULL) ;
SetWindowOrgEx (hdc, 138, 36, NULL) ;
SetViewportOrgEx (hdc, cxClient / 2, cyClient / 2, NULL) ;

SelectObject (hdc, GetStockObject (NULL_PEN)) ;
SelectObject (hdc, hBrushRed) ;

DisplayTime (hdc, f24Hour, fSuppress) ;

EndPaint (hwnd, &ps) ;
return 0 ;
————————— ———- ———- ———- —
->SetWindowOrgEx (hdc, 138, 36, NULL) ;
->SetViewportOrgEx (hdc, cxClient / 2, cyClient / 2, NULL) ;
Q:What do we explain?I am very confused and curious.
How to trace their behavior and function?Thanks!

IT issues often require a personalized solution. With Ask the Experts™ , submit your questions to our certified professionals and receive unlimited, customized solutions that work for you.

Что такое код setviewportext

Задает координаты x и y области окна представления контекста устройства.

Определяет область окна просмотра x (в единицах устройства).

Определяет область окна просмотра y (в единицах устройства).

Определяет координаты x и y области окна просмотра (в единицах устройства).

Предыдущие области окна просмотра, как CSize объект. При возникновении ошибки координаты x и y возвращаемого объекта CSize оба имеет значение 0.

Окно просмотра вместе с окном устройство- контекста, определяющее, как GDI сопоставляет элементы в системе координат в логические точки в системе координат фактического устройства. Иначе говоря, они определяют, как GDI преобразование логических координат в координаты устройства.

Если установлены следующие режимы сопоставления, вызовы SetWindowExt и SetViewportExt игнорируются:

MM_HIMETRIC

MM_TEXT

MM_LOENGLISH

MM_TWIPS

Если установлен режим MM_ISOTROPIC приложение должно вызвать функцию-член SetWindowExt, прежде чем он вызывает SetViewportExt.

Что такое код setviewportext

The SetViewportExtEx function sets the horizontal and vertical extents of the viewport for a device context by using the specified values.

Syntax

Parameters

A handle to the device context.

The horizontal extent, in device units, of the viewport.

The vertical extent, in device units, of the viewport.

A pointer to a SIZE structure that receives the previous viewport extents, in device units. If lpSize is NULL, this parameter is not used.

Return value

If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero.

Remarks

The viewport refers to the device coordinate system of the device space. The extent is the maximum value of an axis. This function sets the maximum values for the horizontal and vertical axes of the viewport in device coordinates (or pixels). When mapping between page space and device space, SetWindowExtEx and SetViewportExtEx determine the scaling factor between the window and the viewport. For more information, see Transformation of Coordinate Spaces.

When the following mapping modes are set, calls to the SetWindowExtEx and SetViewportExtEx functions are ignored.

  • MM_HIENGLISH
  • MM_HIMETRIC
  • MM_LOENGLISH
  • MM_LOMETRIC
  • MM_TEXT
  • MM_TWIPS

When MM_ISOTROPIC mode is set, an application must call the SetWindowExtEx function before it calls SetViewportExtEx. Note that for the MM_ISOTROPIC mode certain portions of a nonsquare screen may not be available for display because the logical units on both axes represent equal physical distances.

Examples

Requirements

Minimum supported client

Windows 2000 Professional [desktop apps only]

Понимание чистого кода в Andro >
    Переводы, 2 июня 2020 в 9:29

Прежде чем начать писать свой код, нужно понять, как его масштабировать и как им управлять.

Как сказал Дядя Боб в своей книге:

Вы читаете эту статью по двум причинам. Во-первых, вы программист. Во-вторых, вы хотите программировать лучше.

Представьте, что вы ищете книги в библиотеке. Если книги отсортированы и классифицированы, вы найдёте их гораздо быстрее. Кроме того, благодаря хорошему дизайну интерьера вы будете чувствовать себя комфортно.

Если вы хотите создать что-то стоящее, нужно уметь не только писать, но и аккуратно организовывать свой код. Программист со стороны, получив ваш код, должен увидеть имена переменных, пакетов или классов и сразу всё понять. Он не должен ругаться и начинать проект с нуля.

Что такое «чистый код»?

Нехорошо наспех заканчивать проект, если другие не смогут понять ваш код. Это ваша недоработка и ваша ответственность.

Photo Lab, Москва, Одесса, можно удалённо, от 150 000 до 250 000 ₽

Код можно назвать «чистым», если в нём легко разбирается вся команда. А другой разработчик может прочитать его и улучшить. С понятностью приходит читаемость, изменяемость, расширяемость и лёгкость сопровождения.

Должен ли я заботиться об этом?

Вы должны заботиться о своём коде, потому что именно он будет описывать ваш мыслительный процесс другим. Нужно думать о том, как сделать код более простым и читабельным.

Характеристики чистого кода

  • Ваш код элегантен: он должен вызывать у вас улыбку, как от хорошо сделанной музыкальной шкатулки или машины с красивым дизайном.
  • О вашем коде позаботились: кто-то нашёл время, чтобы сделать его простым и упорядоченным и уделил внимание деталям.
  • Ваш код сфокусирован: каждая функция, каждый класс, каждый модуль выполняют одну конкретную задачу и не перегружены лишними фичами.
  • Не содержит дубликатов;
  • Работает на всех тестах;
  • Имеет минимальное количество объектов, таких как классы, методы, функции и тому подобное.

Одно из различий между умным и профессиональным программистом заключается в том, что профессионал понимает, что чистота — это главное. Профессионалы используют свои способности во благо и пишут код, понятный другим.

Задавайте уместные имена

Выбор хороших имён требует времени, но экономит больше. Имя переменной, функции или класса должно отвечать на все важные вопросы: зачем нужно, что делает и как используется. Если имя нужно комментировать, то оно не выполняет свою задачу.

Имена классов

Классы и объекты должны называться существительными или фразами из них, например Customer , WikiPage , Account и AddressParser . Избегайте таких слов, как Manager , Processor , Data или Info в названии класса. Имя класса не должно быть глаголом.

Имена методов

Методы должны называться глаголами или фразами из них, например postPayment() , deletePage() или save() . Аксессоры, мутаторы и предикаты должны быть названы по их значению, иметь префикс get , set и соответствовать стандарту JavaBean.

Используйте доменные названия для задач

Если не можете подобрать название, используйте доменные названия для задач. По крайней мере, программист, который поддерживает ваш код, может спросить эксперта по домену, что оно значит.

Написание кода с использованием принципов S.O.L.I.D.

Принципы придуманы Робертом К. Мартином (Дядя Боб). SOLID — это термин, описывающий принципы проектирования хорошего кода.

Принцип единой ответственности — SRP

Это означает, что каждый класс должен отвечать за что-то одно. Никогда не должно быть более одной причины для изменения класса. То, что вы можете добавлять в класс всё, что хотите, не означает, что нужно это делать. Разделите большие классы на более мелкие и избегайте классы Бога.

У нас есть RecyclerView.Adapter с логикой внутри onBindViewHolder .

RecyclerView.Adapter противоречит принципу единой ответственности, потому что он имеет логику внутри onBindViewHolder .

Принцип Открытости-Закрытости — OCP

Программные объекты должны быть открыты для расширения, но закрыты для модификации. Это означает, что если вы пишете класс A , а затем ваши товарищи по команде хотят внести изменения в его функцию, они могут легко сделать это, расширив класс A и не внося изменения.

Простым примером будет класс RecyclerView.Adapter . Вы можете легко расширить этот класс и создать собственный адаптер с настраиваемым поведением, не изменяя существующий класс RecyclerView.Adapter .

Принцип подстановки Лисков — LSP

Дочерние классы никогда не должны нарушать определения типов родительского класса.

Это означает, что подкласс должен переопределять методы родительского класса, которые не нарушают функциональность родительского класса. Например, вы создаёте интерфейсный класс с прослушивателем onClick () , а затем применяете прослушиватель в MyActivity и назначаете ему всплывающее действие при вызове onClick () .

Принцип разделения интерфейса — ISP

Принцип разделения интерфейса (ISP) гласит, что ни один клиент не должен зависеть от методов, которые он не использует.

Это означает, что если вы хотите создать класс A и реализовать его в другом классе B , не нужно переопределять все методы класса A внутри класса B . Чтобы стало понятнее, давайте рассмотрим пример:

Внутри кода нужно выполнить SearchView.OnQueryTextListener() и только метод onQuerySubmit() .

Как этого добиться? Просто создайте обратный вызов и класс, который распространяется на SearchView.OnQueryTextListener() .

А вот как это реализовать:

С Kotlin можно использовать функцию-расширение:

И, наконец, вот как это сделать:

​Принцип инверсии зависимостей — DIP

Зависит от абстракций. Не зависит от конкрементов.
Принцип обращения зависимостей определяется двумя пунктами:

Модули высокого уровня не должны зависеть от модулей низкого уровня. Оба должны зависеть от абстракций.

Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

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

Простой пример — шаблон MVP. У вас есть объект интерфейсов, который помогает взаимодействовать с конкретными классами. Это означает, что классам пользовательского интерфейса ( Activity / Fragment ) не нужно знать фактическую реализацию методов в Presenter . Если есть какие-либо изменения внутри, классы пользовательского интерфейса не должны знать об изменениях.

Посмотрим на примере кода:

Поэтому мы создаём интерфейс, который абстрагирует реализацию presenter, а наш класс представления сохраняет ссылку на PresenterInterface .

Заключение

Опытные программисты знают, что все объекты — миф. Иногда действительно нужны простые структуры данных с работающими на них процедурами. С этого момента вы должны начать продумывать, как реализовать проект, чтобы в перспективе его можно было легко обновлять.

Thread: SetWindowOrgEx, SetViewPortOrgEx, SetWindowExtEx, SetViewPortExtEx

Thread Tools
Search Thread
Display
  • Linear Mode
  • Switch to Hybrid Mode
  • Switch to Threaded Mode

SetWindowOrgEx, SetViewPortOrgEx, SetWindowExtEx, SetViewPortExtEx

These functions are confusing me. Can somebody explain them? There implementations and what they are used for? Thanks.

Their names are pretty self-explanatory They allow you to move the origin and the extent of the viewport and window around, and enable you to set the extents as a logical scale rather than a pixel one. You might use them to display graphs or graphics, where changing the origin would make the calculations easier (such as using a Cartesian co-ordinate system).

Petzold goes into quite a bit of detail about them, what exactly is confusing you?

I just wasn’t sure about what the differences were. What exactly is the «viewport»? That’s what I don’t understand. Thanks, zen.

The viewport sets the origin and extent of the client area in pixels (or based on the size in pixels) and the window is the origin and extent of the client area in logical units (which can be a user defined scale). The window co-ordinates will then be converted to viewport co-ordinates for display.

The default mapping mode treats window units as viewport units with the origin at the top left, so all painting to the client area is based on the pixels where the painting is to be done.

So what is the difference between SetWindowOrgEx and SetViewPortOrgEx? I don’t really understand the difference between the ViewPort and the Window. Thanks, zen, I really appreciate it.

First of all I’m setting the logical units to be used to draw to the window to 2000 by 2000, and then making these units relate to 100 by 100 pixels. So my text will be outputted at 100 pixels across and 100 pixels down in my client area. If I changed the TextOut call to paint at 1000,1000 then the text will be drawn at 50,50 and changing it to 4000,4000 will draw at 200,200.

If I do something like —

The the origin of the window now starts at -1000,-1000, so now when I paint the text at 0,0 this translates to 50 pixels across and 50 pixels down (as 0,0 is 1000 logical units from the left and 1000 logical units from the top).

Alternatively I can adjust where the text is painted by altering the viewport origin —

The origin 0,0 has been transformed 50 pixels across the top and 50 pixels down.

There’s probably not much point altering the window orgin and the viewport orgin, you’d alter one and stick with it. However you may want to alter the extent of both so that differing amount of pixels represent a differerent amount of logical units.

If you’re not sure take the code and stick it in a WM_PAINT message and have a play around with it.

SetViewportExt

Описание: function SetViewportExt(DC: HDC; X, Y: Integer): Longint;

Устанавливает экстенты точки зpения по осям X и Y, опpеделяющие, как GDI pастягивает или сжимает логические единицы, чтобы уместиться в единицы устpойства.

Паpаметpы:

DC: Идентификатоp контекста устpойства.

X, Y: Новые экстенты точки зpения (в единицах устpойства).

Возвpащаемое значение:

Пpедыдущие экстенты X и Y в младшем и стаpшем словах, соответственно.

Как определить горизонтальные и вертикальные экстенты в устройствах с помощью SetViewportExtEx() и принтера?

Я экспериментирую с использованием Windows GDI API для печати и проводил несколько экспериментов, чтобы попытаться понять перевод и как работают окна и размеры видовых экранов.

Примеры, которые я нашел, используют GetDeviceCaps() для получения измерений HORZRES и VERTRES (несмотря на то, что известный факт они могут быть ненадежными и неточными), а затем используя эти значения с помощью SetViewportExtEx() однако они делят значения, возвращаемые GetDeviceCaps() на два.

Почему значения cxpage и cypage вдвое и как я могу предсказать используемые значения и влияние на печатный результат? Это связано с использованием MM_ISOTROPIC в качестве режима отображения?

Примеры используют что-то вроде следующего кода:

В моей реальной тестовой программе у меня есть следующая функция для печати страницы, когда мой главный обработчик сообщений Windows видит сообщение IDM_PRINT сгенерированное, когда пользователь выбирает «Печать» в меню «Файл» тестового приложения. Обработчик использует PrintDlg() чтобы получить дескриптор контекста устройства (hDC), затем вызывает эту функцию для осуществления печати.

Когда я SetViewportExtEx() вызов SetViewportExtEx() из SetViewportExtEx(hDC, cxpage/2, cypage/2, NULL); (вывод справа на изображении ниже) в SetViewportExtEx(hDC, cxpage, cypage, NULL); (вывод слева на изображении ниже) печатный текст выглядит почти вдвое по высоте и ширине.

Дополнительные примечания к экстентам и способам отображения

Чарльз Петцольд Программирование Windows 5th Edition (глава 5 — Основной чертеж, стр. 180) пишет:

Формулы также включают в себя две точки, которые определяют «экстенты»: точка (xWinExt, yWinExt) — это степень окна в логических координатах; (xViewExt, yViewExt) — длина представления в координатах устройства. В большинстве режимов отображения экстенты подразумеваются режимом отображения и не могут быть изменены. Каждая степень сама по себе не означает ничего, но отношение степени просмотра к размеру окна является коэффициентом масштабирования для преобразования логических единиц в единицы устройства.

Например, когда вы устанавливаете режим отображения MM_LOENGLISH, Windows устанавливает xViewExt как определенное количество пикселей, а xWinExt — это длина в сотых долях дюйма, занимаемая пикселями xViewExt. Отношение дает вам пиксели на сотые доли дюйма. Коэффициенты масштабирования выражаются как отношения целых чисел, а не значений с плавающей запятой по соображениям производительности.

Затем Петцольд обсуждает MM_ISOTROPIC и MM_ANISOTROPIC на странице 187.

Два оставшихся режима отображения называются MM_ISOTROPIC и MM_ANISOTROPIC . Это только два режима отображения, для которых Windows позволяет изменять размер окна просмотра и окна, что означает, что вы можете изменить коэффициент масштабирования, используемый Windows для преобразования логических и координатных координат устройства. Слово изотропное означает «равное во всех направлениях»; анизотропное — противоположное — «не равное». Подобно режимам метрического отображения, показанным ранее, MM_ISOTROPIC использует одинаково масштабированные оси. Логические единицы по оси X имеют те же физические размеры, что и логические единицы по оси y. Это помогает, когда вам нужно создавать изображения, которые сохраняют правильное соотношение сторон независимо от соотношения сторон дисплея.

Разница между MM_ISOTROPIC и режимами метрического отображения заключается в том, что с помощью MM_ISOTROPIC вы можете управлять физическим размером логического блока. Если вы хотите, вы можете настроить размер логического блока на основе клиентской области. Это позволяет вам рисовать изображения, которые всегда содержатся в клиентской области, сжиматься и расширяться соответствующим образом. Две программы синхронизации в главе 8 имеют изотропные изображения. По мере того, как вы изменяете размер окна, часы изменяются соответствующим образом.

Программа Windows может обрабатывать изменение размера изображения полностью, регулируя размер окна и области просмотра. Затем программа может использовать одни и те же логические единицы в функциях рисования независимо от размера окна.

Технологии

Разделение газа, АСУ ТП, Электроснабжение

Масштабирование аналогового входного сигнала

Масштабирование входного аналогового сигнала.

Модули аналогового ввода преобразуют физический сигнал на входе в цифровой вид. Одним из параметров модулей аналогового ввода, точнее АЦП входящего в его состав, является разрешение или разрядность. Разрешение АЦП характеризует количество дискретных значений, которые преобразователь может выдать на выходе. Количество дискретных значений определяется формулой 2 n . Для 12 бит АЦП количество дискретных значений соответствует 2 12 =4096.

Использование значений в цифровом виде не всегда удобно. Для преобразования к физической величине используют операции масштабирования. Операции масштабирования различаются для сигнала с линейной градуировочой характеристикой и квадратичной градуировочной характеристикой, к примеру, расход измеряемый методом переменного перепада давления (датчик перепада давления, подключенный к диафрагме).

Для определения выхода за пределы номинального диапазона преобразования, АЦП имеют или расширенный диапазон, к примеру, в модулях аналогового ввода ПЛК производства Triconex диапазон входного значения расширен на 6%, или ограничен диапазон представления в кодах АЦП, к примеру, в модулях производства Siemens, номинальный диапазон заканчивается кодом 27648 при максимальном коде 32768.

1. Аналоговый датчик с линейной градировочной характеристикой

OUT – представление сигнала в инженерных единицах;
IN_RAW – представление сигнала в кодах АЦП;
RAW_MIN – минимальный код АЦП. К примеру, для датчика 0-10 В – RAW_MIN = 0, для 4-20 мА – RAW_MIN = 819;
RAW_MAX – максимальный код АЦП, определяется формулой 2 n -1;
OUT_MIN – минимальное значение инженерной величины;
OUT_MAX – максимальное значение инженерной величины.

Минимальный код АЦП соответствующий минимальному значению входной инженерной величины определяется формулой

AI_MIN – минимальное значение выхода датчика;

AI_MAX – максимальное значение выхода датчика.

Пример. Датчик давления с выходным сигналом 4-20 мА и диапазоном измерения 100 – 1000 кПа подключен к 12 бит модулю аналогового ввода. Код АЦП — 2765

2. Аналоговый датчик с квадратичной характеристикой

В случае если подкоренное выражение принимает отрицательное значение, то

Код функции написанной на ST для выполнения процедуры масштабирования (Код написан в среде Tristation 1131)

ITnan

Все публикации Хабрахабр и Гиктаймс в одном месте
Выбран стиль: blue

Плавное масштабирование текста +5

  • 30.03.18 03:10 •
  • small-pro •
  • #352392 •
  • Хабрахабр •
  • 6
  • 1900

Поиск

Самые читаемые:

Самые обсуждаемые:

2015 ITnan.ru Design by Styleshout.

Права на текст статей, расположенные на сайте, принадлежат их авторам. Источники статей: Хабрахабр и Гиктаймс.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL