我为mac制作了第一个程序,这是一个使用Xamarin mac Cocoa的简单终端模拟。为了绘制终端,我使用XiaSharp。要获得输入,我使用:
NSEvent.AddLocalMonitorForEventsMatchingMask(NSEventMask.KeyDown, KeyboardEventHandler);
private NSEvent KeyboardEventHandler(NSEvent keyEvent)
{
//FOR GL KEY
if (keyEvent.KeyCode == 51) CSTSocket.SendByte(8); //Back
else if (keyEvent.KeyCode == 36|| keyEvent.KeyCode == 76) CSTSocket.SendByte(13); //Enter
else if (keyEvent.KeyCode == 49) CSTSocket.SendByte(32); //Space
else if (keyEvent.KeyCode == 123) CSTSocket.SendByte(8); //Arrow Left
else if (keyEvent.KeyCode == 126) CSTSocket.SendByte(11); //Arrow Up
else if (keyEvent.KeyCode == 124) CSTSocket.SendByte(12); //Arrow Right
else if (keyEvent.KeyCode == 125) CSTSocket.SendByte(22); //Arrow Down
}
这适用于一个窗口,但如果我添加更多的窗口:
[Export("newWindow:")]
void NewDocument(NSObject sender)
{
// Get new window
var storyboard = NSStoryboard.FromName("Main", null);
var controller = storyboard.InstantiateControllerWithIdentifier("MainWindow") as NSWindowController;
// Display
controller.ShowWindow(this);
// Set the title
controller.Window.Title = (++WindowCount == 1) ? "Watermelon" : string.Format("Watermelon {0}", WindowCount);
}
问题:我在同一时间键入每个创建的窗口。
是否有一个事件,我可以确定哪个窗口是活动的,或者是否有另一个键盘事件我必须使用?
如有任何建议,将不胜感激
示例图片:图片
我自己想好了:
在ViewController.cs中,若窗口具有输入焦点,则可以获得布尔值:
this.View.Windows.IsKeyWindow