WPF备忘录(2)WPF获取和设置鼠标位置与progressbar的使用方法

一、WPF 中获取和设置鼠标位置

  方法一:WPF方法

 

    Point p = Mouse.GetPosition(e.Source as FrameworkElement);



  Point p = (e.Source as FrameworkElement).PointToScreen(pp);

    方法二: API方法

   /// <summary>   

        /// 设置鼠标的坐标   

        /// </summary>   

        /// <param name="x">横坐标</param>   

        /// <param name="y">纵坐标</param>          



        [DllImport("User32")]



        public extern static void SetCursorPos(int x, int y);

        public struct POINT

        {

            public int X;

            public int Y;

            public POINT(int x, int y)

            {

                this.X = x;

                this.Y = y;

            }



        }



        /// <summary>   

        /// 获取鼠标的坐标   

        /// </summary>   

        /// <param name="lpPoint">传址参数,坐标point类型</param>   

        /// <returns>获取成功返回真</returns>   





        [DllImport("user32.dll", CharSet = CharSet.Auto)]

        public static extern bool GetCursorPos(out POINT pt);





        private void Window_MouseMove(object sender, MouseEventArgs e)

        {

            POINT p = new POINT();

            if (GetCursorPos(out p))//API方法

            {

                txtStat.Text = string.Format("X:{0}   Y:{1}", p.X, p.Y);

            }

        }

 

二、 WPF中实现实时更新progressbar

      实现实时更新ProgressBar貌似有很多方法,我搜索的很多资料都要用线程,觉得还是有点儿麻烦,最后在国外的技术论坛上看到

  一个用代理解决的方法,下面就是我的调试过程:

 
   

private delegate void UpdateProgressBarDelegate(System.Windows.DependencyProperty dp,

Object value);

 
   


private void Process()
{
//Configure the ProgressBar
ProgressBar1.Minimum = 0;
ProgressBar1.Maximum = short.MaxValue;
ProgressBar1.Value = 0;

 
   

//Stores the value of the ProgressBar
double value = 0;

 
   


UpdateProgressBarDelegate updatePbDelegate = new UpdateProgressBarDelegate(ProgressBar1.SetValue);

 
   

//Tight Loop: Loop until the ProgressBar.Value reaches the max
do
{
value += 1;

 
   


Dispatcher.Invoke(updatePbDelegate,
System.Windows.Threading.DispatcherPriority.Background,
new object[] { ProgressBar.ValueProperty, value });

 
   

}
while (ProgressBar1.Value != ProgressBar1.Maximum);

 
   

}

 

 前台:

    <ProgressBar Grid.Row="1" Height="20" Width="200" Margin="0,4,0,0"   Name="ProgressBar1" HorizontalAlignment="Center"  VerticalAlignment="top"  />

效果:

方法二:使用定时器

  

  public Window1()

        {

            InitializeComponent();



            DispatcherTimer _mainTimer = new DispatcherTimer();

            _mainTimer.Interval = TimeSpan.FromSeconds(1);

            _mainTimer.Tick += new EventHandler(_mainTimer_Tick);

            _mainTimer.IsEnabled = true;



        }
 void _mainTimer_Tick(object sender, EventArgs e)

        {

            if (progressBar2.Value == progressBar1.Maximum)

                progressBar2.Value = 0;



            progressBar2.Value++;

        }

 

 

 

你可能感兴趣的:(ProgressBar)