Это довольно сложный вопрос, в основном потому, что у вас есть два совершенно разных набора координат, с которыми нужно иметь дело, и (просто для простоты) Windows использует примерно обратную терминологию, которую использует остальной мир.
Краткий ответ: просто не используйте SetWindowOrg
.Я почти уверен, что мне никогда не удавалось использовать его в реальном коде.
SetViewportOrg
полезен, и он действительно проще, чем описание делает его звучащим - вы просто выбираете, гдеВы хотите, чтобы ваше происхождение было.Например, вы можете захотеть, чтобы ваш рисунок начинался с нижнего левого угла окна.Вы бы сделали это с помощью чего-то вроде:
CRect rect;
GetClientRect(&rect);
pDC->SetViewportOrg(0, rect.Height());
OTOH, если вы хотите иметь возможность рисовать как отрицательные, так и положительные числа, вы можете хотеть, чтобы x = 0 было в левой части окна,но y = 0, чтобы быть посередине между верхней и нижней частью окна.Вы бы сделали это примерно так:
// get rect as above.
pDC->SetViewportOrg(0, rect.Height()/2);
Если бы вы хотели, чтобы центр окна был вашим (0,0), вы бы использовали:
// again, get rect like above
pDC->SetViewportOrg(rect.Width()/2, rect.Height()/2);
Обратите внимание, что основной использует любой из них с режимом отображения, установленным на MM_ISOTROPIC или MM_ANISOTROPIC - здесь вы можете полностью установить координаты самостоятельно.В других режимах [MM_TEXT или MM_ (LO | HI) (ENGLISH | METRIC)] он автоматически устанавливает источник для вас.