DevCon bits: WM_MOUSEMOVE, mp1, mp3 и SHORT

User avatar
Eugene Gorbunoff
Site Admin
Posts: 685
Joined: Sat Apr 09, 2005 11:18
Location: St.Petersburg, Russia

DevCon bits: WM_MOUSEMOVE, mp1, mp3 и SHORT

Postby Eugene Gorbunoff » Fri Apr 29, 2011 10:02

Glassman:

Вот еще засада нарисовалась. К примеру координаты мыши WM_MOUSEMOVE описаны как SHORT, т.е. могут быть отрицательными. И, к примеру, делаешь:

POINTL pos;
pos.x = SHORT1FROMMP(mp1);
pos.y = SHORT2FROMMP(mp1);

Т.е. вроде все правильно. Но, SHORT1FROMMP объявлены как

#define SHORT1FROMMP(mp) ((USHORT)(ULONG)(mp))
#define SHORT2FROMMP(mp) ((USHORT)((ULONG)mp >> 16))

Т.е. не будет у вас нифига отрицательных чисел. Т.е. надо писать:

pos.x = (short)SHORT1FROMMP(mp1);
pos.y = (short)SHORT2FROMMP(mp1);

Бред? Ну кто, спрашивается, бимерам мешал сделать SHORT1FROMMP и USHORT1FROMMP? А теперь попробуй отловить все ситуации, где вот такая котовасия со знаком может выйти боком...

Return to “Developers / Разработчики”

Who is online

Users browsing this forum: No registered users and 1 guest

cron