Çözüldü C#-ta ReleaseCapture() ve SendMessage(Handle, 0x112, 0xf012, 0) kodlarının mantığı nedir?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

rauf.k

Centipat
Katılım
16 Ocak 2022
Mesajlar
159
Çözümler
2
Daha fazla  
Cinsiyet
Erkek
Arkadaşlar merhaba. Panel ile formu hareket ettirme konusunda araştırmalarım sonucunda aşağıdaki kodları buldum. Ancak kodun mantığı anlatılmamış. Kodlar şöyle:

İlk önce şu 4 satır kodlar genel olarak tanımlanıyor.

[DllImport("user32.DLL", EntryPoint = "ReleaseCapture")]
private extern static void ReleaseCapture();
[DllImport("user32.DLL", EntryPoint = "SendMessage")]
private extern static void SendMessage(System.IntPtr hWnd, int wMsg, int wParam, int lParam);

Daha sonra panelin MouseDown olayına aşağıdaki kodlar yazılıyor:
ReleaseCapture();
SendMessage(Handle, 0x112, 0xf012, 0);

Şimdi bu yazdığım kodların mantığını anlamak istiyorum. Yardım edersiniz çok sevinirim.
 
Çözüm
Bunlar Windows API'si, direk Win32 belgelerindeki açıklamaları okuyabilirsin.
ReleaseCapture, mouse ile yakalanmış bir pencereyi serbest bırakır.
SendMessage, bununla handle'sini girdiğin pencereye mesaj yollarsın, ikinci parametre mesaj türüdür bu kod için 0x112 WM_SYSCOMMAND'a denk geliyor, üçüncü parametre ise ikinci parametrenin sağladığı komutlardır 0xf012 burada iki komut için birleştirme yapılmış 0xF010 (SC_MOVE) + 0x2 (HTCAPTION) = 0xF012 (SC_DRAGMOVE).

Bunlar Windows API'si, direk Win32 belgelerindeki açıklamaları okuyabilirsin.
ReleaseCapture, mouse ile yakalanmış bir pencereyi serbest bırakır.
SendMessage, bununla handle'sini girdiğin pencereye mesaj yollarsın, ikinci parametre mesaj türüdür bu kod için 0x112 WM_SYSCOMMAND'a denk geliyor, üçüncü parametre ise ikinci parametrenin sağladığı komutlardır 0xf012 burada iki komut için birleştirme yapılmış 0xF010 (SC_MOVE) + 0x2 (HTCAPTION) = 0xF012 (SC_DRAGMOVE).

 
Çözüm

Geri
Yukarı