C28623

warning C28623: Unsigned cast of GetMessagePos() coordinates. Use GET_X_LPARAM/GET_Y_LPARAM instead of LOWORD/HIWORD

Systems with multiple monitors can have negative x-coordinates and y-coordinates. On such systems, GetMessagePos may therefore return negative values. However, because LOWORD and HIWORD treat the coordinates as unsigned quantities, they should not be used.

Example

PREfast reports the warning for the following example.

DWORD dw = GetMessagePos();
POINT ppt;

ppt.x = LOWORD(dw);
ppt.y = HIWORD(dw);

The following example avoids the error.

DWORD dw = GetMessagePos();
POINT ppt;

ppt.x = GET_X_LPARAM(dw);
ppt.y = GET_Y_LPARAM(dw);