private IntPtr WndProc(HWND hwnd, WM msg, IntPtr wParam, IntPtr lParam, IntPtr id, IntPtr data)
{
IntPtr retval = IntPtr.Zero;
try {
retval = WndProcOverride(hwnd, msg, wParam, lParam, id, data);
} finally {
if (_hwnd != HWND.NULL) {
Debug.Assert(_hwnd == hwnd);
if (msg == WM.NCDESTROY) {
Dispose();
} else if (msg == _disposeMessage && wParam == _wndprocPtr) {
DisposeHelper(lParam == IntPtr.Zero ? false : true);
}
}
}
return retval;
}