2012-08-10 222 views
2

我正在閱讀一些VB6轉換爲C#。這條線是什麼意思? 0&相當於IntPtr.ZeroGetDC(0&)是什麼意思?

//'Get a Device context 
hdc = GetDC(0&) 

該值用於PInvoke的,所以我不知道IntPtr.Zero有道理的,因爲我們需要進行選擇一些對象。

OldFont = SelectObject(hdc, ObjFont) 

筆記,ObjFont經由

//'Get the Window's font 
ObjFont = SendMessage(hwnd, WM_GETFONT, 0, 0&)//there's that mysterious 0& agaain. 

回答

6

填充它是一種(VB6)類型聲明字符。查看this question瞭解更多細節。

在您的例子VB6代碼,它迫使0是一個Long(4字節),因爲它本來是一個Integer(2字節)

這是一樣的做這個長手的做法再次VB6的代碼:

​​
+0

那麼讓設備上下文爲零?那是什麼意思?我認爲它試圖去處理一些事情。 – 2012-08-10 14:41:45

+2

@ P.Brian.Mackey從MSDN:「如果參數爲NULL,則它獲得整個屏幕的DC」 – James 2012-08-10 14:44:41

+0

並且據我所知VB6「Long」是一個32位有符號整數,例如,相當於一個'System.Int32'或使用C#別名'int'。 – 2012-08-10 14:45:01

0

這是一樣Clng(0) :)正如下面所說的傢伙; d

+1

在C中是在VB6中,它與'Clng(0)' – 2012-08-10 14:43:55

+1

相同。在C#中,'0'是64位。在VB6中,'0'是32位(而「0」是16位)。 – 2012-08-10 14:46:24

+0

哦,我的壞,斯里。 Thx解釋:) – Nickon 2012-08-10 14:48:02

3

這相當於通過NULLGetDC() WH ich指示函數返回hDC整個屏幕,因此IntPtr.Zero是等效的。

6

在你的具體例子中,是的,它相當於C#中的IntPtr.Zero

這是VB6的「空處理值」,GetDC用於返回整個屏幕的設備上下文。