在C#中调用一个dll函数,其中有个参数为 hdc,如何在C#中得到这个值并传给这个参数呢?
生活随笔
收集整理的這篇文章主要介紹了
在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#中的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#中得到这个值并传给这个参数呢?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FFMpeg分析详细分析
- 下一篇: C#获取容器窗体中控件Location问