my compilers cannot use LOWORD i have both msvc6 and dev++
Hmm, well I know msvc does support that macro, it sounds like you might have something weird going on there. However it doesn't matter who needs macros anyway?

Lets go over some definitions first because it sounds like maybe you might have some misunderstanding along the way.

1. DWORD: 32 bit unsigned short integer
2. WORD: 16 bit unsigned short integer

Thus a DWORD can be treated as 2 WORDs stuck together:

DWORD = (WORD)(WORD).

Now with that in mind lets take a look at how these macros are defined in WinDef.h

Code:
#define LOWORD(l)           ((WORD)((DWORD_PTR)(l) & 0xffff))
#define HIWORD(l)           ((WORD)((DWORD_PTR)(l) >> 16))
Thus you can see that it is simply a bit manipulation to obtain the 16 bit value from the 32 bit value.


Gotta go, my daughter just woke up.

happy coding!