Handles are just integer values. Specifically the word "handle" is just a fancy way to say "a variable which stores the address to a specific location in memory." Thus assigning a variable to an image's handle is essentially creating a second handle for that image.
As for why using DrawImage with your variable works, that is because the command assumes the first number is a handle for an image. Thus, no matter what number you put there, it will look for an image at that address. If it finds one great, if not you get an error.
**********
ADDITION: Cross posted answers. His analogy with pointers is correct (actually, come to think of, a handle IS a pointer. Meanwhile another good analogy I can think of is a website URL. The URL text simply refers to a router number which is the location of the website.
As for why using DrawImage with your variable works, that is because the command assumes the first number is a handle for an image. Thus, no matter what number you put there, it will look for an image at that address. If it finds one great, if not you get an error.
**********
ADDITION: Cross posted answers. His analogy with pointers is correct (actually, come to think of, a handle IS a pointer. Meanwhile another good analogy I can think of is a website URL. The URL text simply refers to a router number which is the location of the website.