using System; using System.Runtime.InteropServices; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Forms; using System.Windows.Input; using System.Windows.Threading; using PipeGallery.Correlator; using PipeGallery.Manage; using PipeGallery.ViewModel; using Button = System.Windows.Controls.Button; using KeyEventArgs = System.Windows.Input.KeyEventArgs; using UserControl = System.Windows.Controls.UserControl; namespace PipeGallery.View { /// <summary> /// RangingPipeDiameterEditView.xaml 的交互逻辑 /// </summary> public partial class RangingPipeDiameterEditView : UserControl { private string _materialName = string.Empty; private DispatcherTimer passTimer = new DispatcherTimer(); private int passTime = 0; //经过的时间 public RangingPipeDiameterEditView(string materialName) { InitializeComponent(); this.btnReturn.Click += btnReturn_Click; this.btnClose.Click += btnClose_Click; this.btnOK.Click += btnOK_Click; this.btnClear.Click += btnClear_Click; this.btnNum.Click += BtnNum_Click; this.btnCloseKb.Click += BtnCloseKb_Click; this.txtNum.GotFocus += TxtNum_GotFocus; this.txtNum.LostFocus += TxtNum_LostFocus; _materialName = materialName; rMaterialName.Text = _materialName; this.txtNum.PreviewTouchUp += TxtNum_PreviewTouchUp; this.txtNum.PreviewMouseUp += TxtNum_PreviewMouseUp; this.txtNum.KeyDown += txtNum_KeyDown; } private void TxtNum_PreviewMouseUp(object sender, MouseButtonEventArgs e) { HideInputPanel(); } private void TxtNum_PreviewTouchUp(object sender, TouchEventArgs e) { HideInputPanel(); } private void TxtNum_LostFocus(object sender, RoutedEventArgs e) { BtnCloseKb_Click(null, null); } private void TxtNum_GotFocus(object sender, RoutedEventArgs e) { bdrContent.Margin = new Thickness(0, 0, 0, 250); gridNumKeyboard.Visibility = Visibility.Visible; HideInputPanel(); } private const Int32 WM_SYSCOMMAND = 274; private const UInt32 SC_CLOSE = 61536; [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] private static extern bool PostMessage(IntPtr hWnd, int Msg, int wParam, int lParam); [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] private static extern bool PostMessage(IntPtr hWnd, int Msg, uint wParam, uint lParam); [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] private static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] private static extern IntPtr FindWindow(string lpClassName, string lpWindowName); //隐藏屏幕键盘 void HideInputPanel() { /* 线程优化1 System.Threading.ThreadStart start = delegate () { Thread.Sleep(500); IntPtr TouchhWnd = new IntPtr(0); TouchhWnd = FindWindow("IPTip_Main_Window", null); if (TouchhWnd == IntPtr.Zero) return; PostMessage(TouchhWnd, WM_SYSCOMMAND, SC_CLOSE, 0); }; Thread t = new System.Threading.Thread(start); t.IsBackground = true; t.Start(); * */ Task t = new Task(() => { Thread.Sleep(500); IntPtr TouchhWnd = new IntPtr(0); TouchhWnd = FindWindow("IPTip_Main_Window", null); if (TouchhWnd == IntPtr.Zero) return; PostMessage(TouchhWnd, WM_SYSCOMMAND, SC_CLOSE, 0); }); t.Start(); } private void BtnCloseKb_Click(object sender, RoutedEventArgs e) { bdrContent.Margin = new Thickness(0, 0, 0, 0); gridNumKeyboard.Visibility = Visibility.Collapsed; } void btnReturn_Click(object sender, RoutedEventArgs e) { SelectRangingPipeMaterialView selectRangingPipeMaterialView = new SelectRangingPipeMaterialView(); Global.GetMainView().bdrPreposition.Child = selectRangingPipeMaterialView; } void btnClose_Click(object sender, RoutedEventArgs e) { Border bdr = this.Parent as Border; if (bdr != null) { bdr.Child = null; } } private void txtNum_KeyDown(object sender, KeyEventArgs e) { //过滤按键 if ((e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9) || e.Key == Key.Decimal || (e.Key >= Key.D0 && e.Key <= Key.D9)) { e.Handled = false; } else { e.Handled = true; } } void btnOK_Click(object sender, RoutedEventArgs e) { if (txtNum.Text == "") { new PopupWindow("管径不允许为空!", "警告").ShowDialog(); return; } if (!Regex.IsMatch(txtNum.Text, "^([1-9][0-9]*)$")) { new PopupWindow("输入格式错误,请重新输入!", "警告").ShowDialog(); txtNum.Text = ""; return; } CalculteSatus.diameterData = txtNum.Text; Border bdr = this.Parent as Border; if (bdr != null) { bdr.Child = null; } new Thread(new ThreadStart(execute)) { IsBackground = true }.Start(); new PopupWindow("请在10秒后敲击发射机连接的传感器吸附的管线,用力敲击,只敲击一次", "提示").ShowDialog(); //SenderClass.sendCorrelatorRangingCmd(CalculteSatus.msp.sp);//下发测距指令 //启动一个定时器,改变绑定时间数值 passTimer.Interval = TimeSpan.FromMilliseconds(1000); passTimer.Tick += delegate { HomePageViewModel.Instance.Pass = passTime.ToString() + "s"; passTime++; }; passTimer.Start(); HomePageViewModel.Instance.BtnRangingIsEnabled = false; } /// <summary> /// 下发测距指令 /// </summary> private void execute() { CalculteSatus.CanGetSignal = false; //停止状态采集指令的发送 Thread.Sleep(10000); SenderClass.sendCorrelatorRangingCmd(CalculteSatus.msp.Sp); //下发测距指令 Thread.Sleep(50000); CalculteSatus.CanGetSignal = true; //重新开始状态采集 passTimer.Stop(); //停止计时 } void btnClear_Click(object sender, RoutedEventArgs e) { this.txtNum.Text = ""; } [DllImport("user32.dll", EntryPoint = "keybd_event", SetLastError = true)] public static extern void keybd_event(Keys bVk, byte bScan, uint dwFlags, uint dwExtraInfo); private void BtnNum_Click(object sender, RoutedEventArgs e) { Button btn = sender as Button; if (btn != null) { Keys key = Keys.Back; switch (btn.Content.ToString()) { case "0": key = Keys.NumPad0; break; case "1": key = Keys.NumPad1; break; case "2": key = Keys.NumPad2; break; case "3": key = Keys.NumPad3; break; case "4": key = Keys.NumPad4; break; case "5": key = Keys.NumPad5; break; case "6": key = Keys.NumPad6; break; case "7": key = Keys.NumPad7; break; case "8": key = Keys.NumPad8; break; case "9": key = Keys.NumPad9; break; case ".": key = Keys.Decimal; break; } keybd_event(key, 0, 0, 0); } } private void Grid_PreviewMouseDown(object sender, MouseButtonEventArgs e) { btnReturn.Focusable = true; btnReturn.Focus(); btnReturn.Focusable = false; } } }