1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 在C#中调用一个dll函数 其中有个参数为 hdc 如何在C#中得到这个值并传给这个参数呢?

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

时间:2019-06-03 13:19:42

相关推荐

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

用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")]

staticexternIntPtrGetDC(IntPtrHwnd);//其在MSDN中原型为HDCGetDC(HWNDhWnd),HDC和HWND都是驱动器句柄(长指针),在C#中只能用IntPtr代替了

[System.Runtime.InteropServices.DllImport("User32.dll")]

staticexternintReleaseDC(IntPtrhWnd,IntPtrhDC); 然后我们获得整个屏幕的设备驱动器句柄

Hdc = GetDC(IntPtr.Zero); //MSDN中说当传入指针为空时返回整个屏幕的设备驱动器句柄

嘿嘿,接下来我们就可以利用这个设备驱动器句柄来乱画东西了,不过在此之前我们先把这个C#不常见的东西转化为熟悉的Graphics。我们只要用

Graphicsg = Graphics.FromHdc(Hdc);//这样就从设备驱动器句柄中获得了.NET只能的Graphics类。

得到了这些东西,剩下的就不用我多说了吧,这些来大家就可以在这个屏幕上爱怎么画就怎么画。不过画完之后记得调用ReleaseDC()来释放这个句柄(如果画完程序就结束那倒无所谓)。

ReleaseDC(IntPtr.Zero, Hdc);//这样这个屏幕的设备驱动器句柄就被释放了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。