2010-03-08 20 views

उत्तर

30

जब से तुम WPF में सीधे एक WndProc को परिभाषित नहीं कर सकते, तो आप एक HwndSource प्राप्त है, और यह करने के लिए एक हुक जोड़ने की जरूरत है: आप के लिए

public Window1() 
{ 
    InitializeComponent(); 

    this.SourceInitialized += Window1_SourceInitialized; 
} 

private void Window1_SourceInitialized(object sender, EventArgs e) 
{ 
    WindowInteropHelper helper = new WindowInteropHelper(this); 
    HwndSource source = HwndSource.FromHwnd(helper.Handle); 
    source.AddHook(WndProc);  
} 

const int WM_SYSCOMMAND = 0x0112; 
const int SC_MOVE = 0xF010; 

private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) 
{ 

    switch(msg) 
    { 
     case WM_SYSCOMMAND: 
      int command = wParam.ToInt32() & 0xfff0; 
      if (command == SC_MOVE) 
      { 
      handled = true; 
      } 
      break; 
     default: 
      break; 
    } 
    return IntPtr.Zero; 
} 
+0

ठीक है, +1; मेरे लिए सीखे गए सबक :) –

+0

WndProc वापस क्या करना चाहिए? IntPtr.Zero? – naeron84

+0

यह काम कर रहा है, वापसी मूल्य कोई फर्क नहीं पड़ता। तो IntPrt.Zero बस ठीक है। – naeron84

संबंधित मुद्दे