我已經使用這個代碼嵌入到Monogame Windows窗體:鼠標不工作Monogame Winforms中
private IntPtr drawSurface;
private Control gameForm;
public MapEditor(MainWindow window)
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
this.drawSurface = window.pcbViewport.Handle;
graphics.PreparingDeviceSettings += new EventHandler<PreparingDeviceSettingsEventArgs>(graphics_PreparingDeviceSettings);
Mouse.WindowHandle = drawSurface;
gameForm = Control.FromHandle(this.Window.Handle);
gameForm.VisibleChanged += new EventHandler(gameForm_VisibleChanged);
}
private void gameForm_VisibleChanged(object sender, EventArgs e)
{
if (gameForm.Visible)
{
gameForm.Visible = false;
}
}
private void graphics_PreparingDeviceSettings(object sender, PreparingDeviceSettingsEventArgs e)
{
e.GraphicsDeviceInformation.PresentationParameters.DeviceWindowHandle = drawSurface;
}
現在,用來工作的代碼...我認爲。這已經有一段時間了,代碼在另一臺老版本的計算機上,所以我似乎記得現在在Monogame之前的工作。無論如何,問題在於鼠標輸入不起作用!鍵盤和遊戲手柄輸入工作正常,但鼠標輸入根本沒有註冊。我已經嘗試過,發現如果我取出VisibleChanged事件,它可以工作,但它也顯示GameWindow以及窗體(它不需要在PictureBox中繪製它)
I' m知道我可以把GameWindow放在一個Control中,如果需要的話我會這樣做,但我試圖看看是否有解決方案來讓現有的代碼再次工作。
爲什麼你需要將它設置爲隱形?鼠標輸入指向鼠標下方的窗口(在典型情況下),但如果不可見,則無法接收該鼠標輸入。 – MicroVirus
如何以及在哪裏創建Game實例/表單實例?正如@微軟病毒所寫,隱藏一個WinForms'Control'將阻止它接收鼠標輸入。另外,我假定'MapEditor'是從'Game'派生的? – Groo
它是不可見的,因爲它呈現給winform內的一個picturebox。如果它是可見的,那麼你有兩個窗口,GameWindow和Winform中的窗口!如果你不能重新分配鼠標控制,這是一個問題。遊戲實例與Winform一起創建並分配給Winform。 – mikelomaxxx14