LRESULT is the return type of the function. CALLBACK is its calling convention (
http://en.wikipedia.org/wiki/Calling_convention ). WndProc is the name of the function. hWindow, msg, wParam and lParam are the names of its parameters, while HWND, UINT, WPARAM and LPARAM are the parameters' types. Windows API programming is full of these ugly all caps typedefs. LRESULT, for instance, is actually just an int, IIRC.
When you write a Windows API program, you have to define a Window Class. You define it by filling a struct and passing it to some function (I haven't done this in a while). One of the items in the struct holds a callback function that will be used to process Windows Messages (which might be triggered by user actions such as clicking, typing of moving the mouse, or sent by the system). That callback function is usually named WndProc, but it could be named anything, as long as the types are all correct.
When WndProc is called, the system will pass those four parameters to it so you can process the message. What you named hWindow is a handle to the window which sent the message. msg is the message itself, and the other two can change according to which message is being passed. Further reading:
http://msdn.microsoft.com/en-us/library/ff381408(VS.85).aspx
PS: for most things you might want to do, it's easier, more satifying and much more fun to use a GUI toolkit rather than raw Windows API.