У меня есть пользовательский элемент управления C #, встроенный в форму win32, которая запрограммирована с использованием Delphi7. Как я могу захватить событие закрытия родительской формы, когда пользователь нажимает X в этом окне?
OnClose, FormClosing, ParentFormClose ….
. Ни одно из этих событий не сработало.
У меня есть следующие коды, но он не срабатывает OnHwndMessage
, когда я закрываю окно.
public VitalsQualifierEntry () { --the constructor
InitializeComponent ();
……..
IntPtr handle = GetParent(this.Handle);
if (handle != IntPtr.Zero)
{
hWndTarget = handle;
}
//Create a new delegate instance for our own handler method OnHwndMessage.
//Fetches the *existing* native callback method and stores it locally.
//Sets the callback method to our custom callback.
newWndProc = new WndProcDelegate(OnHwndMessage);
oldWndProc = GetWindowLong(hWndTarget, GWL_WNDPROC);
var result = SetWindowLong(hWndTarget,GWL_WNDPROC,Marshal.GetFunctionPointerForDelegate(newWndProc));
}
IntPtr OnHwndMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam)
{
if (msg == WM_CLOSE)
{
//restores the *original* callback
if (newWndProc != null)
{
var result = SetWindowLong(hWndTarget, GWL_WNDPROC, oldWndProc);
newWndProc = null;
oldWndProc = IntPtr.Zero;
}
//reset isPopup
if (isPopup == true)
{
_isPopup = false;
}
}
return CallWindowProc(oldWndProc, hWnd, msg, wParam, lParam);
}