我有一个使用 WinForms 的跨平台 .NET 应用程序。
为了更好地与 Unity 兼容,我想设置WM_CLASS
WinForms 窗口的属性。这可能吗?
我有一个使用 WinForms 的跨平台 .NET 应用程序。
为了更好地与 Unity 兼容,我想设置WM_CLASS
WinForms 窗口的属性。这可能吗?
bitbucket.org/hindlemail/settingwmclass上似乎有完整的示例项目:
示例项目展示了如何为在 Linux 上运行的单声道 winform 应用程序设置 WM_CLASS X11 属性。这使得 mono winforms 应用程序在 unity + gnome3 窗口管理器中表现得更好。
// Managed struct of XSetClassHint classHint.
public struct XClassHint
{
public IntPtr res_name;
public IntPtr res_class;
}
[DllImport ("libX11", EntryPoint="XSetClassHint", CharSet=CharSet.Ansi)]
public extern static int XSetClassHint(IntPtr display, IntPtr window, IntPtr classHint);
public static void SetWmClass(string name, string @class, IntPtr handle)
{
var a = new NativeX11Methods.XClassHint {
res_name = Marshal.StringToCoTaskMemAnsi(name),
res_class = Marshal.StringToCoTaskMemAnsi(@class)
};
IntPtr classHints = Marshal.AllocCoTaskMem(Marshal.SizeOf(a));
Marshal.StructureToPtr(a, classHints, true);
NativeX11Methods.XSetClassHint(NativeReplacements.MonoGetDisplayHandle(), NativeReplacements.MonoGetX11Window(handle), classHints);
Marshal.FreeCoTaskMem(a.res_name);
Marshal.FreeCoTaskMem(a.res_class);
Marshal.FreeCoTaskMem(classHints);
}
上面的页面有一个源代码的下载链接: