public void SetMarqueeProgressBar(bool marquee)
        {
            if (CurrentProgressBarType == TaskDialogProgressBarType.None)
            {
                throw new InvalidOperationException(Resource.InvalidProgressBarModification);
            }

            SendMessage(Handle, TASKDIALOG_MESSAGE.TDM_SET_MARQUEE_PROGRESS_BAR, (IntPtr)(marquee ? 1 : 0), IntPtr.Zero);

            CurrentProgressBarType = marquee ? TaskDialogProgressBarType.Marquee : TaskDialogProgressBarType.Default;
        }
        public void Navigate(TaskDialogPage taskDialogPage)
        {
            taskDialogPage.nativeTaskDialog.pfCallback     = TaskDialog.CurrentPage.nativeTaskDialog.pfCallback;
            taskDialogPage.nativeTaskDialog.lpCallbackData = TaskDialog.CurrentPage.nativeTaskDialog.lpCallbackData;

            TaskDialog.PreviousPage = TaskDialog.CurrentPage;
            TaskDialog.CurrentPage  = taskDialogPage;

            TaskDialog.CurrentPage.PrepareShow(this);

            CurrentProgressBarType = taskDialogPage.ProgressBar;

            SendMessage(Handle, TASKDIALOG_MESSAGE.TDM_NAVIGATE_PAGE, IntPtr.Zero, ref taskDialogPage.nativeTaskDialog);

            TaskDialog.PreviousPage.activeTaskDialog = null;
        }
        private TaskDialogResult Show(IntPtr hWnd, out int button, out int radioButton, out bool verificationFlagChecked)
        {
            if (OsVersionInfo.dwMajorVersion < 6 /* OSがVista以上であること */)
            {
                throw new InvalidOperationException(Resource.OSVersionError);
            }

            if (DllVersionInfo.dwMajorVersion < 6)
            {
                throw new InvalidOperationException(Resource.ComCtl32VersionError);
            }

            OwnerHandle = hWnd;

            button                  = 0;
            radioButton             = 0;
            verificationFlagChecked = false;

            var callback       = new TaskDialogCallbackProc(TaskDialogCallback);
            var callbackHandle = GCHandle.Alloc(callback);

            try
            {
                TaskDialog.CurrentPage.nativeTaskDialog.pfCallback = callback;

                TaskDialog.CurrentPage.PrepareShow(this);

                CurrentProgressBarType = TaskDialog.CurrentPage.ProgressBar;

                int hResult = TaskDialogIndirect(ref TaskDialog.CurrentPage.nativeTaskDialog, out button, out radioButton, out verificationFlagChecked);

                if (hResult < 0)
                {
                    Marshal.ThrowExceptionForHR(hResult);
                }

                if (internalExceptions != null)
                {
                    throw new AggregateException(internalExceptions).Flatten();
                }
            }
            finally
            {
                if (TaskDialog.PreviousPage != null)
                {
                    TaskDialog.PreviousPage.activeTaskDialog = null;
                }

                TaskDialog.CurrentPage.activeTaskDialog            = null;
                TaskDialog.CurrentPage.nativeTaskDialog.pfCallback = null;
                if (callbackHandle.IsAllocated)
                {
                    callbackHandle.Free();
                }
            }

            switch ((TASKDIALOG_COMMAND_ID)button)
            {
            case TASKDIALOG_COMMAND_ID.IDOK:
                return(TaskDialogResult.Ok);

            case TASKDIALOG_COMMAND_ID.IDYES:
                return(TaskDialogResult.Yes);

            case TASKDIALOG_COMMAND_ID.IDNO:
                return(TaskDialogResult.No);

            case TASKDIALOG_COMMAND_ID.IDCANCEL:
                return(TaskDialogResult.Cancel);

            case TASKDIALOG_COMMAND_ID.IDRETRY:
                return(TaskDialogResult.Retry);

            case TASKDIALOG_COMMAND_ID.IDCLOSE:
                return(TaskDialogResult.Close);

            default:
                return(TaskDialogResult.UserButtun);
            }
        }