DrawtoBitmap не показывает содержимое панели
Мой первый пост здесь, так что здесь идет,
у меня есть программа, которая мне нужна, чтобы получить цвет пикселя на панели, панель содержит браузер IE, как показано в коде ниже (я не могу использовать веб-браузер, так как он не загружает некоторые веб-страницы так же, как 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 в форме, он игнорирует непрозрачность, поэтому я могу использовать его для получения цвета пикселя, однако оставив содержимое панели пустым (я использовал Picturebox для проверки изображения)
Dim mybitmap As New Bitmap(Me.Width, Me.Height)
Me.DrawToBitmap(mybitmap, Me.ClientRectangle)
PictureBox1.BackgroundImage = mybitmap
форма и все ее кнопки и т. д. хорошо отображаются на картинке, но панель пуста (я все пытался преобразовать только панель в растровое изображение, но это оказалось совершенно пустым). Я неправильно связываю IE с Panel или просто DrawtoPanel работает неправильно? (Я пытался использовать Printscreen, но, как и ожидалось, он включает в себя непрозрачность). вот мое 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 ответ
Решил, теперь не нужно Drawtobitmap, Попробовал это немного назад, но в GetWindowDC было установлено значение IntPtr.Zero, которое использует весь экран, а не только форму, и поэтому включает в себя цвета фона окон.
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)
теперь ему все равно, если для параметра Непрозрачность формы установлено значение 0, он по-прежнему находит цвет в форме.