WinForms and Xna ,使用外部Form的完美解决方案
来源:互联网 发布:qq音乐网络代理 编辑:程序博客网 时间:2024/05/17 04:50
继承 Microsoft.Xna.Framework.Game,
graphics设置参数时,更改为传入的句柄
通过this.Window.Handle获取内置FORM对象,将其设置TOP,确定不出现在显示器中,即可。
内置FORM的VisibleChanged事件订阅:当显示内置FORM时,将其设置设置成不可见!!!
public class WinGame : Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics; public WinGame() { graphics = new GraphicsDeviceManager(this); drawHandle = IntPtr.Zero; } IntPtr drawHandle; Form form; public WinGame(Form form) : this(form,form.Handle) { } public WinGame(Form form, IntPtr drawHandle) : this() { this.form = form; this.drawHandle = drawHandle; graphics.PreparingDeviceSettings += (s, e) => { if (drawHandle == IntPtr.Zero) return; e.GraphicsDeviceInformation.PresentationParameters.DeviceWindowHandle = this.drawHandle; Mouse.WindowHandle = this.DeviceDrawControl.FindForm().Handle; //mouse状态支持 }; if (drawHandle == IntPtr.Zero) return; Form gameWindowForm = Control.FromHandle(this.Window.Handle) as Form; gameWindowForm.FormBorderStyle = FormBorderStyle.None; gameWindowForm.Top = -2000 + gameWindowForm.Height * -1; gameWindowForm.VisibleChanged += (s, e) => { if (!gameWindowForm.Visible) return; gameWindowForm.Visible = !gameWindowForm.Visible; }; } protected override void BeginRun() { if (this.form != null) { this.form.FormClosing += (s, e) => { base.Exit(); }; } base.BeginRun(); } public void SetBackColor(Color color) { if (this.drawHandle == IntPtr.Zero) return; var control = Control.FromHandle(this.drawHandle); control.BackColor = System.Drawing.Color.FromArgb(color.R, color.G, color.B); } }
XNA项目中,所有继承自Microsoft.Xna.Framework.Game,全部改成 从WinGame继承!
修改入口函数
static void Main(string[] args) { //using (Game1 game = new Game1()) //{ // game.Run(); //} using (Form1 form = new Form1()) { using (Game1 game = new Game1(form, form.GetPtr())) { form.Show(); game.Run(); } } System.Windows.Forms.Application.Exit(); }
form.GetPtr()方法,可以返回form自己的句柄,也可以是子控件的句柄!
这样不需要使用老外的那个事例中实现的XNA控件,又可以使用GAME的对象进行开发,方便!
- WinForms and Xna ,使用外部Form的完美解决方案
- XNA perfect in WinForms
- WinForms和XNA
- Winforms:Form的最小宽度限制
- C# winForms Dialog的使用
- Winforms: Form的大小不能超过屏幕的分辨率
- WinForms 新窗体后台打开完美的解决
- 使用jQuery.form插件,实现完美的表单异步提交
- 使用jQuery.form插件,实现完美的表单异步提交
- 使用jQuery.form插件,实现完美的表单异步提交
- 使用jQuery.form插件,实现完美的表单异步提交
- 使用jQuery.form插件,实现完美的表单异步提交
- 使用jQuery.form插件,实现完美的表单异步提交
- 使用jQuery.form插件,实现完美的表单异步提交
- 使用jQuery.form插件,实现完美的表单异步提交
- Repeater控件中使用if语句的完美解决方案
- 使用window.name,比较完美的跨域解决方案
- Java使用iText生成word文件的完美解决方案
- Android上使用Https连接
- C++STL 常用 函数 用法
- js对中文编码
- C++虚函数表
- There is no WRITEABLE property named 'unitcoefficient' in class 'com.rhyton.pems.core.domain.EnergyM
- WinForms and Xna ,使用外部Form的完美解决方案
- SGU 549 - Dumbbells
- 【91xcz】Win7资源管理器统一浏览样式
- 素数判定
- ORACLE dul 工具使用说明, [ID 465478.1] Note 72554.1
- 【装箱拆箱】java自动 深入剖析
- JS解析XML的实现代码
- 获取Android 光感Sensor的值
- CFile