This is not about abbreviation of names, but about portability. For different platforms, you have to distinguish between these things in different ways.
In Std-C, long can be 32 or 64 bits, depending on your compiler / target, so you can not safely assume that this is a certain size. Thus, the author of the library types its own type, guaranteeing a certain size, with knowledge of the target platform.
eg.
#ifdef _WIN32 typedef __int64 INT64;
And if compilers change type properties in future versions, types can be edited in one place.
In the past, you also had a typical case where an int could be 16 or 32 bits in size, so you could not just use the raw int type in code where you need the DWORD size argument.
Therefore, you have things like LPARAM and WPARAM .
It is also used as a form of abstraction. This is why you see typedefs as
typedef int Handle;
Since while it is int , the author of the library reserves the opportunity to change it later on the track to something else, say, void * or any other type that they consider necessary.
But the client code does not have to know this int specifically, as this is exactly what it is now. All the client needs to know is to pass it along with functions that accept the Handle type.
Typedefs also allow you to configure at compile time. For example. some libraries may be of type Real for real numbers. It can be defined as
#ifdef USE_DOUBLE_PREC typedef double Real; #else typedef float Real; #endif
And the library user can optionally set /DUSE_DOUBLE_PREC when compiling to get double precision float support, but the important thing is that no library code should be changed for this, since it was abstracted.