• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > 混合语言编程—C#使用原生的Directx和OpenGL绘图的方法

混合语言编程—C#使用原生的Directx和OpenGL绘图的方法

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了语言混合的形式有,r语言 混合线性模型,c语言四则混合运算,语言混合,r语言混合效应模型等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

由于项目需要做一些图形展示,所以就想到了使用Directx和OpenGL来绘图,但项目准备使用C#来开发(大家比较熟悉C#),在网上看了相关的资料,有一些第三方的控件可用,试用了下,一运行就占了几百M的内存,而且也不知道是否稳定,教程也少,还不如直接使用原生的。在网上看的Directx和OpenGL的教程基本上都是C/C++的,找了很久也就找到相关介绍,只能自己研究下。

我以前做过C#和C++混合语言编程相关的东西,在C++实现一些C#不好实现的功能,C#动态调用DLL文件,所以也想到了用C++的代码来控制Winform控件的绘画,这样就可实现用Direct和OpenGL在Winform的控件上绘画了。

由于我对Direct和OpenGL都不熟悉,没有这方面的编程经验,只能去瞎折腾,下面分别说说最近在Directx和OpenGL怎么试验的。

Directx:

之前没学过Directx,拿了同学的代码来看,也是雾里看花啊,不过有一点启示了我,在初始化的时候,要传入一个句柄去创建设备(CreateDevice),通常都是传入窗口的设备,我想如果传入一个控件的句柄,那所有的绘画都将在这个控件上实现,因为控件也是继承自Window的。而Winform的控件在底层的实现应该和WIN32是一样的。这样的话只要把Winform的控件的句柄传入C++代码进行初始化,那么绘画的结果将显示在这个控件上。结果一试,还真行。关键代码如下:

extern "C" _declspec(dllexport) VOID Render();
</div>

在InitD3D传入控件的句柄进行初始化,C#再调用Render进行绘画,以下是C#代码:

InitD3D(handle);

private void Draw()

  {

         for (; ; )

            {

                Render();

            }

        }
 </div>
效果图:

OpenGL:
         查看了OpenGL的相关教程(推荐http://www.yakergong.net/nehe/),OpenGL是通过RC来执行的,创建RC时就必须指定一个DC,还要设置DC的像素格式。每个线程有且只能拥有一个RC。
         如果在初始化OpenGL的绘画环境时传入一个Winform的控件句柄,再通过这个句柄取到HDC,就可使用这个HDC来创建RC,这样OpenGL的绘画环境就准备好了,并且这个RC关联到Winform的控件上。
         在给制前,先为当前线程选择RC(之前通过HDC创建的),再进行绘制,这样绘制的结果将显示在这个Winform控件上。
         关键代码如下:
C++:
      0,                  &nbs

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 混合语言编程—C#使用原生的Directx和OpenGL绘图的方法

相关文章

  • 2017-05-28C#基础知识之new关键字介绍
  • 2017-05-28winform壁纸工具为图片添加当前月的日历信息
  • 2017-05-28利用thrift实现js与C#通讯的实例代码
  • 2017-05-28C#资源释放方法实例分析
  • 2017-05-28C#中的DataSet、string、DataTable、对象转换成Json的实现代码
  • 2017-05-28C#实现查杀本地与远程进程的方法
  • 2017-05-28C#实现根据实体类自动创建数据库表
  • 2017-05-28C#判断给定IP地址是否在指定范围内的方法
  • 2017-05-28DevExpress实现TreeList向上递归获取公共父节点的方法
  • 2017-05-28c#使用wmi查询usb设备信息示例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 提取HTML代码中文字的C#函数
    • C#汉字转换拼音技术详解(高性能)
    • C#获取客户端相关信息实例总结
    • 初步认识C#中的Lambda表达式和匿名方法
    • c#字符长度查询代码
    • C#定时器实现自动执行的方法
    • 基于TCP异步Socket模型的介绍
    • C#实现日期格式转换的公共方法类实例
    • C#实现的文件压缩和解压缩类
    • C#查找列表中所有重复出现元素的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有