Friday, December 19, 2014

WndProc di C# WPF - VS2010

Pada winFrom C#, jika ingin menggunakan wndProc, caranya sangat mudah, tinggal mengoverride fungsi void WndProc, contohnya :

protected override void WndProc(ref Message m)
{
    if (m.Msg == WM_DEVICECHANGE)
    {
        // Handle WM_DEVICECHANGE...
    }

    base.WndProc(ref m);
}


Namun jika kita menggunakan WPF, nah ceritanya beda lagi. Soalnya di WPF tidak ada fungsi untuk meng-override "WndProc". So.... Kita butuh fungsi lain yang dapat menghubungkan program kita dengan WndProc tersebut. Di C# WPF, dalam System.Windows.Interop, Terdapat HwndSource yang dapat kita gunakan untuk terhubung dengan WndProc. Jika melihat dokumentasi MSDN


"The HwndSource class implements its own window procedure.  This window procedure is used to process important window messages, such as those related to layout, rendering, and input.  However, you can also hook the window procedure for your own use.  You can specify your own hook during construction by setting the HwndSourceParameters.HwndSourceHook property, or you can also use AddHook and RemoveHook to add and remove hooks after the window has been created"


Nah terlihat HwndSource dapat digunakan untuk melakukan pemrosesan window message yang berhubungan dengan layout, render, atau input dan dapat pula digunakan untuk mengaitkan window message sesuai kebutuhan aplikasi yang kita gunakan. Contoh penggunaannya :
Misalkan ada GUI dengan xml :






Kemudian, untuk mengimplementasi HwndSource, kodenya seperti terlihat di bawah :








No comments:

Post a Comment