I haven't done any graphics programming in Windows myself yet, and don't really look forward to.
But looking at the definition of CopyRect on MSDN, I think that you might have a couple of misunderstandings of the (less than subtle) difference between using the function (CopyRect) and "1= the other".
The function is transferring the data from the memory area pointed to by rc to the memory area pointed to by g_panrec. That's also your first misunderstanding, as the second parameter (rc) is the source and the first parameter (g_panrec) is the destination
Syntax
BOOL CopyRect(
__out LPRECT lprcDst,
__in const RECT *lprcSrc
);
Parameters
lprcDst [out]
Pointer to the RECT structure that receives the logical coordinates of the source rectangle.
lprcSrc [in]
Pointer to the RECT structure whose coordinates are to be copied in logical units.
As you can see, both a parameters are defined differently, so there a chance that
a) the function in fact is doing more than just a simple memory transfer
b) the two structures are of different size, which can lead to unforeseen side effects (bugs, ever heard of "buffer overflow"?)
With the assignment you mentioned however, you are just assigning (even when doing it the right way around) the value of the source pointer to the destination pointer, so both pointers now direct any further access to the same area of memory. That is certainly not what you want to do, specially not when you have to consider option b) from above, that the structures those pointers point to are of different size...
Ralf