DrawtoBitmap不显示Panel的内容

时间:2013-07-18 09:54:42

标签: vb.net panel drawtobitmap

我的第一篇帖子就在这里,

我有一个程序需要获取面板中像素的颜色,面板包含一个IE浏览器,如下面的代码所示(我不能使用webBrowser,因为它不会加载一些网页,如同IE / Firefox(通常是java))

    Dim TheBrowser = New SHDocVw.InternetExplorer
    asd = TheBrowser.HWND
    fgh = Me.Panel2.Handle
    SetParent(asd, fgh)
    SendMessage(asd, WM_SYSCOMMAND, SC_MAXIMIZE, 0)

此位工作正常,但用户可以更改整个窗体的不透明度,以便获得像素颜色我发现,如果我在窗体上使用DrawtoBitmap它会忽略不透明度,所以我可以使用它来获取像素颜色,但是drawtobitmap将Panel的内容留空(我用过图片框来测试图像)

    Dim mybitmap As New Bitmap(Me.Width, Me.Height)
    Me.DrawToBitmap(mybitmap, Me.ClientRectangle)
    PictureBox1.BackgroundImage = mybitmap

表单及其所有按钮等在图片框上显示正常,但面板是空白的(我们都尝试将Panel转换为位图,但这完全是空白的)。 我是否错误地将IE链接到Panel或者只是DrawtoPanel无法正常工作? (我尝试使用Printscreen,但正如预期的那样,它包含了Opacity)。 继承我的Sendmessage和Setparent只是因为完整性。

<DllImport("user32.dll")> _
Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
End Function
 <DllImport("user32.dll")> _
Public Shared Function SetParent(ByVal HWNDChild As IntPtr, ByVal HWNDNewParent As IntPtr) As IntPtr
End Function

任何帮助将不胜感激, 谢谢 莱恩

1 个答案:

答案 0 :(得分:0)

解决了它,现在不需要Drawtobitmap,稍微尝试了一下但是使用IntPtr.Zero设置了GetWindowDC,它使用整个屏幕而不仅仅是Form,因此包含了窗口的背景颜色。

Dim hdc As IntPtr = GetWindowDC(Form2.Handle)
Dim pixel As UInteger = GetPixel(hdc, x - Form2.Top, y - Form2.Left)
Dim color As Color

ReleaseDC(Form2.Handle, hdc)
color = color.FromArgb(Int(pixel And &HFF), _
Int(pixel And &HFF00) >> 8, _
Int(pixel And &HFF0000) >> 16)

现在它并不关心Form Opacity是否设置为0,它仍然在Form上找到颜色。