如何在WinForm项目中调用DX诸多问题解决方案汇总!
2015-03-27 00:09
417 查看
最近想在WinForm上调用Directx来渲染绘图,结果遇到了以下这些问题,经过一段时间的尝试这些问题已经得到解决,特此与大家一起分享以下经验!
首先我们来讲讲整个的正常思路,最后会在下面讲解在调用Directx过程中出现的一些问题及其解决方案!
笔者的电脑及其开发的相关环境: Win8.1 使用Visual Studio 2013 版本
一、 新建WinForm窗体。
二、点击菜单栏--->项目--->添加引用--->找你所调用的Directx相关引用,然后在所选引用名前“打勾”点击确定完成引用!
这里对一些所用到的引用做一些介绍,根据需求大家可以自己选,以上图是笔者一开始所需的所以没有添加完全
这里只介绍常用的
Microsoft.DirectX 包含DX所必须的引用,包含一些公共类和数学相关
Microsoft.DirectX.Direct3D 支持3D图形
Microsoft.DirectX.Direct3DX 支持3D图形
Microsoft.DirectX.DirectDraw DDraw,属于DX9版本前的东西了不需要也罢
Microsoft.DirectX.DirectPlay 多玩家游戏的,与网络编程相关,一些API。
Microsoft.DirectX.DirectSound DSound 播放音效
Microsoft.DirectX.DirectInput DInput 游戏相关操作的输入, 鼠标键盘事件啥的
Microsoft.DirectX.AudioVideoPlayback 多媒体相关,播放视频和音频</span>
三、当我们完成第二步之后开始Using这些引用了
一般情况下我们都必须引用以下三个
Microsoft.DirectX
Microsoft.DirectX.Direct3D
Microsoft.DirectX.Direct3DX
然后开始Using 这里只需要以下2个就行了,看代码
四、接着开始初始化DirectX设备,笔者选择在游戏Form的初始化之后初始化DirectX
五、当我们完成以上步骤之后,我们的WinForm项目 已经跟DirectX融为一体了接着我们将会讲如何在WinForm界面中使用Sprite来渲染图片
//电脑没电了。接下来会马上更新
1:我电脑安装了Directx SDK 为什么在 Visual Studio的菜单栏-->添加引用 里面没有发现DX相关的引用?
解决方案: 这是由于系统盘 C:\Program Files\Reference Assemblies\Microsoft\VSTO40 下没有DX先关的引用文件。
所以我们要到 C:\Windows\Microsoft.NET\DirectX for Managed Code\1.0.2902.0 文件下找到DX的相关dll文件
这个时候只需要把C:\Windows\Microsoft.NET\DirectX for Managed Code\1.0.2902.0
文件拷贝到C:\Program Files\Reference Assemblies\Microsoft\VSTO40 下,重新返回Visual Studio 打开添加引用即可看见DX相关引用
当然你也可以选择 不拷贝,直接通过 添加引用界面 的 “浏览按钮”直接访问
C:\Windows\Microsoft.NET\DirectX for Managed Code\1.0.2902.0 文件夹。手动导入并打勾确定添加引用。
添加引用成功后。别忘了在项目所需DX的地方Using 相关的文件哦。
2:我导入DX引用并运行之后,编译并运行程序时代码报错
解决方案: 这是由于你的系统是64位的,你需要在配置管理器中添加一个X86的平台
选择X86的平台,然后返回项目确认 DEBUG平台为 X86
这个时候在此编译运行,有些机子可以通过,但是有些机子依然还是无法通过。
为什么呢?
这是因为在 工程目录下 App.config 文件中的代码不兼容所致
将App.config 代码改成以下代码
最后点击编译并运行,这个时候就可以发现 一个融合了DirectX的窗口终于可以运行了
首先我们来讲讲整个的正常思路,最后会在下面讲解在调用Directx过程中出现的一些问题及其解决方案!
笔者的电脑及其开发的相关环境: Win8.1 使用Visual Studio 2013 版本
一、 新建WinForm窗体。
二、点击菜单栏--->项目--->添加引用--->找你所调用的Directx相关引用,然后在所选引用名前“打勾”点击确定完成引用!
这里对一些所用到的引用做一些介绍,根据需求大家可以自己选,以上图是笔者一开始所需的所以没有添加完全
这里只介绍常用的
Microsoft.DirectX 包含DX所必须的引用,包含一些公共类和数学相关
Microsoft.DirectX.Direct3D 支持3D图形
Microsoft.DirectX.Direct3DX 支持3D图形
Microsoft.DirectX.DirectDraw DDraw,属于DX9版本前的东西了不需要也罢
Microsoft.DirectX.DirectPlay 多玩家游戏的,与网络编程相关,一些API。
Microsoft.DirectX.DirectSound DSound 播放音效
Microsoft.DirectX.DirectInput DInput 游戏相关操作的输入, 鼠标键盘事件啥的
Microsoft.DirectX.AudioVideoPlayback 多媒体相关,播放视频和音频</span>
三、当我们完成第二步之后开始Using这些引用了
一般情况下我们都必须引用以下三个
Microsoft.DirectX
Microsoft.DirectX.Direct3D
Microsoft.DirectX.Direct3DX
然后开始Using 这里只需要以下2个就行了,看代码
四、接着开始初始化DirectX设备,笔者选择在游戏Form的初始化之后初始化DirectX
</pre><pre name="code" class="csharp">public partial class GameForm : Form { //类全局变量声明 Device g_pd3dDevice = null;<span style="white-space:pre"> </span>//D3D设备创建 public GameForm() { InitializeComponent(); InitD3D_Device();<span style="white-space:pre"> </span>//D3D设备初始化函数 } private void InitD3D_Device() { try { PresentParameters presentParams = new PresentParameters();<span style="white-space:pre"> </span> presentParams.Windowed = true;<span style="white-space:pre"> </span>//窗体形式渲染 presentParams.SwapEffect = SwapEffect.Discard; g_pd3dDevice = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);<span style="white-space:pre"> </span>//创建设备 } catch(DirectXException e)<span style="white-space:pre"> </span>//捕捉创建异常 { MessageBox.Show(e.ToString(), "ERROR", MessageBoxButtons.OK); this.Close(); } } }
五、当我们完成以上步骤之后,我们的WinForm项目 已经跟DirectX融为一体了接着我们将会讲如何在WinForm界面中使用Sprite来渲染图片
//电脑没电了。接下来会马上更新
1:我电脑安装了Directx SDK 为什么在 Visual Studio的菜单栏-->添加引用 里面没有发现DX相关的引用?
解决方案: 这是由于系统盘 C:\Program Files\Reference Assemblies\Microsoft\VSTO40 下没有DX先关的引用文件。
所以我们要到 C:\Windows\Microsoft.NET\DirectX for Managed Code\1.0.2902.0 文件下找到DX的相关dll文件
这个时候只需要把C:\Windows\Microsoft.NET\DirectX for Managed Code\1.0.2902.0
文件拷贝到C:\Program Files\Reference Assemblies\Microsoft\VSTO40 下,重新返回Visual Studio 打开添加引用即可看见DX相关引用
当然你也可以选择 不拷贝,直接通过 添加引用界面 的 “浏览按钮”直接访问
C:\Windows\Microsoft.NET\DirectX for Managed Code\1.0.2902.0 文件夹。手动导入并打勾确定添加引用。
添加引用成功后。别忘了在项目所需DX的地方Using 相关的文件哦。
2:我导入DX引用并运行之后,编译并运行程序时代码报错
解决方案: 这是由于你的系统是64位的,你需要在配置管理器中添加一个X86的平台
选择X86的平台,然后返回项目确认 DEBUG平台为 X86
这个时候在此编译运行,有些机子可以通过,但是有些机子依然还是无法通过。
为什么呢?
这是因为在 工程目录下 App.config 文件中的代码不兼容所致
将App.config 代码改成以下代码
<?xml version="1.0"?> <configuration> <startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0"/> </startup> </configuration>
最后点击编译并运行,这个时候就可以发现 一个融合了DirectX的窗口终于可以运行了
相关文章推荐
- Java项目中超时问题解决方案汇总--解决cxf 时间 等待问题 bug~~~~
- Android项目Build报错Unable to execute dx(65535问题解决方案)
- 【ITOO项目中遇到的问题】Jboss启动项目能远程调用其他系统,不能远程调用本系统问题解决方案
- QT 调用DLL出问题解决方案汇总
- 安卓AndroidStudio如何在同一个手机中安装两个相同的项目+++++自己处理的一些问题解决方法
- 如何在office2016(word2016)中安装mathtype6.9及相关问题解决方案
- 如果你的项目需要设置header 但是报跨域问题如何解决?
- 如何解决web项目跨域问题
- 详解vue项目和普通项目如何解决开发环境与生产环境下的跨域问题
- 网站项目所有js css无法引用问题解决方案
- java socket调用webservice以及如何解决连接重置报错问题
- java socket调用webservice以及如何解决连接重置报错问题
- Java项目打包成exe以及解决问题的方案
- 解决打包生成JAR在Android项目中不能调用问题
- spring mvc 常见问题解决方案汇总。
- 如何解决android studio导入eclipse项目时卡的问题
- C#调用exe解决PDF转图片问题(使用PDFBox方案,java语言编译jar包实现)
- iOS项目开发键盘弹出遮挡输入框问题解决方案
- android messager跨应用进程之pacelable遇到问题解决方案汇总