Как захватить событие закрытия формы win32, когда пользователь нажимает X - PullRequest
0 голосов
/ 10 марта 2012

У меня есть пользовательский элемент управления 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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...