【问题标题】:MonoGame Window.Handle doesn't return Window or FormMonoGame Window.Handle 不返回 Window 或 Form
【发布时间】:2021-04-26 07:39:32
【问题描述】:

我已经尝试了一段时间来解决这个问题,但我还没有在网上看到任何关于这个主题的解决方案。

问题是在将 MonoGame 与 Platform DesktopGL 一起使用时,Window.Handle 似乎无效。由于尝试从此句柄获取窗口/窗体返回 null,进一步支持这一点的是 BASS.Net 无法在此窗口句柄上播放音频,

这是我尝试使用句柄的部分代码(使用 Bass.Net 进行音频播放):

protected override void Initialize() {
    Game = this;

    //Getting the Form from Window Handle
    Form = (Form)Control.FromHandle(Game.Window.Handle);

    //Initializing Bass with Window Handle
    Bass.BASS_Init(-1, 4100, BASSInit.BASS_DEVICE_DEFAULT, Game.Window.Handle, null);

    base.Initlialize()
}

我试图在网上到处寻找,1 个消息来源指出 MonoGame 平台 WindowsDX 显然返回了一个有效的表单,尽管从我注意到的从未版本的 MonoGame 中,这个平台似乎不再受支持,此外我会喜欢这个项目是跨平台的,所以即使它存在/工作,坚持使用 WindowsDX 也不是一个好的解决方案。

在此先感谢任何设法找到 MonoGame 为何不返回窗口以及为什么这段特定代码不起作用的人。

【问题讨论】:

  • 查看 MonoGame 的在线文档显示 Game.Window 返回一个 GameWindow 实例 (source),其 Handle 属性返回一个 IntPtr (source)。您不能直接转换为Form,可以使用Control.FromHandle 并转换为Form,但我不确定MonoGame 的Window 是否基于WinForms 的Form
  • XNA 的旧版本(这是我移植到 MonoGame 使用的旧项目)也有 Game.Window 是一个 GameWindow 实例,它确实能够从它的句柄返回一个 Form ,所以我不再完全确定了。
  • 您说“此外,我希望这个项目是跨平台的”,但如果您依赖于 Form(和 Winforms),那么它已经不是跨平台的。 Bass我不熟悉,但是如果它依赖于Windows Form来初始化,那么它也不是跨平台的。

标签: c# monogame bass


【解决方案1】:

“Window.Handle”仅适用于 WindowsDX 平台。

OpenGL,不管是什么平台(包括Windows),都可以满足这个要求。

如果您正在寻找跨平台解决方案,请寻找其他地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    相关资源
    最近更新 更多