Exemplo n.º 1
0
        static int Show(Form owner, string title, TaskDialogCommonIcon icon, string mainInstruction, string content, TaskDialogCommonButtons commonButtons, TaskDialogButton[] buttons)
        {
            if (buttons.Length > 10)
            {
                throw new ArgumentOutOfRangeException("buttons", "Maximum number of buttons is 10.");
            }

            var tdConfig = new TaskDialogConfig();

            tdConfig.Size = (uint)Marshal.SizeOf(tdConfig);
            Debug.Assert(tdConfig.Size == 160);

            tdConfig.Parent          = owner.Handle;
            tdConfig.Instance        = NativeMethods.GetModuleHandle(null);
            tdConfig.Flags           = TaskDialogFlags.PositionRelativeToWindow | (owner.RightToLeft == RightToLeft.Yes ? TaskDialogFlags.RTLLayout : TaskDialogFlags.None);
            tdConfig.CommonButtons   = commonButtons;
            tdConfig.WindowTitle     = title;
            tdConfig.MainIcon        = new IntPtr((int)icon);
            tdConfig.MainInstruction = mainInstruction;
            tdConfig.Content         = content;

            if (buttons.Length > 0)
            {
                var buttonStructSize = Marshal.SizeOf(typeof(TaskDialogButton));
                tdConfig.Buttons = Marshal.AllocHGlobal(buttonStructSize * buttons.Length);
                for (var i = 0; i < buttons.Length; i++)
                {
                    Marshal.StructureToPtr(buttons[i], new IntPtr(tdConfig.Buttons.ToInt64() + i * buttonStructSize), false);
                }
                tdConfig.ButtonCount = (uint)buttons.Length;
            }

            try {
                var button           = 0;
                var radioButton      = 0;
                var verificationFlag = false;
                var rv = NativeMethods.TaskDialogIndirect(ref tdConfig, out button, out radioButton, out verificationFlag);
                if (rv != 0)
                {
                    throw new InvalidOperationException("TaskDialogIndirect failed: " + rv.ToString("X8", CultureInfo.CurrentCulture));
                }
                return(button);
            } finally {
                if (buttons.Length > 0)
                {
                    Marshal.FreeHGlobal(tdConfig.Buttons);
                }
            }
        }
Exemplo n.º 2
0
 public static extern int TaskDialogIndirect(ref TaskDialogConfig pTaskConfig, out int pnButton, out int pnRadioButton, out bool pfVerificationFlagChecked);