Использование проблемы API LPtoDP (GDI API) - PullRequest
0 голосов
/ 08 декабря 2010


Я подключаю ExtTextOut GDI API. Там я хочу получить точное местоположение выходной строки.

BOOL ExtTextOut( 
  __in  HDC hdc, 
  __in  int X, 
  __in  int Y, 
  __in  UINT fuOptions, 
  __in  const RECT *lprc, 
  __in  LPCTSTR lpString, 
  __in  UINT cbCount, 
  __in  const INT *lpDx 
); 

В конкретном случае я получаю ETO_CLIPPED для параметра fuOptions, что означает, что я могу получить местоположение строки из параметра RECT или из параметров X, Y.
Однако, когда я использую API LPtoDP для перевода местоположения (RECT или X, Y), я получаю неправильное местоположение (перед переводом я получаю отрицательные значения).

Я предполагаю, что у него неправильное смещение, однако, когда я проверяю следующее, я не вижу признаков этого:

Режим карты - MM_TEXT (по умолчанию)
GetWindowOrgEx составляет 0,0
GetViewportOrgEx составляет 0,0
GetWindowExtEx - 1,1
GetViewportExtEx составляет 1,1

У кого-нибудь есть идеи, любая помощь будет оценена. Благодаря.

1 Ответ

0 голосов
/ 14 декабря 2010

Очевидно, указав ETO_CLIPPED в параметре ExtTextOut fuOptions не означает, что текст будет выводиться в этот клип, а это означает, что не гарантируется, что контекст устройства имеет тип контекста устройства отображения, а используемый контекст устройства может быть контекстом устройства памяти, как в моем случае, и поэтому не содержит правильных координат.

msdn: ETO_CLIPPED Текст будет обрезан по прямоугольнику.

...