问题
I will start from beginning, I aw working on an application which will span over multiple monitors, each monitor will contain a single WPF window and these windows are controled using a single viewmodel class. now lets say i have a button on all the windows at 200,300 (x,y) and i want that this button should be responsible for a tool on same window, while all rest are responsible for the application. When i try to get current mouse position or last click position i get position relative to the current monitor , i.e. in this case 200,300, irrespective of in what screen i am on.
following sre the code i tried for getting mouse position
[DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool GetCursorPos(ref Win32Point pt); [StructLayout(LayoutKind.Sequential)] internal struct Win32Point { public Int32 X; public Int32 Y; }; public static Point GetMousePosition() { Win32Point w32Mouse = new Win32Point(); GetCursorPos(ref w32Mouse); return new Point(w32Mouse.X, w32Mouse.Y); }
Point point = Control.MousePosition;
Mouse.GetPosition(null);
following is the code which should return me the screen no.
private int ConvertMousePointToScreenIndex(System.Windows.Point mousePoint)
{
//first get all the screens
System.Drawing.Rectangle ret;
for (int i = 1; i <= System.Windows.Forms.Screen.AllScreens.Count(); i++)
{
ret = System.Windows.Forms.Screen.AllScreens[i - 1].Bounds;
if (ret.Contains(new System.Drawing.Point((int)mousePoint.X, (int)mousePoint.Y)))
return i - 1;
}
return 0;
}
I always get screen as 0 :( Please help me in getting appropriate value
回答1:
Could you use the Screen
static class?
For example, something like:
Screen s = Screen.FromPoint(Cursor.Position);
Or get the current screen from a particular form using:
Screen s = Screen.FromControl(this);
With this
being your Form control.
http://msdn.microsoft.com/en-us/library/system.windows.forms.screen.aspx
回答2:
Thanks KnottytOmo, it worked now, may be there was something else wrong at that moment. I changed my code to
private int ConvertMousePointToScreenIndex(Point mousePoint)
{
//first get all the screens
System.Drawing.Rectangle ret;
for (int i = 1; i <= Screen.AllScreens.Count(); i++)
{
ret = Screen.AllScreens[i - 1].Bounds;
if (ret.Contains(mousePoint))
return i - 1;
}
return 0;
}
and called it as ConvertMousePointToScreenIndex(System.Windows.Forms.Cursor.Position);
来源:https://stackoverflow.com/questions/26402955/finding-monitor-screen-on-which-mouse-pointer-is-present