логические единицы к единицам устройства - PullRequest
3 голосов
/ 05 марта 2012

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

Итак, учитывая, что я определилначало окна просмотра и начало окна следующим образом ...

POINT VP_Org, WN_Org;
GetViewportOrgEx (dc, VP_Org);
GerWindowOrgEx (dc, WM_Org);

и у меня есть область отсечения R в логических координатах, как преобразовать R в единицы устройства для использования при определении области отсечения?

Другими словами, как мне преобразовать R, чтобы сработало следующее:

RECT R;
ClipRgn = CreateRectRgn (R.left, R.top, R.right, R.bottom)
SelectClipRgn (dc, ClipRgn)

Я знаю, что это выглядит как

R.top = R.top - WN_Org.y +- VP_Org.y;

из эксперимента, но незнать, какой знак использовать для области просмотра.

1 Ответ

2 голосов
/ 05 марта 2012

Вы можете использовать функцию LPtoDP :

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

...