private IntPtr _WndProc(IntPtr hwnd, WM msg, IntPtr wParam, IntPtr lParam) { // Don't do this if called within the SystemParameters2 constructor if (_UpdateTable != null) { List <_SystemMetricUpdate> handlers; if (_UpdateTable.TryGetValue(msg, out handlers)) { Assert.IsNotNull(handlers); foreach (var handler in handlers) { handler(wParam, lParam); } } } return(NativeMethodsShell.DefWindowProc(hwnd, msg, wParam, lParam)); }
private static IntPtr _WndProc(IntPtr hwnd, WM msg, IntPtr wParam, IntPtr lParam) { IntPtr ret = IntPtr.Zero; MessageWindow hwndWrapper = null; if (msg == WM.CREATE) { var createStruct = (CREATESTRUCT)Marshal.PtrToStructure(lParam, typeof(CREATESTRUCT)); GCHandle gcHandle = GCHandle.FromIntPtr(createStruct.lpCreateParams); hwndWrapper = (MessageWindow)gcHandle.Target; s_windowLookup.Add(hwnd, hwndWrapper); } else { if (!s_windowLookup.TryGetValue(hwnd, out hwndWrapper)) { return(NativeMethodsShell.DefWindowProc(hwnd, msg, wParam, lParam)); } } Assert.IsNotNull(hwndWrapper); WndProc callback = hwndWrapper._wndProcCallback; if (callback != null) { ret = callback(hwnd, msg, wParam, lParam); } else { ret = NativeMethodsShell.DefWindowProc(hwnd, msg, wParam, lParam); } if (msg == WM.NCDESTROY) { hwndWrapper._Dispose(true, true); GC.SuppressFinalize(hwndWrapper); } return(ret); }