using Newtonsoft.Json.Linq; using PipeGallery.Correlator; using PipeGallery.Manage; using PipeGallery.ViewModel; using System; using System.Collections.Generic; using System.IO; using System.Runtime.InteropServices; using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Threading; namespace PipeGallery.View { /// <summary> /// PipeLengthEditView.xaml 的交互逻辑 /// </summary> public partial class PipeDiameterEditView : UserControl { private string _materialName = string.Empty; public PipeDiameterEditView(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) { //SelectPipeRangeView selectPipeRangeView = new SelectPipeRangeView(_materialName); //Global.GetMainView().bdrPreposition.Child = selectPipeRangeView; SelectPipeMaterialView selectPipeMaterialView = new SelectPipeMaterialView(); Global.GetMainView().bdrPreposition.Child = selectPipeMaterialView; } 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; } Correlator.CalculteSatus.diameterData = txtNum.Text; Border bdr = this.Parent as Border; if (bdr != null) { PipeLengthEditView pipeLengthEditView = new PipeLengthEditView(_materialName); bdr.Child = pipeLengthEditView; } } void btnClear_Click(object sender, RoutedEventArgs e) { this.txtNum.Text = ""; } [DllImport("user32.dll", EntryPoint = "keybd_event", SetLastError = true)] public static extern void keybd_event(System.Windows.Forms.Keys bVk, byte bScan, uint dwFlags, uint dwExtraInfo); private void BtnNum_Click(object sender, RoutedEventArgs e) { Button btn = sender as Button; if (btn != null) { System.Windows.Forms.Keys key = System.Windows.Forms.Keys.Back; switch (btn.Content.ToString()) { case "0": key = System.Windows.Forms.Keys.NumPad0; break; case "1": key = System.Windows.Forms.Keys.NumPad1; break; case "2": key = System.Windows.Forms.Keys.NumPad2; break; case "3": key = System.Windows.Forms.Keys.NumPad3; break; case "4": key = System.Windows.Forms.Keys.NumPad4; break; case "5": key = System.Windows.Forms.Keys.NumPad5; break; case "6": key = System.Windows.Forms.Keys.NumPad6; break; case "7": key = System.Windows.Forms.Keys.NumPad7; break; case "8": key = System.Windows.Forms.Keys.NumPad8; break; case "9": key = System.Windows.Forms.Keys.NumPad9; break; case ".": key = System.Windows.Forms.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; } } }