using FWindSoft.WindowsApi; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Interop; using SysWindow = System.Windows.Window; namespace FWindSoft.Wpf { /* * 一点,窗体自然关闭时取消按钮 * 如果有取消按钮,则窗体可有标题栏关闭,否则不能 */ public static class MessageTip { private const string DefaultCaption = "提示"; public static MessageBoxResult Show(string messageBoxText, string caption, MessageBoxButton button) { return (MessageBoxResult)Show(null, messageBoxText, caption, CreateButtons(button)); } public static MessageBoxResult Show(string messageBoxText, string caption) { return (MessageBoxResult)Show(null, messageBoxText, caption, CreateButtons(MessageBoxButton.OK)); } public static MessageBoxResult Show(string messageBoxText) { return (MessageBoxResult)Show(null, messageBoxText, DefaultCaption, CreateButtons(MessageBoxButton.OK)); } public static MessageBoxResult Show(SysWindow owner, string messageBoxText, string caption, MessageBoxButton button) { return (MessageBoxResult)Show(owner, messageBoxText, caption, CreateButtons(button)); } public static MessageBoxResult Show(SysWindow owner, string messageBoxText, string caption) { return (MessageBoxResult)Show(owner, messageBoxText, caption, CreateButtons(MessageBoxButton.OK)); } public static MessageBoxResult Show(SysWindow owner, string messageBoxText) { string caption = DefaultCaption; if (owner != null && !string.IsNullOrEmpty(owner.Title)) caption = owner.Title; return (MessageBoxResult)Show(owner, messageBoxText, caption, CreateButtons(MessageBoxButton.OK)); } #region 核心显示方法 /// /// /// /// /// /// /// 如果flag,有2的话,则启用关闭按钮 /// public static int Show(SysWindow owner, string messageBoxText, string caption, List buttonItems) { if (buttonItems == null || !buttonItems.Any()) return -1; WinMessageTip tip = new WinMessageTip(buttonItems); tip.Title = caption; if (owner != null) { tip.Owner = owner; } else { //设置主线程窗体为父窗体 var handle = Process.GetCurrentProcess().MainWindowHandle; if (handle != IntPtr.Zero) { var winHelp = new WindowInteropHelper(tip); winHelp.EnsureHandle(); winHelp.Owner = handle; //WinAPi.SetParent(winHelp.EnsureHandle(), handle); } } tip.Message = messageBoxText ?? string.Empty; if (buttonItems.Any(i => i.Flag == 2)) { tip.DisableUseClose = false; } var result = tip.ShowDialog(); if (result != null && result.Value == true) { return tip.Flag; } return 2; } #endregion private static List CreateButtons(MessageBoxButton button) { List items = new List(); switch (button) { case MessageBoxButton.OK: items.Add(new TipButtonItem() { Content = "确定", Flag = 1,IsDefault=true }); break; case MessageBoxButton.OKCancel: items.Add(new TipButtonItem() { Content = "确定", Flag = 1, IsDefault = true }); items.Add(new TipButtonItem() { Content = "取消", Flag = 2 , IsCancel = true }); break; case MessageBoxButton.YesNoCancel: items.Add(new TipButtonItem() { Content = "是", Flag = 6, IsDefault = true }); items.Add(new TipButtonItem() { Content = "否", Flag = 7 }); items.Add(new TipButtonItem() { Content = "取消", Flag = 2, IsCancel = true }); break; case MessageBoxButton.YesNo: items.Add(new TipButtonItem() { Content = "是", Flag = 6, IsDefault = true }); items.Add(new TipButtonItem() { Content = "否", Flag = 7, IsCancel = true }); break; default: break; } return items; } } }