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