2013-07-18 109 views
0

我的第一篇文章在這裏所以這裏去,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它忽略不透明度,所以我可以使用它來獲取像素顏色,但drawtobitmap正在離開面板的內容blan K(我用一個PictureBox測試圖像)

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

形式,並且它的所有按鈕等顯示在PictureBox的細但面板是空白(IVE都試圖只小組轉換爲位圖但是這完全是空白)。 我是否將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 

任何幫助將不勝感激,謝謝 瑞安

回答

0

解決了這個問題,不需要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,它仍然發現表格上的顏色它不關心。