日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

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

發布時間:2023/12/18 C# 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在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")]
????????
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#中得到这个值并传给这个参数呢?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。