Exemplo n.º 1
0
        /// <summary>Common native callback for Task Dialogs. Will route events to the user event handler.</summary>
        /// <param name="refData">TODO: Currently unused, would need complex marshaling of data.</param>
        internal IntPtr CommonCallbackProc(IntPtr hWnd, uint uEvent, UIntPtr wParam, IntPtr lParam, IntPtr refData)
        {
            //Store window handle
            _hwnd = hWnd;

            //Handle event
            switch ((NativeMethods.TaskDialogNotification)uEvent)
            {
            case NativeMethods.TaskDialogNotification.TDN_CREATED:
                //Dispatch buffered messages
                DispatchMessageQueue();

                if (Created != null)
                {
                    Created(this, new EventArgs());
                }
                break;

            case NativeMethods.TaskDialogNotification.TDN_NAVIGATED:
                //Dispatch buffered messages (copied in from the new task dialog we are navigating to)
                DispatchMessageQueue();

                if (Navigating != null)
                {
                    Navigating(this, new EventArgs());
                }
                break;

            case NativeMethods.TaskDialogNotification.TDN_BUTTON_CLICKED:
                if (ButtonClick != null)
                {
                    ClickEventArgs args = new ClickEventArgs((int)wParam);
                    ButtonClick(this, args);

                    //Return value given by user to prevent closing (false will close)
                    return((IntPtr)((args.PreventClosing) ? 1 : 0));
                }
                break;

            case NativeMethods.TaskDialogNotification.TDN_HYPERLINK_CLICKED:
                if (HyperlinkClick != null)
                {
                    HyperlinkClick(this, new HyperlinkEventArgs(Marshal.PtrToStringUni(lParam)));
                }
                break;

            case NativeMethods.TaskDialogNotification.TDN_TIMER:
                if (Tick != null)
                {
                    TimerEventArgs args = new TimerEventArgs((long)wParam);
                    Tick(this, args);

                    //Return value given by user to reset timer ticks
                    return((IntPtr)((args.ResetCount) ? 1 : 0));
                }
                break;

            case NativeMethods.TaskDialogNotification.TDN_DESTROYED:
                //Set dialog as not "showing" and drop handle to window
                _hwnd = IntPtr.Zero;

                if (Destroyed != null)
                {
                    Destroyed(this, new EventArgs());
                }
                break;

            case NativeMethods.TaskDialogNotification.TDN_RADIO_BUTTON_CLICKED:
                if (RadioButtonClick != null)
                {
                    RadioButtonClick(this, new ClickEventArgs((int)wParam));
                }
                break;

            case NativeMethods.TaskDialogNotification.TDN_DIALOG_CONSTRUCTED:
                if (Constructed != null)
                {
                    Constructed(this, new EventArgs());
                }
                break;

            case NativeMethods.TaskDialogNotification.TDN_VERIFICATION_CLICKED:
                if (VerificationClick != null)
                {
                    VerificationClick(this, new CheckEventArgs((uint)wParam == 1));
                }
                break;

            case NativeMethods.TaskDialogNotification.TDN_HELP:
                if (Help != null)
                {
                    Help(this, new EventArgs());
                }
                break;

            case NativeMethods.TaskDialogNotification.TDN_EXPANDO_BUTTON_CLICKED:
                if (Expanding != null)
                {
                    Expanding(this, new ExpandEventArgs((uint)wParam != 0));
                }
                break;
            }

            return(IntPtr.Zero);
        }
        /// <summary>Common native callback for Task Dialogs. Will route events to the user event handler.</summary>
        /// <param name="refData">TODO: Currently unused, would need complex marshaling of data.</param>
        internal IntPtr CommonCallbackProc(IntPtr hWnd, uint uEvent, UIntPtr wParam, IntPtr lParam, IntPtr refData) {
            //Store window handle
            _hwnd = hWnd;
            
            //Handle event
            switch ((NativeMethods.TaskDialogNotification)uEvent) {
                case NativeMethods.TaskDialogNotification.TDN_CREATED:
                    //Dispatch buffered messages
                    DispatchMessageQueue();

                    if (Created != null)
                        Created(this, new EventArgs());
                    break;

                case NativeMethods.TaskDialogNotification.TDN_NAVIGATED:
                    //Dispatch buffered messages (copied in from the new task dialog we are navigating to)
                    DispatchMessageQueue();

                    if (Navigating != null)
                        Navigating(this, new EventArgs());
                    break;

                case NativeMethods.TaskDialogNotification.TDN_BUTTON_CLICKED:
                    if (ButtonClick != null) {
                        ClickEventArgs args = new ClickEventArgs((int)wParam);
                        ButtonClick(this, args);

                        //Return value given by user to prevent closing (false will close)
                        return (IntPtr)((args.PreventClosing) ? 1 : 0);
                    }
                    break;

                case NativeMethods.TaskDialogNotification.TDN_HYPERLINK_CLICKED:
                    if (HyperlinkClick != null)
                        HyperlinkClick(this, new HyperlinkEventArgs(Marshal.PtrToStringUni(lParam)));
                    break;

                case NativeMethods.TaskDialogNotification.TDN_TIMER:
                    if (Tick != null) {
                        TimerEventArgs args = new TimerEventArgs((long)wParam);
                        Tick(this, args);

                        //Return value given by user to reset timer ticks
                        return (IntPtr)((args.ResetCount) ? 1 : 0);
                    }
                    break;

                case NativeMethods.TaskDialogNotification.TDN_DESTROYED:
                    //Set dialog as not "showing" and drop handle to window
                    _hwnd = IntPtr.Zero;

                    if (Destroyed != null)
                        Destroyed(this, new EventArgs());
                    break;

                case NativeMethods.TaskDialogNotification.TDN_RADIO_BUTTON_CLICKED:
                    if (RadioButtonClick != null)
                        RadioButtonClick(this, new ClickEventArgs((int)wParam));
                    break;

                case NativeMethods.TaskDialogNotification.TDN_DIALOG_CONSTRUCTED:
                    if (Constructed != null)
                        Constructed(this, new EventArgs());
                    break;

                case NativeMethods.TaskDialogNotification.TDN_VERIFICATION_CLICKED:
                    if (VerificationClick != null)
                        VerificationClick(this, new CheckEventArgs((uint)wParam == 1));
                    break;

                case NativeMethods.TaskDialogNotification.TDN_HELP:
                    if (Help != null)
                        Help(this, new EventArgs());
                    break;

                case NativeMethods.TaskDialogNotification.TDN_EXPANDO_BUTTON_CLICKED:
                    if (Expanding != null)
                        Expanding(this, new ExpandEventArgs((uint)wParam != 0));
                    break;
            }

            return IntPtr.Zero;
        }