GDI DPtoLP() Function Cannot Return Value Beyond (-32768, 32767) (287168)



The information in this article applies to:

  • Microsoft Windows 95
  • Microsoft Windows 98
  • Microsoft Windows 98 Second Edition
  • Microsoft Windows Millennium Edition

This article was previously published under Q287168

SYMPTOMS

The DPtoLP function converts device coordinates into logical coordinates. The conversion depends on the mapping mode of the device context, the settings of the origins and extents for the window and viewport, and the world transformation.

This function is declared in wingdi.h as:
BOOL DPtoLP(
  HDC hdc,           // handle to device context
  LPPOINT lpPoints,  // array of points
  int nCount         // count of points in array
);
				
The x and y coordinates that are contained in each POINT structure are transformed. However, the transformation may result in a value beyond the range of (-32768, 32767). If this occurs, the DPtoLP function returns -32768 or 32767 only, which is not expected by the caller.

CAUSE

In Windows 95, Windows 98, and Windows Millennium Edition (Me), the thunk layer converts the POINT array of 32-bit coordinate values to an array of 16-bit coordinate values and back. Therefore, in these versions of Windows, DPtoLP cannot return a value larger than can be represented by a signed 16-bit integer (ranging from -32768 through 32767, inclusive).

STATUS

Microsoft has confirmed this to be a design limitation in the Microsoft products that are listed at the beginning of this article.

Modification Type:MinorLast Reviewed:12/17/2004
Keywords:kbprb KB287168