Εξαρτάται απ' το αν αυτό που θέλεις να κάνεις είναι κάτι που πρέπει να γίνει άμεσα γιά επαγγελματικούς λόγους ή απλά γιά να δεις πως γίνεται Drag & Drop χρησιμοποιώντας graphic objects.
Ένας πιο γρήγορος τρόπος είναι αυτός που σκέφτηκες, απλά λάβε υπόψη σου το Z order των controls και το region property (μπορείς να φτιάξεις και δικό σου στο σχήμα που θέλεις να δείξεις από graphicspath ή regiondata).
Ο άλλος τρόπος είναι χρονοβόρος αλλά έχει καλύτερα αποτελέσματα.
Όσον αφορά το GDI+, όταν έχουμε ένα graphics object είτε αυτό είναι από την OnPaint method ενός control είτε από την CreateGraphics μπορούμε να χρησιμοποιήσουμε την drawImage method.
Αφού το ζωγραφίσεις τότε μπορείς να φτιάξεις ένα graphicsPath object από το περίγραμμα του σχήματος που θέλεις να μετακινήσεις ( χωρίς να λάβεις υπ' όψιν σου κάποιο ουδέτερο χρώμα ),
γιατί στην δική σου περίπτωση το σχήμα δεν είναι συμμετρικό.
Μετά χρησιμοποιώντας την IsVisible method ελέγχεις αν ο δείκτης του mouse είναι "μέσα" στο σχήμα σου μετά από το mouseDown event.
Τότε απλά κλειδώνεις τις συντεταγμένες του σχήματος σου και τις μετακινείς σε συνδυασμό με αυτές του ποντικιού με τέτοιον τρόπο έτσι ώστε να μην γίνεται snap το σχήμα στο mouse cursor.
Όταν γίνει mouseup τότε απλά σταματάς. Αυτός είναι και ο πιό σωστός τρόπος γιατί η μετακίνηση πρέπει να ξεκινήσει όταν το mouse είναι μέσα στην πέτρα και όχι σε κάποιο τετράγωνο που την περιέχει.
Η σειρά με την οποία ζωγραφίζονται τα σχήματα υποδηλώνει και το Z order δηλαδή όταν η πέτρα μπει μεσα στο ποτήρι,
ζωγραφίζουμε πρώτα την πέτρα και μετά το ποτήρι γιατί είναι ημιδιάφανο και πρέπει να φαίνεται ότι η πέτρα είναι μέσα σε αυτό.
Το πραγματικά δύσκολο είναι ότι δυστυχώς δεν πρεπει κανονικά να επιτρεπεται να βάζεις την πέτρα μέσα στο ποτήρι από τα τοιχώματα αλλά από την κορυφή του, αλλά ου μπλέξεις με collision detection.
Αυτά ισχύουν είτε χρησιμοποιήσεις WPF είτε GDI είτε XNA.
Αν σε ενδιαφέρει έχω δύο πολύ μικρά παραδείγματα να σου στείλω γιά να ξεκινήσεις, το ένα φτιάχνει γράφο (κύκλοι που ενώνονται με γραμμές) γιά να δεις πως γίνεται drag and drop και ένα άλλο που κάνει animate κύκλους χωρίς timers και DoEvents χρησιμοποιώντας το OnApplicationIdle event και την peekMessage api.