2012-08-10 163 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用于返回整个屏幕的设备上下文。