您的位置:首页 > 其它

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

2013-07-23 09:15 691 查看
一、WPF中获取和设置鼠标位置

  方法一:WPF方法

 

Pointp=Mouse.GetPosition(e.SourceasFrameworkElement);

  Pointp=(e.SourceasFrameworkElement).PointToScreen(pp);


    方法二:API方法

///<summary>
///设置鼠标的坐标
///</summary>
///<paramname="x">横坐标</param>
///<paramname="y">纵坐标</param>

[DllImport("User32")]

publicexternstaticvoidSetCursorPos(intx,inty);
publicstructPOINT
{
publicintX;
publicintY;
publicPOINT(intx,inty)
{
this.X=x;
this.Y=y;
}

}

///<summary>
///获取鼠标的坐标
///</summary>
///<paramname="lpPoint">传址参数,坐标point类型</param>
///<returns>获取成功返回真</returns>

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

privatevoidWindow_MouseMove(objectsender,MouseEventArgse)
{
POINTp=newPOINT();
if(GetCursorPos(outp))//API方法
{
txtStat.Text=string.Format("X:{0}Y:{1}",p.X,p.Y);
}
}


[b]二、WPF中实现实时更新progressbar[/b]

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

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


privatedelegatevoidUpdateProgressBarDelegate(System.Windows.DependencyPropertydp,

Objectvalue);



privatevoidProcess()
{
//ConfiguretheProgressBar
ProgressBar1.Minimum=0;
ProgressBar1.Maximum=short.MaxValue;
ProgressBar1.Value=0;


//StoresthevalueoftheProgressBar
doublevalue=0;



UpdateProgressBarDelegateupdatePbDelegate=newUpdateProgressBarDelegate(ProgressBar1.SetValue);


//TightLoop:LoopuntiltheProgressBar.Valuereachesthemax
do
{
value+=1;



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


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


}



前台:

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


效果:



方法二:使用定时器

  

publicWindow1()
{
InitializeComponent();

DispatcherTimer_mainTimer=newDispatcherTimer();
_mainTimer.Interval=TimeSpan.FromSeconds(1);
_mainTimer.Tick+=newEventHandler(_mainTimer_Tick);
_mainTimer.IsEnabled=true;

}


void_mainTimer_Tick(objectsender,EventArgse)
{
if(progressBar2.Value==progressBar1.Maximum)
progressBar2.Value=0;

progressBar2.Value++;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: