/// <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; }