'NMHDR definition conflict?

in richedit.h NMHDR is defined as follows:

typedef struct _nmhdr
{
    HWND    hwndFrom;
    UINT    idFrom;
    UINT    code;
} NMHDR;

in winuser.h, it is defined as :

typedef struct tagNMHDR
{
    HWND      hwndFrom;
    UINT_PTR  idFrom;
    UINT      code;         // NM_ code
}   NMHDR;

note that IdFrom went from being a UINT in richedit.h to a UINT_PTR in winuser.h

when compiling for 32bit that won't make a difference but, when compiling for 64bit, the winuser.h idFrom is going to be 4 bytes larger than the richedit.h idFrom.

I suspect that I must be missing something because a difference in size of 4 bytes between the two structures would have broken a fair amount of code out there but, I don't see how that conflict is resolved.

I would appreciate an explanation of how these two seemingly incompatible definitions can coexist. Thank you for your help.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source