using System;
using System.IO;
using System.Windows;
using SHJX.Service.View.View;
using SHJX.Service.Common.ReadXML;
using SHJX.Service.Common.Extend;
using System.Runtime.InteropServices;
using SHJX.Service.Common.UserDelegate;
using SHJX.Service.Common.ExtendElement;
using SHJX.Service.ModelView;
using SHJX.Service.Common.Logging;
using Microsoft.Extensions.Logging;
namespace SHJX.Service.View
{
///
/// MainForm.xaml 的交互逻辑
///
public partial class MainForm : Window
{
private static readonly ILogger logger = LogFactory.BuildLogger(typeof(MainForm));
private readonly ReadConfigUtil _config;
private readonly MainViewModel _viewModel;
public readonly MainViewModel Maincontroller;
private SettingForm _settingForm;
private AboutForm _about;
private ManualForm _manual;
private TemplateWindow _template;
private ModifyResult _modifyResult;
///
/// 配置文件读取
///
public MainForm()
{
WindowsSleep(true);
InitializeComponent();
ResizeMode = ResizeMode.CanMinimize;
}
private int cameraNum = 0;
public MainForm(ReadConfigUtil config)
{
try
{
WindowsSleep(true);
_viewModel = new MainViewModel(config, out int camera);
cameraNum = camera;
DataContext = _viewModel;
Maincontroller= _viewModel;
Messager.Register("ScreenShot", ScreenShot);
Messager.Register("ShowWindow", ShowWindow);
Messager.Register("SystemMinSize", SystemMinSize);
InitializeComponent();
_config = config;
ResizeMode = ResizeMode.CanMinimize;
}
catch (Exception ex)
{
logger.LogError(ex.Message);
}
}
private void WaterMachineOpenClick(object sender, EventArgs e)
{
try
{
UMessageBox.Info("请确认:\r\r 1: 【冷凝水机】\r 2:【空气压缩机】\r\r两者均已开启!!!\r否则对设备造成严重损害!").Equals(MessageBoxResult.Yes);
this.beiginTask.IsEnabled = true;
}
catch (Exception ex)
{
logger.LogError(ex.Message);
}
}
private void WaterMachineCloseClick(object sender, EventArgs e)
{
try
{
this.beiginTask.IsEnabled = false;
}
catch (Exception ex)
{
logger.LogError(ex.Message);
}
}
#region 窗体休眠
//定义API函数
[DllImport("kernel32.dll")]
private static extern uint SetThreadExecutionState(uint esFlags);
private const uint ES_SYSTEM_REQUIRED = 0x00000001;
private const uint ES_DISPLAY_REQUIRED = 0x00000002;
private const uint ES_CONTINUOUS = 0x80000000;
public static void WindowsSleep(bool sleepOrNot)
{
if (sleepOrNot)
{
SetThreadExecutionState(ES_CONTINUOUS | ES_DISPLAY_REQUIRED | ES_SYSTEM_REQUIRED);//阻止休眠时调用
}
else
{
//恢复休眠时调用
SetThreadExecutionState(ES_CONTINUOUS);
}
}
#endregion
#region 窗体最大化
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
if (this.ActualHeight > SystemParameters.WorkArea.Height ||
this.ActualWidth > SystemParameters.WorkArea.Width)
{
WindowState = WindowState.Normal;
btnMaximize_Click(null, null);
}
}
///
/// 最大化
///
private void btnMaximize_Click(object sender, RoutedEventArgs e)
{
this.Left = 0; //设置位置
this.Top = 0;
Rect rc = SystemParameters.WorkArea; //获取工作区大小
this.Width = rc.Width;
this.Height = rc.Height;
}
#endregion
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
WindowsSleep(false);
}
private void ScreenCapture_Click(object sender, RoutedEventArgs e)
{
Dispatcher.Invoke(new Action(() => ScreenShot(null)));
}
public void ScreenShot(object obj)
{
var bit = this.ScreenConvertToBitmap();
DirectoryInfo d = new DirectoryInfo(Path.Combine(Directory.GetCurrentDirectory(), $"cache\\{DateTime.Now:yyyy-MM-dd}"));
if (!d.Exists) d.Create();
var photoName = $"软件截图{DateTime.Now:yyyyMMddHHmmssfff}.png";
bit.Save(Path.Combine(d.FullName, photoName));
UMessageBox.SuccessTip("截图保存成功!");
}
private void SystemMinSize(object obj)
{
WindowState = WindowState.Minimized;
}
public void ShowWindow(object name)
{
switch (name.ToString())
{
case "manual":
_manual = new ManualForm(_config);
_manual.ShowDialog();
break;
case "setting":
_settingForm = new SettingForm(Maincontroller, _config);
_settingForm.ShowDialog();
break;
case "about":
_about = new AboutForm(_config);
_about.ShowDialog();
break;
case "template":
_template = new TemplateWindow(_config);
_template.ShowDialog();
break;
}
}
private void cameraNumCombobox_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
//if (!cameraNumCombobox.IsLoaded)
// return;
//if (e.RemovedItems.Count >0)
//{
// if (cameraNum.ToString() == cameraNumCombobox.Text.ToString())
// {
// }
// else
// {
// cameraNumCombobox.Text = cameraNum.ToString();
// UMessageBox.Error("只检测到" + cameraNum + "个相机,请检查相机的连接和相机参数配置是否有问题");
// }
//}
}
private void cameraNumCombobox_DropDownClosed(object sender, EventArgs e)
{
if (cameraNum.ToString() == cameraNumCombobox.Text.ToString()||cameraNumCombobox.Text == "0")
{
}
else
{
cameraNumCombobox.Text = cameraNum.ToString();
UMessageBox.Error("只检测到" + cameraNum + "个相机," +
"请检查相机的连接和相机参数配置是否有问题");
}
}
private void Label_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
_modifyResult = new ModifyResult();
_modifyResult.ShowDialog();
}
}
}