用IntPtr类型,Hdc一般是指绘图设备句柄,用Graphics的成员方法GetHdc获得,Graphics可以用静态方法FromHwnd创建某个窗体的绘图器,把某个窗体的Handle传给他就可以了,如果Handle传0,则创建的是整个屏幕的绘图器。
最近在学习C#中的GDI部分,本来尝试编写一个字幕控件(其实还是用label比较合适),但是发现控件中用GDI将整个控件粉刷貌似不行(应该是我水平不行),所以就去捣鼓了下WIN32的DLL,发现用API还真是件幸福的事(仅在WIN32平台上说)。回到C#,在C#中要在一个窗体(控件也是窗体),只要用
    Graphics g=控件名.CreateGraphics();//这样就可以用g来在这个控件上画东西了。
    但是如果我想不限范围,在整个屏幕上画,那么.NET就无能为力了。还好,我们有WIN32,我们可以用GetDC或者CreateDC来获得整个屏幕的设备驱动器句柄。用完之后别忘了用ReleaseDC或DeleteDC释放。
    以下是C#中GetDC()和ReleaseDC()的声明方法

        [System.Runtime.InteropServices.DllImport("User32.dll")]
        static extern IntPtr GetDC(IntPtr Hwnd); //其在MSDN中原型为HDC GetDC(HWND hWnd),HDC和HWND都是驱动器句柄(长指针),在C#中只能用IntPtr代替了
        [System.Runtime.InteropServices.DllImport("User32.dll")]
        static extern int ReleaseDC( IntPtr hWnd,  IntPtr hDC);

然后我们获得整个屏幕的设备驱动器句柄
    Hdc = GetDC(IntPtr.Zero); //MSDN中说当传入指针为空时返回整个屏幕的设备驱动器句柄
    嘿嘿,接下来我们就可以利用这个设备驱动器句柄来乱画东西了,不过在此之前我们先把这个C#不常见的东西转化为熟悉的Graphics。我们只要用
    Graphics  g = Graphics.FromHdc(Hdc);//这样就从设备驱动器句柄中获得了.NET只能的Graphics类。
    得到了这些东西,剩下的就不用我多说了吧,这些来大家就可以在这个屏幕上爱怎么画就怎么画。不过画完之后记得调用ReleaseDC()来释放这个句柄(如果画完程序就结束那倒无所谓)。
    ReleaseDC(IntPtr.Zero, Hdc); //这样这个屏幕的设备驱动器句柄就被释放了。

在C#中调用一个dll函数,其中有个参数为 hdc,如何在C#中得到这个值并传给这个参数呢?相关推荐

  1. 在C#中调用windows API函数

    Api函数是构筑Windws应用程序的基石,每一种Windows应用程序开发工具,它提供的底层函数都间接或直接地调用了Windows API函数,同时为了实现功能扩展,一般也都提供了调用Windows ...

  2. 如何将matlab代码转为C语言(2)--在C++中调用matlab的函数

    如何将matlab代码转为C语言(2)–在C++中调用matlab的函数 在上一条博文中提供了一种直接在matlab操作中的方法,下面提供一种新的调用方法,即在C++中调用matlab中的dll文件. ...

  3. 在Visual C++中实现一个DLL木马

    在Visual C++中实现一个DLL木马 写一个木马挂载程序,听起来似乎很玄,其实也很简单,本文将告诉你怎样用Visual C++实现一个侵入木马的程序.本文主要涉及动态链接库(DLL)木马,目前相 ...

  4. 在Delphi中调用外部DLL 之External DLL 导入DLL

    调用一个DLL比写一个DLL要容易一些.首先给大家介绍的是静态调用方法,稍后将介绍动态调用方法,并就两种方法做一个比较.同样的,我们先举一个静态调用的例子. unit Unit1;interfaceu ...

  5. JAVA中调用C语言函数简单教程

    背景知识 本地代码 在JAVA中使用其他语言的代码(如C/C++)称为本地代码. 历史原因 JAVA的早期阶段,很多人认为使用C和C++来加速JAVA应用中的关键部分是个好主意,但是实际上,虽然JAV ...

  6. java 中调用 Matlab 的函数

    一.matlab版本必须支持java 在command 模式下面运行deploytool,如果支持该命令即可使用 二.matlab中function的书写 %定义一个函数operation(a,b), ...

  7. Js文件中调用其它Js函数的方法(转)

    2019独角兽企业重金招聘Python工程师标准>>> Js文件中调用其它Js函数的方法 在项目开发过程中,也许你会遇这样的情况.在某一Js文件中需要完成某一功能,但这一功能的大部分 ...

  8. Js文件中调用其它Js函数的方法

    2019独角兽企业重金招聘Python工程师标准>>> Js文件中调用其它Js函数的方法 在项目开发过程中,也许你会遇这样的情况.在某一Js文件中需要完成某一功能,但这一功能的大部分 ...

  9. Lua中调用C/C++函数 (转)

    1.前言 上次偶说到从C/C++中调用Lua的函数, 然后就有朋友问从Lua中如何调用C/C++的 函数, 所以偶们这次就来说说这个问题. 首先偶们会在C++中建立一个函数, 然后 告知Lua有这个函 ...

最新文章

  1. linux下独立core2.1部署发布过程
  2. android杀死进程
  3. 十步让你成为一名优秀的 Web开发人员
  4. HDU4475(找规律+预处理加速)
  5. 生成某一文件夹内文件清单(批量处理)
  6. Epoll详解及源码分析
  7. strocli64 源码_storcli 简易使用介绍
  8. 正确评估SQL数据库性能,你必须知道的原理和方法!
  9. mysql批量删除数据库_数据库实现批量删除数据的操作方法(代码实例)
  10. Atitit office ooxml 系列 excel的读取api 框架 poi的使用
  11. 98版五笔字型实用学习教程
  12. java动态数组_Java实现动态数组
  13. php ftps,使用PHP Curl的FTPS获得部分下载
  14. 使用Python实现一个简单的聊天室
  15. C#数据库教程5-ADO.NET登录页面设计
  16. PACS系统源码 影像管理系统源码(PACS)
  17. html5猜大王游戏,5月8日维护:新副本金兜洞兕大王部分测试
  18. 图像分类的技能包及每一项的实验验证
  19. 菜单侧边栏拖拽_SwiftUI —侧边栏菜单教程
  20. DB2的HADR的搭建

热门文章

  1. emwin 使用外部字库_整6个月的等待,ST终于可以免费使用ThreadX全家桶了
  2. 在计算机上收回光驱快捷键,如何使用Windows键盘快捷键打开光盘驱动器
  3. 自己动手写CPU(2)流水线数据相关问题
  4. oracle+去括号,关于001 TK的几个问题,请大家一起讨论一下
  5. 肽键肽链内部分的计算机术语大全,生化资料
  6. 原生android 全面屏,谷歌全面屏手机曝光!谷歌pixel2,安卓8.0+骁龙836!
  7. rabbitnq 源码安装_linux下源码安装rabbitMq
  8. oracle insert into values select from,ORACLE语法中的INSERT INTO。。。SELECT。。。 收藏
  9. html文本框自动赋值,js给文本框赋值 value与innerHTML
  10. GenXus学习笔记——Transaction的建立