protected override void WndProc(ref Message m) { if (_designer is null) { DefWndProc(ref m); return; } if (m.Msg == (int)User32.WM.DESTROY) { _designer.RemoveSubclassedWindow(m.HWnd); } if (m.Msg == (int)User32.WM.PARENTNOTIFY && PARAM.LOWORD(m.WParam) == (short)User32.WM.CREATE) { _designer.HookChildHandles(m.LParam); // they will get removed from the collection just above } // We want these messages to go through the designer's WndProc method, and we want people to be able // to do default processing with the designer's DefWndProc. So, we stuff ourselves into the designers // window target and call their WndProc. IDesignerTarget designerTarget = _designer.DesignerTarget; _designer.DesignerTarget = this; Debug.Assert(m.HWnd == Handle, "Message handle differs from target handle"); try { _designer.WndProc(ref m); } catch (Exception ex) { _designer.SetUnhandledException(Control.FromChildHandle(m.HWnd), ex); } finally { // make sure the designer wasn't destroyed if (_designer != null && _designer.Component != null) { _designer.DesignerTarget = designerTarget; } } }